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 DistributionApi.Models.Input;
using MadRunFabric.Model;
using DistributionApi.Model.Dto;
namespace DistributionApi.Controllers
{
///
/// 配送地址管理 - 不用了
///
[Authorize]
[ApiVersion("6.0")]
[Route("api/[controller]")]
[Produces("application/json")]
public class DistriAddressController : BaseController
{
private readonly ILogger _logger;
private readonly ISignTokenService _signTokenService;
private readonly IDistri_AddressRepository _distri_adressrepository;
private readonly ISys_DepartmentRepository _sys_departmentpository;
public DistriAddressController(
ILogger logger,
ISignTokenService signTokenService,
IDistri_AddressRepository distri_adressrepository,
ISys_DepartmentRepository sys_departmentpository
)
{
_logger = logger;
_signTokenService = signTokenService;
_distri_adressrepository = distri_adressrepository;
_sys_departmentpository = sys_departmentpository;
}
///
/// 获取地址列表分页 by page
///
///
///
///
///
///
///
[HttpGet("getlistbypage")]
public IActionResult GetListByPageAsync(string keyword, string projectid, string buildingid, string floorid,int addresstype = -1, 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();
//获取数据
int recordCount = 0;
var result = _distri_adressrepository.GetListsByPage(keyword, projectid, buildingid, floorid, userinfo, addresstype, pageindex, pagesize, out recordCount);
var obj = new
{
rows = result.ToList(),
total = recordCount
};
return Success("获取成功", obj);
}
///
/// 获取地址列表 - 下拉
///
///
[HttpGet("getlist")]
public IActionResult GetListAsync(string keyword, string projectid, int addresstype = -1)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
var userstr = _signTokenService.GetUserInfoAsync(usercode).Result;
var userinfo = userstr.ToJObject()["data"].ToString().ToObject();
//获取数据
var result = _distri_adressrepository.GetLists(keyword, projectid, userinfo, addresstype);
#region 遍历计算 - 科室表不用,楼层备注为科室
////所有科室
//var listDep = (await _sys_departmentpository.Get(x => x.isdelete == 0)).ToList();
//var list = new List();
//foreach (var item in result)
//{
// //初始化全局变量
// deptmentNames = string.Empty;
// var deptmentNames_Item = GetDeptmentNames(listDep, item.departmentid);
// #region 倒序排序
// //定义临时变量
// string strRestult = "";
// string[] split = deptmentNames_Item.Split(new char[] { '|' }, 2);
// for (int i = split.Length - 1; i >= 0; i--)
// {
// strRestult += split[i] + "|";
// }
// strRestult = strRestult.TrimEnd(new char[] { '|' });
// #endregion
// item.departmentname = strRestult;
// list.Add(item);
//}
#endregion
return Success("获取成功", result.ToList());
}
///
/// 循环获取科室名称(一级|二级|三级...)
///
///
///
///
string deptmentNames = "";
public string GetDeptmentNames(List list, string depid)
{
string pid = "";
var model = list.FirstOrDefault(x => x.id == depid);
if (model != null)
{
pid = model.parent_id;
deptmentNames += model.departmenname + "|";
GetDeptmentNames(list, pid);
}
deptmentNames = deptmentNames.TrimEnd(new char[] { '|' });
return deptmentNames;
}
///
/// 获取地址详情
///
[HttpGet("getsingle")]
public IActionResult GetSingleAsync(string id)
{
var model = _distri_adressrepository.GetDetails(id);
return Success("获取成功", model);
}
///
/// 添加地址
///
[HttpPost("add")]
public async Task AddAsync(DistriAddressInput input)
{
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(input.projectid))
return Error("请选择项目");
if (string.IsNullOrWhiteSpace(input.fullname))
return Error("请输入客户姓名");
if (string.IsNullOrEmpty(input.mobile))
return Error("请输入来电电话");
#endregion
var model = new Distri_Address();
//判断是否有默认地址,如果没有添加时设置为默认地址
var list_addresstype = (await _distri_adressrepository.Get(x => x.addresstype == model.addresstype && x.createtby == usercode && x.isdefault == true && x.isdelete == 0)).ToList(); //x.createtby == usercode &&
#region model 添加地址对象
model.isdefault = input.isdefault;
if (list_addresstype != null && list_addresstype.Count > 0)
{
if (input.isdefault)
{
foreach (var item in list_addresstype)
{
item.isdefault = false;
await _distri_adressrepository.UpdateOne(item);
}
}
}
else
{
model.isdefault = true;
}
model.addresstype = input.addresstype;
model.projectid = input.projectid;
model.buildingid = input.buildingid;
model.floorid = input.floorid;
//model.departmentid = input.departmentid; //不用了
model.fullname = input.fullname;
model.mobile = input.mobile;
model.remark = input.remark;
model.sortnum = input.addresstype;
model.createtby = usercode;
#endregion
bool bl = await _distri_adressrepository.Add(model);
if (bl)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
///
/// 修改地址
///
[HttpPost("update")]
public async Task UpdateAsync(DistriAddressInput input)
{
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_adressrepository.GetSingle(p => p.id == input.id));
if (model != null)
{
#region 判断验证
if (string.IsNullOrEmpty(input.projectid))
return Error("请选择项目");
if (string.IsNullOrWhiteSpace(input.fullname))
return Error("请输入客户姓名");
if (string.IsNullOrEmpty(input.mobile))
return Error("请输入来电电话");
#endregion
//判断是否有默认地址,如果没有添加时设置为默认地址
var list_addresstype = (await _distri_adressrepository.Get(x => x.addresstype == model.addresstype && x.createtby == usercode && x.isdefault == true && x.isdelete == 0)).ToList(); //x.createtby == usercode &&
#region model 添加地址对象
model.isdefault = input.isdefault;
if (input.isdefault)
{
if (list_addresstype != null && list_addresstype.Count > 0)
{
foreach (var item in list_addresstype)
{
item.isdefault = false;
await _distri_adressrepository.UpdateOne(item);
}
}
}
model.addresstype = input.addresstype;
model.projectid = input.projectid;
model.buildingid = input.buildingid;
model.floorid = input.floorid;
//model.departmentid = input.departmentid; //不用了
model.fullname = input.fullname;
model.mobile = input.mobile;
model.remark = input.remark;
model.sortnum = input.addresstype;
#endregion
bool b = await _distri_adressrepository.UpdateOne(model);
if (b)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
return Error("操作失败");
}
///
/// 设置默认地址
///
[HttpPost("UpdateDefault")]
public async Task UpdateDefaultAsync(string id)
{
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_adressrepository.GetSingle(p => p.id == id));
var list_addresstype = (await _distri_adressrepository.Get(x => x.addresstype == model.addresstype && x.createtby == usercode && x.isdefault == true && x.isdelete == 0)).ToList(); //p.createtby == usercode &&
if (list_addresstype != null && list_addresstype.Count>0)
{
foreach (var item in list_addresstype)
{
item.isdefault = false;
bool b = await _distri_adressrepository.UpdateOne(item);
}
}
if (model != null)
{
model.isdefault = true;
bool b = await _distri_adressrepository.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_adressrepository.GetSingle(id);
model.isdelete = 1;
model.deleteby = usercode;
model.deletetime = DateTime.Now;
if (await _distri_adressrepository.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("请选择要删除的记录");
}
}
}