522 lines
22 KiB
C#
522 lines
22 KiB
C#
using Common;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using WX.CRM.BLL.Application.UserComBox;
|
|
using WX.CRM.BLL.Base;
|
|
using WX.CRM.BLL.Util;
|
|
using WX.CRM.BLL.Ww;
|
|
using WX.CRM.Common;
|
|
using WX.CRM.Common.Layui;
|
|
using WX.CRM.Common.StockHelper;
|
|
using WX.CRM.IBLL.MsgTool;
|
|
using WX.CRM.IBLL.Ww;
|
|
using WX.CRM.Model;
|
|
using WX.CRM.Model.Entity;
|
|
using WX.CRM.Model.Enum;
|
|
using WX.CRM.Model.Ww;
|
|
|
|
namespace WX.CRM.BLL.MsgTool
|
|
{
|
|
public class MsgToolTask_BL : DbContextRepository<MsgToolTask>, IMsgToolTask
|
|
{
|
|
public IWw_huser _iww_hhuser_service = new Ww_huser_BL();
|
|
private CACHE_BL _cache = new CACHE_BL();
|
|
|
|
public List<MsgToolTaskViewModel> GetTaskList(ref Laypage pager, MsgToolPlanQueryDto dto)
|
|
{
|
|
var url = _cache.GetValue_Parameter("MsgTool_WEBAPI");
|
|
url = $"{url}Api/MsgTool/MsgToolTaskPage";
|
|
var para = "PageIndex=" + pager.page + "&PageSize=" + pager.limit;
|
|
if (dto.txt_userId.HasValue)
|
|
{
|
|
para += "&UserId=" + dto.txt_userId;
|
|
}
|
|
if (!string.IsNullOrEmpty(dto.txt_deptId))
|
|
{
|
|
para += "&DeptId=" + dto.txt_deptId;
|
|
}
|
|
if (!string.IsNullOrEmpty(dto.txt_groupIds))
|
|
{
|
|
para += "&GroupIds=" + dto.txt_groupIds;
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(dto.PLANNAME))
|
|
{
|
|
para += "&PlanName=" + dto.PLANNAME;
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(dto.CREATOR))
|
|
{
|
|
para += "&Creator=" + dto.CREATOR;
|
|
}
|
|
para += "&IndexType=" + dto.IndexType;
|
|
if (!string.IsNullOrWhiteSpace(dto.SENDTYPE))
|
|
{
|
|
para += "&SendType=" + dto.SENDTYPE;
|
|
}
|
|
if (dto.STATUS.HasValue)
|
|
{
|
|
para += "&Status=" + dto.STATUS;
|
|
}
|
|
if (dto.xstime.HasValue)
|
|
{
|
|
para += "&Stime=" + dto.xstime;
|
|
}
|
|
if (dto.xetime.HasValue)
|
|
{
|
|
para += "&Etime=" + dto.xetime;
|
|
}
|
|
Dictionary<string, string> header = new Dictionary<string, string>();
|
|
var appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
|
|
header.Add("appid", appid);
|
|
var res = Utility.GetData(url, para, header, Encoding.UTF8, 20000);
|
|
var reqInfo = JsonConvert.DeserializeObject<ApiResult<TaskReturnModel>>(res);
|
|
if (reqInfo.Code == 0)
|
|
{
|
|
pager.count = reqInfo.Data.total;
|
|
return reqInfo.Data.data;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception(reqInfo.Message);
|
|
}
|
|
}
|
|
|
|
public List<MsgToolExecuteViewModel> GetExecuteList(ref Laypage pager, decimal taskid)
|
|
{
|
|
List<MsgToolExecuteViewModel> result = new List<MsgToolExecuteViewModel>();
|
|
var url = _cache.GetValue_Parameter("MsgTool_WEBAPI");
|
|
url = $"{url}Api/MsgTool/ExecuteTaskPage";
|
|
var para = "PageIndex=" + pager.page + "&PageSize=" + pager.limit;
|
|
para += "&TaskId=" + taskid;
|
|
Dictionary<string, string> header = new Dictionary<string, string>();
|
|
var appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
|
|
header.Add("appid", appid);
|
|
var res = Utility.GetData(url, para, header, Encoding.UTF8, 20000);
|
|
var reqInfo = JsonConvert.DeserializeObject<ApiResult<ExecListModel>>(res);
|
|
if (reqInfo.Code == 0)
|
|
{
|
|
pager.count = reqInfo.Data.total;
|
|
result = reqInfo.Data.data;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception(reqInfo.Message);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public string ConvertSendType(string sendtype)
|
|
{
|
|
switch (sendtype)
|
|
{
|
|
case "now":
|
|
return "立即发布";
|
|
|
|
case "tim":
|
|
return "定时发布";
|
|
|
|
case "daily":
|
|
return "每天循环";
|
|
|
|
case "week":
|
|
return "每周循环";
|
|
|
|
case "month":
|
|
return "每月循环";
|
|
}
|
|
return "未知";
|
|
}
|
|
|
|
public void CheckDateTime(MsgToolTaskCreateDto model)
|
|
{
|
|
model.PLANEXETIME = model.SENDTYPE == "now" ? DateTime.Now : model.PLANEXETIME;
|
|
if (model.Type == 2 && model.SENDTYPE == "tim" && model.SENDTYPE != "daily" && !model.PLANEXETIME.HasValue)
|
|
{
|
|
throw new Exception("预计开始时间必填");
|
|
}
|
|
switch (model.SENDTYPE)
|
|
{
|
|
case "now":
|
|
model.DUEDATE = null;
|
|
break;
|
|
|
|
case "tim":
|
|
case "daily":
|
|
model.PLANEXECYCLE = null;
|
|
break;
|
|
}
|
|
if (model.SENDTYPE != "now" && model.SENDTYPE != "tim")
|
|
{
|
|
if (model.Type == 2 && (!model.PLANEXEDATE.HasValue || string.IsNullOrWhiteSpace(model.PLANEXEHOUR)))
|
|
{
|
|
throw new Exception("预计开始日期和开始时间必填");
|
|
}
|
|
if (model.PLANEXEDATE.HasValue && !string.IsNullOrWhiteSpace(model.PLANEXEHOUR))
|
|
{
|
|
model.PLANEXETIME = Convert.ToDateTime(model.PLANEXEDATE.Value.ToString("yyyy-MM-dd ") + model.PLANEXEHOUR);
|
|
}
|
|
else
|
|
{
|
|
model.PLANEXETIME = null;
|
|
}
|
|
}
|
|
if (model.PLANEXETIME.HasValue)
|
|
{
|
|
model.PLANEXEHOUR = model.PLANEXETIME.Value.ToString("HH:mm:ss");
|
|
}
|
|
if (model.PLANEXETIME.HasValue && model.DUEDATE.HasValue && model.PLANEXETIME.Value > model.DUEDATE.Value)
|
|
{
|
|
throw new Exception("截止时间不能小于预计开始时间");
|
|
}
|
|
if (model.SENDTYPE != "month" && model.SENDTYPE != "week")
|
|
{
|
|
model.PLANEXECYCLE = "";
|
|
}
|
|
}
|
|
|
|
public bool AddMsgTask(MsgToolTaskCreateDto model)
|
|
{
|
|
var result = false;
|
|
using (var db = new crmContext())
|
|
{
|
|
CheckDateTime(model);
|
|
var task = db.MsgToolTask.FirstOrDefault(n => n.PKID == model.PKID);
|
|
if (task == null)
|
|
{
|
|
//新增
|
|
task = new MsgToolTask
|
|
{
|
|
PKID = new SEQUENCES_BL().Seq_master_get(),
|
|
PLANNAME = model.PLANNAME,
|
|
//GROUPID = model.GROUPID,
|
|
RECEIVERID = model.Eid,
|
|
CORPIDS = model.CORPIDS,
|
|
GROUPID = model.GROUPID,
|
|
GROUPMEMO = model.GROUPMEMO,
|
|
GROUPNAME = model.GROUPNAME,
|
|
JSONDATA = model.JSONDATA,
|
|
SENDTYPE = model.SENDTYPE,
|
|
PLANEXETIME = model.SENDTYPE == "now" ? DateTime.Now : model.PLANEXETIME,
|
|
PLANEXECYCLE = model.PLANEXECYCLE,
|
|
DUEDATE = model.DUEDATE,
|
|
CTIME = DateTime.Now,
|
|
CREATOR = model.Eid,
|
|
REMARK = model.REMARK,
|
|
TASKTYPE = model.TaskType,
|
|
STATUS = model.Type == 2 ? (int)MsgPlanStatus.未分发 : (int)MsgPlanStatus.草稿
|
|
};
|
|
model.PKID = task.PKID;
|
|
db.MsgToolTask.Add(task);
|
|
}
|
|
else
|
|
{
|
|
if (task.RECEIVERID != model.Eid)
|
|
{
|
|
throw new Exception("不能操作非本人任务!");
|
|
}
|
|
if (task.STATUS == (int)MsgPlanStatus.已分发 && (task.SENDTYPE == "now" || task.SENDTYPE == "tim"))
|
|
{
|
|
throw new Exception("不能编辑已经分发的任务");
|
|
}
|
|
task.PLANNAME = model.PLANNAME;
|
|
//GROUPID = model.GROUPID,
|
|
task.CORPIDS = model.CORPIDS;
|
|
task.JSONDATA = model.JSONDATA;
|
|
task.SENDTYPE = model.SENDTYPE;
|
|
task.PLANEXETIME = model.SENDTYPE == "now" ? DateTime.Now : model.PLANEXETIME;
|
|
task.PLANEXECYCLE = model.PLANEXECYCLE;
|
|
task.PLANEXEHOUR = model.PLANEXEHOUR;
|
|
task.DUEDATE = model.DUEDATE;
|
|
task.GROUPNAME = model.GROUPNAME;
|
|
task.GROUPID = model.GROUPID;
|
|
task.GROUPMEMO = model.GROUPMEMO;
|
|
task.TASKTYPE = model.TaskType;
|
|
//plan. = DateTime.Now;
|
|
task.CREATOR = model.Eid;
|
|
task.REMARK = model.REMARK;
|
|
task.STATUS = model.Type == 2 ? (int)MsgPlanStatus.未分发 : (int)MsgPlanStatus.草稿;
|
|
}
|
|
var hasKfDetail = false;
|
|
//当任务类型为企微类型时候 要处理
|
|
if (task.TASKTYPE == 2 && !string.IsNullOrWhiteSpace(model.QiWeiPostJson))
|
|
{
|
|
//先删除所有的任务关系
|
|
var oldLabDetail = db.MsgToolTaskLabDetail.Where(n => n.TASKID == task.PKID).ToList();
|
|
db.MsgToolTaskLabDetail.RemoveRange(oldLabDetail);
|
|
var qwJson = JsonConvert.DeserializeObject<List<QiWeiPostJson>>(model.QiWeiPostJson);
|
|
foreach (var item in qwJson)
|
|
{
|
|
foreach (var outuser in item.outuserList)
|
|
{
|
|
MsgToolTaskLabDetail labDetail = new MsgToolTaskLabDetail
|
|
{
|
|
CORPID = item.corpid,
|
|
KFUSERID = item.userid,
|
|
EXTUSERID = outuser.userid,
|
|
NICKNAME = outuser.name,
|
|
KFNICKNAME = item.kfnickname,
|
|
CORPNAME = item.corpname,
|
|
PAGETYPE = item.pagetype,
|
|
CTIME = DateTime.Now,
|
|
TASKID = task.PKID,
|
|
PKID = new SEQUENCES_BL().Seq_master_get(),
|
|
};
|
|
db.MsgToolTaskLabDetail.Add(labDetail);
|
|
}
|
|
hasKfDetail = true;
|
|
}
|
|
}
|
|
if (task.TASKTYPE == 1 && !string.IsNullOrWhiteSpace(model.QiWeiPostJson))
|
|
{
|
|
var oldLabDetail = db.MsgToolTaskKFDetail.Where(n => n.TASKID == task.PKID).ToList();
|
|
db.MsgToolTaskKFDetail.RemoveRange(oldLabDetail);
|
|
var qwJson = JsonConvert.DeserializeObject<List<QiWeiPostJson>>(model.QiWeiPostJson);
|
|
foreach (var item in qwJson)
|
|
{
|
|
MsgToolTaskKFDetail labDetail = new MsgToolTaskKFDetail
|
|
{
|
|
CORPID = item.corpid,
|
|
KFUSERID = item.userid,
|
|
KFNICKNAME = item.kfnickname,
|
|
CORPNAME = item.corpname,
|
|
CTIME = DateTime.Now,
|
|
TASKID = task.PKID,
|
|
PKID = new SEQUENCES_BL().Seq_master_get(),
|
|
};
|
|
db.MsgToolTaskKFDetail.Add(labDetail);
|
|
hasKfDetail = true;
|
|
}
|
|
}
|
|
db.SaveChanges();
|
|
if (model.Type == 2 && (task.STATUS == (int)MsgPlanStatus.未分发 || task.STATUS == (int)MsgPlanStatus.草稿))
|
|
{
|
|
if (task.TASKTYPE == 2 && !hasKfDetail)
|
|
{
|
|
throw new Exception("请先勾选企微账户");
|
|
}
|
|
if (task.TASKTYPE == 1 && string.IsNullOrWhiteSpace(task.CORPIDS) && !hasKfDetail)
|
|
{
|
|
throw new Exception("请先选择企微账户或企业微信");
|
|
}
|
|
result = SendTask(task);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public string BuildQiweiJson(MsgToolTask task)
|
|
{
|
|
using (var db = new crmContext())
|
|
{
|
|
if (task.TASKTYPE == 2)
|
|
{
|
|
var labDetail = db.MsgToolTaskLabDetail.Where(n => n.TASKID == task.PKID).ToList();
|
|
List<QiWeiPostJson> qiWeiPostJsons = new List<QiWeiPostJson>();
|
|
if (labDetail.Count > 0)
|
|
{
|
|
var groupLab = labDetail.GroupBy(n => new { n.CORPID, n.KFUSERID, n.CORPNAME, n.KFNICKNAME, n.PAGETYPE }).ToList();
|
|
foreach (var lab in groupLab)
|
|
{
|
|
QiWeiPostJson newJson = new QiWeiPostJson
|
|
{
|
|
corpid = lab.Key.CORPID,
|
|
userid = lab.Key.KFUSERID,
|
|
kfnickname = lab.Key.KFNICKNAME,
|
|
pagetype = lab.Key.PAGETYPE,
|
|
corpname = lab.Key.CORPNAME
|
|
};
|
|
var outUser = labDetail.Where(n => n.KFUSERID == lab.Key.KFUSERID && n.CORPID == lab.Key.CORPID).ToList();
|
|
newJson.outuserList = outUser.Select(n => new OutUserList { userid = n.EXTUSERID, name = n.NICKNAME }).ToList();
|
|
qiWeiPostJsons.Add(newJson);
|
|
}
|
|
return qiWeiPostJsons.ToJson();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var kfDetail = db.MsgToolTaskKFDetail.Where(n => n.TASKID == task.PKID).ToList();
|
|
List<QiWeiPostJson> qiWeiPostJsons = new List<QiWeiPostJson>();
|
|
if (kfDetail.Count > 0)
|
|
{
|
|
foreach (var kv in kfDetail)
|
|
{
|
|
QiWeiPostJson newJson = new QiWeiPostJson
|
|
{
|
|
corpid = kv.CORPID,
|
|
userid = kv.KFUSERID,
|
|
kfnickname = kv.KFNICKNAME,
|
|
corpname = kv.CORPNAME
|
|
};
|
|
qiWeiPostJsons.Add(newJson);
|
|
}
|
|
|
|
return qiWeiPostJsons.ToJson();
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public MsgEditTaskModel GetMsgTaskEditModel(decimal id)
|
|
{
|
|
MsgEditTaskModel model = new MsgEditTaskModel();
|
|
using (var db = new crmContext())
|
|
{
|
|
var task = db.MsgToolTask.FirstOrDefault(n => n.PKID == id);
|
|
if (task != null)
|
|
{
|
|
model.QiWeiPostJson = BuildQiweiJson(task);
|
|
model.PKID = task.PKID;
|
|
model.PLANNAME = task.PLANNAME;
|
|
model.CORPIDS = task.CORPIDS;
|
|
model.RECEIVERID = task.RECEIVERID;
|
|
model.GROUPID = task.GROUPID;
|
|
model.GROUPNAME = task.GROUPNAME;
|
|
model.GROUPMEMO = task.GROUPMEMO;
|
|
model.JSONDATA = task.JSONDATA;
|
|
model.SENDTYPE = task.SENDTYPE;
|
|
model.REMARK = task.REMARK;
|
|
model.PLANEXECYCLE = task.PLANEXECYCLE;
|
|
model.PLANEXETIME = task.PLANEXETIME.HasValue ? task.PLANEXETIME.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
model.PLANEXEDATE = task.PLANEXETIME.HasValue ? task.PLANEXETIME.Value.ToString("yyyy-MM-dd") : "";
|
|
model.PLANEXEHOUR = task.PLANEXEHOUR;
|
|
model.DUEDATE = task.DUEDATE.HasValue ? task.DUEDATE.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
|
|
model.TaskType = task.TASKTYPE;
|
|
}
|
|
return model;
|
|
}
|
|
}
|
|
public bool CreateTask(decimal taskid)
|
|
{
|
|
using (var db = new crmContext())
|
|
{
|
|
var task = db.MsgToolTask.FirstOrDefault(n => n.PKID == taskid);
|
|
if (task.STATUS == (int)MsgPlanStatus.未分发 || task.STATUS == (int)MsgPlanStatus.草稿)
|
|
{
|
|
if (task.TASKTYPE == 2)
|
|
{
|
|
var oldLabDetail = db.MsgToolTaskLabDetail.Where(n => n.TASKID == task.PKID).ToList();
|
|
if (oldLabDetail.Count() == 0)
|
|
{
|
|
throw new Exception("请先勾选企微账户");
|
|
}
|
|
}
|
|
if (task.TASKTYPE == 1 && string.IsNullOrWhiteSpace(task.CORPIDS))
|
|
{
|
|
var kfDetail = db.MsgToolTaskKFDetail.Where(n => n.TASKID == task.PKID).ToList();
|
|
if (kfDetail.Count == 0)
|
|
{
|
|
throw new Exception("请先选择企微账户或企业微信");
|
|
}
|
|
}
|
|
return SendTask(task);
|
|
}
|
|
}
|
|
return false;
|
|
|
|
}
|
|
public bool SendTask(MsgToolTask task)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(task.JSONDATA) || task.JSONDATA == "[]")
|
|
{
|
|
throw new Exception("发送内容不能为空");
|
|
}
|
|
if (task.GROUPID == 0 && task.TASKTYPE != 2)
|
|
{
|
|
throw new Exception("人群包不能为空");
|
|
}
|
|
if ((task.SENDTYPE == "month" || task.SENDTYPE == "week") && (string.IsNullOrWhiteSpace(task.PLANEXECYCLE) || task.PLANEXECYCLE == "[]"))
|
|
{
|
|
throw new Exception("发送周期不能为空");
|
|
}
|
|
var url = _cache.GetValue_Parameter("MsgTool_WEBAPI");
|
|
url = $"{url}Api/MsgTool/TaskCmdByTaskId";
|
|
var postData = new { TaskId = task.PKID };
|
|
Dictionary<string, string> header = new Dictionary<string, string>();
|
|
var appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
|
|
header.Add("appid", appid);
|
|
header.Add("eid", task.CREATOR.ToString());
|
|
var res = Utility.PostAjaxData(url, postData.ToJson(), header, Encoding.UTF8);
|
|
var reqInfo = JsonConvert.DeserializeObject<ApiResult<bool>>(res);
|
|
if (reqInfo.Code == 0)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception(reqInfo.Message);
|
|
}
|
|
}
|
|
|
|
public bool CancelTask(decimal taskId)
|
|
{
|
|
using (var db = new crmContext())
|
|
{
|
|
var task = db.MsgToolTask.FirstOrDefault(n => n.PKID == taskId);
|
|
var url = _cache.GetValue_Parameter("MsgTool_WEBAPI");
|
|
url = $"{url}Api/MsgTool/CancelTaskCmd";
|
|
var postData = new { TaskId = task.PKID };
|
|
Dictionary<string, string> header = new Dictionary<string, string>();
|
|
var appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
|
|
header.Add("appid", appid);
|
|
header.Add("eid", task.CREATOR.ToString());
|
|
var res = Utility.PostAjaxData(url, postData.ToJson(), header, Encoding.UTF8);
|
|
var reqInfo = JsonConvert.DeserializeObject<ApiResult<bool>>(res);
|
|
if (reqInfo.Code == 0)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception(reqInfo.Message);
|
|
}
|
|
}
|
|
}
|
|
|
|
public List<CmdDetailDto> GetTaskCmdDetail(ref Laypage pager, CmdDetailQueryDto dto)
|
|
{
|
|
List<CmdDetailDto> result = new List<CmdDetailDto>();
|
|
var url = _cache.GetValue_Parameter("MsgTool_WEBAPI");
|
|
var para = "PageIndex=" + pager.page + "&PageSize=" + pager.limit;
|
|
para += $"&cmdId={dto.cmdId}";
|
|
if (!string.IsNullOrWhiteSpace(dto.name))
|
|
{
|
|
para += $"&name={dto.name}";
|
|
}
|
|
url = $"{url}Api/MsgTool/TaskCmdDetail";
|
|
Dictionary<string, string> header = new Dictionary<string, string>();
|
|
var appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
|
|
header.Add("appid", appid);
|
|
var res = Utility.GetData(url, para, header, Encoding.UTF8, 10000);
|
|
var reqInfo = JsonConvert.DeserializeObject<ApiResult<CmdDetailListModel>>(res);
|
|
if (reqInfo.Code == 0)
|
|
{
|
|
pager.count = reqInfo.Data.total;
|
|
result = reqInfo.Data.data;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public bool SetCmdDetailEnable(SetCmdEnableDto data)
|
|
{
|
|
var url = _cache.GetValue_Parameter("MsgTool_WEBAPI");
|
|
url = $"{url}Api/MsgTool/SetCmdDetailEnable";
|
|
Dictionary<string, string> header = new Dictionary<string, string>();
|
|
var appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
|
|
header.Add("appid", appid);
|
|
var res = Utility.PostAjaxData(url, data.ToJson(), header, Encoding.UTF8);
|
|
var reqInfo = JsonConvert.DeserializeObject<ApiResult<bool>>(res);
|
|
if (reqInfo.Code == 0)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception(reqInfo.Message);
|
|
}
|
|
}
|
|
}
|
|
} |