using System;
using System.Collections.Generic;
using System.Common;
using System.Common.Helpers;
using System.Data;
using System.IRepositories;
using System.Linq;
using System.Model;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using TVShoppingCallCenter_ZLJ.Models.Inputs;
namespace TVShoppingCallCenter_ZLJ.Controllers.TaskManagement
{
[Produces("application/json")]
[Route("api/[controller]")]
public class TaskManagementController : BaseController
{
private readonly ISMS_InternalMessagesReposytory _sys_internalMessagesrepository;
private readonly ISys_UserAccountRepository _sys_useraccountRepository;
private readonly ISys_TaskManagementRepository _sys_taskmanagement_Repository;
private readonly ISys_DepartmentRepository _sys_departmentRepository;
public TaskManagementController(ISys_TaskManagementRepository sys_taskmanagement_Repository, ISys_DepartmentRepository sys_departmentRepository,
ISys_UserAccountRepository sys_useraccountRepository, ISMS_InternalMessagesReposytory sys_internalMessagesrepository)
{
_sys_taskmanagement_Repository = sys_taskmanagement_Repository;
_sys_departmentRepository = sys_departmentRepository;
_sys_useraccountRepository = sys_useraccountRepository;
_sys_internalMessagesrepository = sys_internalMessagesrepository;
}
///
/// 添加任务
///
///
///
[HttpPost("add")]
public async Task AddAsync(T_Sys_TaskManagement input)
{
if (string.IsNullOrEmpty(input.F_Name))
return Error("请输入任务名称");
if (string.IsNullOrEmpty(input.F_Content))
return Error("请输入任务内容");
if (input.F_StartTime == null)
return Error("请选择任务开始时间");
if (input.F_EndTime == null)
return Error("请选择任务结束时间");
if (input.F_Type < 0)
return Error("请选择任务类型");
if (string .IsNullOrEmpty (input .F_Deptid ))
return Error("请选择任务部门");
if (input.F_Money < 0)
return Error("请输入目标金额");
// string user = "8000";
if (input.F_Remindertime == null)
input.F_Remindertime = input.F_EndTime.Value.AddDays(-3);
if (input.F_Currentamount > 0)
input.F_Taskprogress = string.Format("{0:f2}", input.F_Currentamount / input.F_Money * 100);
else
input.F_Taskprogress = "0";
string user = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
input.F_CreateTime = DateTime.Now;
input.F_CreateUser = user;
input.F_IsDelete = 0;
var res = await _sys_taskmanagement_Repository.Add(input);
if (res > 0)
{
try
{
DateTime time = DateTime.Parse(input.F_Remindertime.ToString());
if (input .F_Tasker >0)
{
string usercode = _sys_useraccountRepository.GetSingle(x => x.F_UserId == input.F_Tasker).Result.F_UserCode;
bool n = new InternalMessages.InternalMessagesController(_sys_internalMessagesrepository, _sys_useraccountRepository).AddInternalMessagesInfo(res, "任务提醒", input.F_Name + "任务提醒", user, time, 2, 1, 0, usercode, 1);
}
else
{
bool n = new InternalMessages.InternalMessagesController(_sys_internalMessagesrepository, _sys_useraccountRepository).AddInternalMessagesInfo(res, "任务提醒", input.F_Name + "任务提醒", user, time, 2, 1, int.Parse(input.F_Deptid.Split(',')[input.F_Deptid.Split(',').Length - 1]), "", 0);
}
}
catch
{
}
return Success("添加成功");
}
else
{
return Error("添加失败");
}
}
///
/// 修改任务
///
[HttpPost("update")]
public async Task UpdateAsync(T_Sys_TaskManagement input)
{
if (input.F_ID <= 0)
return Error("参数错误");
if (string.IsNullOrEmpty(input.F_Name))
return Error("请输入任务名称");
if (string.IsNullOrEmpty(input.F_Content))
return Error("请输入任务内容");
if (input.F_StartTime == null)
return Error("请选择任务开始时间");
if (input.F_EndTime == null)
return Error("请选择任务结束时间");
if (input.F_Type < 0)
return Error("请选择任务类型");
if (string.IsNullOrEmpty(input.F_Deptid))
return Error("请选择任务部门");
if (input.F_Money < 0)
return Error("请输入目标金额");
var model = await _sys_taskmanagement_Repository.GetSingle(x => x.F_ID == input.F_ID);
if (model == null)
return Error("操作失败");
if (input.F_Remindertime == null)
input.F_Remindertime = input.F_EndTime.Value.AddDays(-3);
if (input.F_Currentamount > 0)
input.F_Taskprogress = string.Format("{0:f2}", input.F_Currentamount / input.F_Money * 100);
else
input.F_Taskprogress = "0";
// string user = "8000";
string user = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
input.F_IsDelete = 0;
input.F_CreateUser = model.F_CreateUser;
input.F_CreateTime = model.F_CreateTime ;
input.F_UpdateTime = DateTime.Now;
input.F_UpdateUser = user;
// model.F_UpdateUser = "8000";
var b = await _sys_taskmanagement_Repository.Update(input);
if (b)
{
DateTime time = DateTime.Parse(input.F_Remindertime.ToString());
var InternalMessages = _sys_internalMessagesrepository.GetListALL (x => x.F_ID == model.F_ID&&x.SMS_IsDelete ==0).Result.FirstOrDefault ();
if (InternalMessages!=null )
{
try
{
if (input.F_Tasker > 0)
{
string usercode = _sys_useraccountRepository.GetSingle(x => x.F_UserId == input.F_Tasker).Result.F_UserCode;
InternalMessages.SMS_Content = input.F_Name + "任务提醒";
InternalMessages.SMS_Remindertime = input.F_Remindertime;
InternalMessages.SMS_ReceiveUserCode = usercode;
bool n = await _sys_internalMessagesrepository.Update(InternalMessages);
}
else
{
InternalMessages.SMS_Content = input.F_Name + "任务提醒";
InternalMessages.SMS_Remindertime = input.F_Remindertime;
InternalMessages.SMS_Deptid = int.Parse(input.F_Deptid.Split(',')[input.F_Deptid.Split(',').Length - 1]);
bool n = await _sys_internalMessagesrepository.Update(InternalMessages);
}
}
catch
{
}
}
else
{
try
{
if (input.F_Tasker > 0)
{
string usercode = _sys_useraccountRepository.GetSingle(x => x.F_UserId == input.F_Tasker).Result.F_UserCode;
bool n = new InternalMessages.InternalMessagesController(_sys_internalMessagesrepository, _sys_useraccountRepository).AddInternalMessagesInfo(model.F_ID, "任务提醒", input.F_Name + "任务提醒", user, time, 2, 1, 0, usercode, 1);
}
else
{
bool n = new InternalMessages.InternalMessagesController(_sys_internalMessagesrepository, _sys_useraccountRepository).AddInternalMessagesInfo(model.F_ID, "任务提醒", input.F_Name + "任务提醒", user, time, 2, 1, int.Parse(input.F_Deptid.Split(',')[input.F_Deptid.Split(',').Length - 1]), "", 0);
}
}
catch
{
}
}
return Success("修改成功");
}
return Error("修改失败");
}
///
/// 删除任务
///
///
///
[HttpPost("delete")]
public async Task Remove(int[] ids)
{
var res = 0;
if (ids != null && ids.Length > 0)
{
foreach (var item in ids)
{
var model = await _sys_taskmanagement_Repository.GetSingle(x => x.F_ID == item);
var message = await _sys_internalMessagesrepository.GetListALL(x => x.F_ID == item);
if (message != null)
{
foreach (var it in message)
{
it.SMS_IsDelete = (int)EnumUserCountState.Delete;
var n = _sys_internalMessagesrepository.Update(it);
}
}
model.F_IsDelete = (int)EnumUserCountState.Delete;
model.F_DeleteTime = DateTime.Now.ToLocalTime();
model.F_DeleteUser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
if (_sys_taskmanagement_Repository.Update(model).Result)
res += 1;
}
if (res == ids.Length)
return Success("删除成功");
else if (res > 0 && res < ids.Length)
return Error("部分删除失败,请查看后重新操作");
else
return Error("删除失败,请查看后重新操作");
}
else
return Error("请选择要删除的记录");
}
///
/// 操作任务
///
/// id
///
[HttpGet("operation")]
public async Task GetOperationAsync(int id, int state)
{
if (id <= 0)
return Error("参数错误");
var model = await _sys_taskmanagement_Repository.GetSingle(x => x.F_ID == id);
if (model == null)
{
return Error("获取失败");
}
model.F_State = state;
var obj = await _sys_taskmanagement_Repository.Update(model);
if (obj)
return Success("操作成功");
else
return Error("操作失败");
}
///
/// 获取任务列表
///
///
///
///
///
[HttpGet("getlist")]
public async Task GetListMark(string keyword, string name,string parentname, string starttime, string endtime, string tasker,
string deptid , int parentid=0,int type = -1, int pageindex = 1, int pagesize = 20)
{
List conModels = new List();
#region 条件筛选
conModels.Add(new ConditionalModel() { FieldName = "F_IsDelete", ConditionalType = ConditionalType.Equal, FieldValue = ((int)EnumUserCountState.Enabled).ToString() });
if (!string.IsNullOrEmpty(name))
{
conModels.Add(new ConditionalModel() { FieldName = "F_Name", ConditionalType = ConditionalType.Like, FieldValue = name });
}
if (!string.IsNullOrEmpty(tasker))
{
if (_sys_useraccountRepository .GetListALL(x => x.F_UserName == tasker&&x.F_DeleteFlag ==0).Result .FirstOrDefault ()!= null)
{
conModels.Add(new ConditionalModel() { FieldName = "F_Tasker", ConditionalType = ConditionalType.Equal , FieldValue = _sys_useraccountRepository.GetListALL (x => x.F_UserName == tasker && x.F_DeleteFlag == 0).Result.FirstOrDefault ().F_UserId .ToString () });
}
else
{
return Error("请输入正确的任务人");
}
}
if (string .IsNullOrEmpty (tasker)&& string.IsNullOrEmpty(parentname))
{
conModels.Add(new ConditionalModel() { FieldName = "F_Parentid", ConditionalType = ConditionalType.Equal, FieldValue = parentid.ToString() });
}
// string user = "8000";
string user = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
var dept = _sys_useraccountRepository.GetSingle(x => x.F_UserCode == user).Result != null ? _sys_useraccountRepository.GetSingle(x => x.F_UserCode == user).Result.F_DeptId : 0;
if (!string.IsNullOrEmpty(deptid))
{
conModels.Add(new ConditionalModel() { FieldName = "F_Deptid", ConditionalType = ConditionalType.Equal, FieldValue = deptid });
}
else
{
conModels.Add(new ConditionalModel() { FieldName = "F_CreateUser", ConditionalType = ConditionalType.Equal, FieldValue = user });
new KeyValuePair(WhereType.Or, new ConditionalModel() { FieldName = "F_Deptid", ConditionalType = ConditionalType.Like, FieldValue = dept.ToString() });
deptid = dept.ToString();
}
if (!string.IsNullOrEmpty(parentname))
{
List conModel = new List();
conModel.Add(new ConditionalModel() { FieldName = "F_CreateUser", ConditionalType = ConditionalType.Equal, FieldValue = user });
new KeyValuePair(WhereType.Or, new ConditionalModel() { FieldName = "F_Deptid", ConditionalType = ConditionalType.Like, FieldValue = deptid.ToString() });
conModel.Add(new ConditionalModel() { FieldName = "F_IsDelete", ConditionalType = ConditionalType.Equal, FieldValue = ((int)EnumUserCountState.Enabled).ToString() });
conModel.Add(new ConditionalModel() { FieldName = "F_Name", ConditionalType = ConditionalType.Like, FieldValue = parentname });
var model = _sys_taskmanagement_Repository.GetListALL(conModel, "F_CreateTime desc ").Result.FirstOrDefault();
if (model != null )
{
conModels.Add(new ConditionalModel() { FieldName = "F_Parentid", ConditionalType = ConditionalType.Equal, FieldValue = model.F_ID .ToString () });
}
else
{
return Error("请输入正确的父级任务名称");
}
}
if (type > -1)
{
conModels.Add(new ConditionalModel() { FieldName = "F_Type", ConditionalType = ConditionalType.Like, FieldValue = type.ToString() });
}
if (!string.IsNullOrEmpty(keyword))
{
conModels.Add(new ConditionalCollections()
{
ConditionalList = new List>()
{
new KeyValuePair(WhereType.And, new ConditionalModel() { FieldName = "F_Name", ConditionalType = ConditionalType.Like, FieldValue = keyword }),
new KeyValuePair( WhereType.Or , new ConditionalModel() { FieldName = "F_Content", ConditionalType = ConditionalType.Like, FieldValue = keyword })
}
});
}
if (!string.IsNullOrEmpty(starttime))
{
conModels.Add(new ConditionalModel() { FieldName = "F_StartTime", ConditionalType = ConditionalType.GreaterThanOrEqual, FieldValue = starttime });
}
if (!string.IsNullOrEmpty(endtime))
{
conModels.Add(new ConditionalModel() { FieldName = "F_EndTime", ConditionalType = ConditionalType.LessThanOrEqual, FieldValue = endtime });
}
#endregion
int recordCount = 0;
var list = await _sys_taskmanagement_Repository.GetListByPage(conModels, new MyPageModel() { PageIndex = pageindex, PageSize = pagesize, PageCount = recordCount });
var obj = new
{
state = "success",
message = "成功",
rows = ConvertAsync(list.Rows ),
total = list.Totals,
};
return Content(obj.ToJson());
}
///
/// 获取任务详情
///
/// id
///
[HttpGet("getdetails")]
public async Task GetDetailsAsync(int id)
{
if (id <= 0)
return Error("参数错误");
var model = await _sys_taskmanagement_Repository.GetSingle(x => x.F_ID == id);
if (model == null)
{
return Error("获取失败");
}
return Success("获取成功!", Convert(model, 1));
}
///
/// 修改任务当前金额
///
///
///
///
public int UpdateTaskAmount(T_Bus_Order t_Bus_Order )
{
//0成功1任务暂停2任务终止3修改任务金额失败4任务不存在5父级任务不存在6父级任务修改失败7父级任务暂停8父级任务终止
int n = 0;
var model = _sys_taskmanagement_Repository.GetListALL (x => x.F_Tasker == t_Bus_Order.F_AddUser&& x.F_IsDelete ==0);
if (model == null)
return 4;
foreach (var it in model.Result )
{
if (it.F_State == 0)
{
it.F_Currentamount +=(float ) t_Bus_Order.F_RealPrice;
it.F_Taskprogress = string.Format("{0:f2}", it.F_Currentamount / it.F_Money * 100);
var res = _sys_taskmanagement_Repository.Update(it);
if (!res.Result)
return 3;
if (it.F_Parentid > 0)
{
n = TreeRecursion(it.F_Parentid, (float)t_Bus_Order.F_RealPrice);
}
}
else
n = (int)it .F_State;
}
return n;
}
///
/// 递归算法
///
///
///
///
private int TreeRecursion( int parentId = 0,float money=0)
{
int n = 0;
var model = _sys_taskmanagement_Repository.GetSingle(x => x.F_ID == parentId).Result;
if (model == null)
return 5;
if (model.F_State == 0)
{
model.F_Currentamount += money;
model.F_Taskprogress = string.Format("{0:f2}", model.F_Currentamount / model.F_Money * 100);
var res = _sys_taskmanagement_Repository.Update(model);
if (!res.Result)
return 6;
if (model.F_Parentid > 0)
{
n = TreeRecursion(model.F_Parentid, money);
}
}
else
n = (int)model.F_State+6;
return n;
}
///
/// 上传文件并导入数据库
///
///
[HttpPost("importexcel")]
public async Task ImportExcel(int headrow = 0,int parentid=0)
{
Microsoft.AspNetCore.Http.IFormFile _upfile = Request.Form.Files[0];
if (!_upfile.ContentType.Equals("application/vnd.ms-excel") && !_upfile.ContentType.Equals("application/x-xls") && !_upfile.ContentType.Equals("application/x-xlsx") && !_upfile.ContentType.Equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") && !_upfile.ContentType.Equals("application/octet-stream"))
return Error($"请正确上传Excel文件:file.ContentType={_upfile.ContentType}");
NPOIHelper npoi = new NPOIHelper();
var dtExcel = npoi.ExcelToTable1(_upfile, headrow);
int num = dtExcel.Rows.Count;
var cols = dtExcel.Columns;
int colnum = cols.Count;
string errmsg = string.Empty;
if (num > 0)
{
int index = 1;
foreach (DataRow dr in dtExcel.Rows)
{
var model = new T_Sys_TaskManagement();
string user = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
model.F_Name = dr["任务名称"].ToString();
model.F_Content = dr["任务内容"].ToString();
if (string .IsNullOrEmpty (dr["任务开始时间"].ToString()))
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!请输入任务开始时间";
continue;
}
if (string.IsNullOrEmpty(dr["任务结束时间"].ToString()))
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!请输入任务结束时间";
continue;
}
if (string.IsNullOrEmpty(dr["目标金额"].ToString()))
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!请输入目标金额";
continue;
}
try
{
model.F_StartTime = DateTime.Parse(dr["任务开始时间"].ToString());
}
catch
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!任务开始时间格式错误";
continue;
}
try
{
model.F_EndTime = DateTime.Parse(dr["任务结束时间"].ToString());
}
catch
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!任务结束时间格式错误";
continue;
}
if (dr["任务类型"].ToString() == "月")
model.F_Type = 2;
else if (dr["任务类型"].ToString() == "周")
model.F_Type = 1;
else
model.F_Type = 0;
if (_sys_departmentRepository.GetSingle(x => x.F_DeptName == dr["任务部门"].ToString()).Result !=null )
{
model.F_Deptid = _sys_departmentRepository.GetSingle(x => x.F_DeptName == dr["任务部门"].ToString()).Result.F_DeptId.ToString ();
}
else
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!请检查任务部门";
continue;
}
if (_sys_useraccountRepository.GetSingle(x => x.F_UserName == dr["任务人"].ToString()).Result != null)
{
model.F_Tasker = _sys_useraccountRepository.GetSingle(x => x.F_UserName == dr["任务人"].ToString()).Result.F_UserId ;
}
else
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!请检查任务人";
continue;
}
try
{
model.F_Money = float .Parse(dr["目标金额"].ToString());
}
catch
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!请输入正确的目标金额";
continue;
}
if (string.IsNullOrEmpty(dr["当前金额"].ToString()))
model.F_Currentamount = 0;
try
{
model.F_Currentamount = float.Parse(dr["当前金额"].ToString());
}
catch
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!请输入正确的当前金额";
continue;
}
if (!string .IsNullOrEmpty (dr["任务提醒时间"].ToString()))
{
try
{
model.F_Remindertime = DateTime.Parse(dr["任务提醒时间"].ToString());
}
catch
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!任务提醒时间格式错误";
continue;
}
}
else
{
model.F_Remindertime = model.F_EndTime.Value.AddDays(-3);
}
model.F_Taskprogress = string.Format("{0:f2}", model.F_Currentamount / model.F_Money * 100);
if (dr["任务类型"].ToString() == "终止")
model.F_State = 2;
else if (dr["任务类型"].ToString() == "暂停")
model.F_State = 1;
else
model.F_State = 0;
model.F_CreateTime = DateTime.Now;
model.F_CreateUser = user;
model.F_IsDelete = 0;
model.F_Parentid = parentid;
int b = await _sys_taskmanagement_Repository.Add(model);
if (b <= 0)
{
if (!string.IsNullOrEmpty(errmsg))
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!";
}
else
{
errmsg = "第" + index + "行导入失败!";
}
}
index++;
}
}
else
{
return Error("文件中无数据");
}
if (!string.IsNullOrEmpty(errmsg))
{
return Error(errmsg);
}
return Success("导入成功");
}
#region 私有方法
private TaskManagementInput Convert(T_Sys_TaskManagement it, int type = 0)
{
TaskManagementInput task = new TaskManagementInput();
task.F_ID = it.F_ID;
task.F_Name = it.F_Name;
task.F_Content = it.F_Content;
task.F_StartTime = it.F_StartTime;
task.F_EndTime = it.F_EndTime;
task.F_Type = it.F_Type;
task.F_Deptid = it.F_Deptid;
string deptmsg = "";
if (!string.IsNullOrEmpty(it.F_Deptid))
{
try
{
string[] sprit = it.F_Deptid.Split(',');
foreach (var iv in sprit)
{
if (deptmsg == "")
deptmsg = _sys_departmentRepository.GetSingle(x => x.F_DeptId == int.Parse(iv)).Result != null ? _sys_departmentRepository.GetSingle(x => x.F_DeptId == int.Parse(iv)).Result.F_DeptName : "";
else
deptmsg = deptmsg + "," + _sys_departmentRepository.GetSingle(x => x.F_DeptId == int.Parse(iv)).Result != null ? _sys_departmentRepository.GetSingle(x => x.F_DeptId == int.Parse(iv)).Result.F_DeptName : "";
}
}
catch
{
}
}
task.F_DeptName = deptmsg;// 部门名称
task.F_Tasker = it.F_Tasker;
task.F_TaskerName = _sys_useraccountRepository.GetSingle(x => x.F_UserId == it.F_Tasker).Result != null ? _sys_useraccountRepository.GetSingle(x => x.F_UserId == it.F_Tasker).Result .F_UserName : "";
task.F_Money = it.F_Money;
task.F_Currentamount = it.F_Currentamount;
task.F_Taskprogress = it.F_Taskprogress;
task.F_State = it.F_State;
task.F_Remindertime = it.F_Remindertime;
if (type ==0)
{
var taskcount = _sys_taskmanagement_Repository.GetListALL(x => x.F_Parentid == it.F_ID&&x.F_IsDelete ==0).Result != null ? _sys_taskmanagement_Repository.GetListALL(x => x.F_Parentid == it.F_ID && x.F_IsDelete == 0).Result: null ;
if (taskcount!=null )
{
task.children = ConvertAsync(taskcount);
}
}
task.F_Parentid = it.F_Parentid;
task.F_ParentName = _sys_taskmanagement_Repository.GetSingle(x => x.F_ID == it.F_Parentid).Result != null ? _sys_taskmanagement_Repository.GetSingle(x => x.F_ID == it.F_Parentid).Result.F_Name : "";// 部门名称
return task;
}
/// model转input
///
///
///
private List ConvertAsync(List model)
{
List input = new List();
if (model != null)
{
foreach (var it in model)
{
TaskManagementInput marketing = new TaskManagementInput();
marketing = Convert(it);
input.Add(marketing);
}
}
return input;
}
#endregion
}
}