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 MessageApi.IRepositories;
using MadRunFabric.Common.Enums;
using MadRunFabric.Model;
using System.Security.Claims;
using Microsoft.Extensions.Caching.Distributed;
using MadRunFabric.Model.MessageApi;
using MessageApi.Model;
using Microsoft.Extensions.Configuration;
using System.Security.Cryptography.X509Certificates;
using NetTaste;
namespace MessageApi.Controllers
{
///
/// 消息通知 - 工单
///
[Authorize]
[ApiVersion("6.0")]
[Produces("application/json")]
[Route("api/[controller]")]
public class MessageController : BaseController
{
private readonly ILogger _logger;
private readonly IDistributedCache _cache;
private readonly IWo_Repair_BaseRepository _wo_repair_baseRepository;
private readonly IWo_Maintain_BaseRepository _wo_maintain_baserepository;
private readonly IWo_Maintain_PlanRepository _wo_maintain_planrepository;
private readonly IWo_EquipmentRunningRepository _wo_equipmentrunningrepository;
private readonly IEqp_Equipment_InfoRepository _eqp_equipment_inforepository;
private readonly IWo_Order_User_MapRepository _wo_order_user_maprepository;
private readonly IWo_TimeOutRepository _wo_timeoutrepository;
private readonly ISys_Role_InfoRepository _sys_roleinfoRepository;
private readonly ISys_User_AccountRepository _sys_user_accountRepository;
private readonly IDistri_WorkorderRepository _distri_workorderrepository;
private readonly ISys_ClassGroupRepository _sys_classgrouprepository;
private readonly IDistri_Workorder_PlanTaskRepository _distri_workorder_plantaskrepository;
private readonly ISys_ClassGroup_User_MapRepository _sys_classgroup_user_maprepository;
private readonly IConfiguration _configuration;
private readonly IWo_MattersRepository _wo_mattersRepository;
private readonly IusercoldandclintidRepository _usercoldandclintidRepository;
public MessageController(
ILogger logger,
IDistributedCache cache,
IWo_Repair_BaseRepository wo_repair_baseRepository,
IWo_Maintain_BaseRepository wo_maintain_baserepository,
IWo_Maintain_PlanRepository wo_maintain_planrepository,
IWo_EquipmentRunningRepository wo_equipmentrunningrepository,
IEqp_Equipment_InfoRepository eqp_equipment_inforepository,
IWo_Order_User_MapRepository wo_order_user_maprepository,
IWo_TimeOutRepository wo_timeoutrepository,
ISys_Role_InfoRepository sys_roleinfoRepository,
ISys_User_AccountRepository sys_user_accountRepository,
IDistri_WorkorderRepository distri_workorderrepository,
ISys_ClassGroupRepository sys_classgrouprepository,
IDistri_Workorder_PlanTaskRepository distri_workorder_plantaskrepository,
ISys_ClassGroup_User_MapRepository sys_classgroup_user_maprepository,
IConfiguration configuration, IWo_MattersRepository wo_mattersRepository,
IusercoldandclintidRepository usercoldandclintidRepository
)
{
_logger = logger;
_cache = cache;
_wo_repair_baseRepository = wo_repair_baseRepository;
_wo_maintain_baserepository = wo_maintain_baserepository;
_wo_maintain_planrepository = wo_maintain_planrepository;
_wo_equipmentrunningrepository = wo_equipmentrunningrepository;
_eqp_equipment_inforepository = eqp_equipment_inforepository;
_wo_order_user_maprepository = wo_order_user_maprepository;
_wo_timeoutrepository = wo_timeoutrepository;
_sys_roleinfoRepository = sys_roleinfoRepository;
_sys_user_accountRepository = sys_user_accountRepository;
_distri_workorderrepository = distri_workorderrepository;
_sys_classgrouprepository = sys_classgrouprepository;
_distri_workorder_plantaskrepository = distri_workorder_plantaskrepository;
_sys_classgroup_user_maprepository = sys_classgroup_user_maprepository;
_configuration = configuration;
_wo_mattersRepository = wo_mattersRepository;
_usercoldandclintidRepository = usercoldandclintidRepository;
}
///
/// 保存App客户端ClientId值
///
///
[HttpPost("putpushclientinfo")]
public async Task PutAppClientIdAsync(string clientid, int apptype = 1)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
#region 丢弃不用
//var list = new List();
////获取角色code: 运维员工 YWYG 、运维主管 YWZG 、运营副经理 YWFJL 、运营经理 YWJL 、运营总监 YWZJ 、运营副总 YWFZ 、运营总经理 YWZJL
////配送:电梯岗 SSY_DTG 、配送岗 SSY_PSG 、配送主管 SSY_ZG
//string rolecode = "";
//var modelUser = await _sys_user_accountRepository.GetSingle(x => x.usercode == usercode);
//if (modelUser != null)
//{
// var roleinfo = await _sys_roleinfoRepository.GetSingle(x => x.id == modelUser.role_id);
// rolecode = roleinfo.role_code;
//}
////获取redis缓存
//var clientidStr = await _cache.GetStringAsync("clientidlist");
//if (!string.IsNullOrEmpty(clientidStr) && clientidStr != "null")
// list = clientidStr.ToList();
//var rolecodeStr = "YWYG,YWZG,YWFJL,YWJL,YWZJ,YWFZ,YWZJL,SSY_DTG,SSY_PSG,SSY_ZG";
//if (rolecodeStr.Contains(rolecode))
//{
// if (!string.IsNullOrEmpty(clientid))
// {
// var count = 0;
// #region 去重 - 保证只有一个坐席账号,且只往一个登录账号的手机上推送
// var lists = list.Where(x => x.usercode == usercode).ToList();
// if (lists != null) count = lists.Count();
// if (count > 0)
// {
// foreach (var item in lists)
// {
// list.Remove(item);
// }
// }
// //存入redis缓存
// list.Add(new AppClientListDto
// {
// apptype = apptype,
// clientid = clientid,
// usercode = usercode
// });
// await _cache.SetStringAsync($"clientidlist", list.ToJson());
// #endregion
// return Success("保存ClientId成功");
// }
// return Success("没有获取到该设备clientid");
//}
#endregion
// var usercode = "888888";
///判断数据库中有没有存这条记录
var isclintid = await _usercoldandclintidRepository.GetSingle(p=>p.usercode==usercode);
if (isclintid == null)
{
MadRunFabric.Model.EquipmentApi.Model.usercoldandclintid userclint = new MadRunFabric.Model.EquipmentApi.Model.usercoldandclintid();
userclint.usercode = usercode;
userclint.clintid = clientid;
userclint.apptype = apptype;
var a = _usercoldandclintidRepository.AddRetID(userclint);
if (a.Result != null || a.Result != "")
{
return Success("成功");
}
else
{
return Error("失败");
}
}
else
{
isclintid.clintid = clientid;
var a = _usercoldandclintidRepository.UpdateOne(isclintid);
if (a.Result)
{
return Success("成功");
}
else
{
return Error("失败");
}
}
}
///
/// 获取App客户端ClientId列表
///
///
[AllowAnonymous]
[HttpGet("getclientidlist")]
public async Task GetAppClientIdlistAsync()
{
var list = new List();
////获取redis缓存
//var clientidStr = await _cache.GetStringAsync("clientidlist");
//if (!string.IsNullOrEmpty(clientidStr) && clientidStr != "null")
// list = clientidStr.ToList();
return Success("获取客户端ClientId列表", list);
}
///
/// 记录已推送信息
///
///
/// //工单类型(枚举EnumOrderState) 维修工单 = 1, 保养工单 = 2, 运行工单 = 3, 超时工单 = 4, 配送工单 = 5, 计划工单 = 6
///
[AllowAnonymous]
[HttpGet("addappmessage")]
public async Task addAppMessageAsync(string woid, string wocode, int wostate, string usercode, int channelcode = 0)
{
if (!string.IsNullOrEmpty(wocode))
{
#region 标记消息提醒工单(消息提醒,App推送)
if (channelcode > 0)
{
#region 查询 4个表 by channelcode
var content = string.Empty;
if (channelcode == 1)
{
//维修工单 - 未处理完成
var listrepair_base = await _wo_repair_baseRepository.Get(x => x.wostate < 3 && x.isdelete == 0);
var model_repair_base = listrepair_base.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
if (model_repair_base != null)
content = "故障说明:" + model_repair_base.faultdescripe;
}
if (channelcode == 2)
{
//保养工单 - 未处理完成
var listmaintain_base = await _wo_maintain_baserepository.Get(x => x.wostate < 3 && x.isdelete == false);
var model_maintain_base = listmaintain_base.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
if (model_maintain_base != null)
content = model_maintain_base.woname + (string.IsNullOrEmpty(model_maintain_base.maintaincontent) ? "" : ",保养内容:" + model_maintain_base.maintaincontent);
}
if (channelcode == 3)
{
//设备巡检工单 - 未处理完成
var listequipmentrunning = await _wo_equipmentrunningrepository.Get(x => x.wostate <= 3 && x.isdelete == 0);
var model_equipmentrunning = listequipmentrunning.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
if (model_equipmentrunning != null)
content = model_equipmentrunning.woname + (string.IsNullOrEmpty(model_equipmentrunning.wocontent) ? "" : ",工单内容:" + model_equipmentrunning.wocontent) + (string.IsNullOrEmpty(model_equipmentrunning.checkcontent) ? "" : ",异常说明:" + model_equipmentrunning.checkcontent);
}
if (channelcode == 4)
{
//超时工单 - 所有
var listetimeout = await _wo_timeoutrepository.Get(x => x.isdelete == false && x.istimeout == 1);
var model_etimeout = listetimeout.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
if (model_etimeout != null)
content = "超时原因:" + model_etimeout.timeoutreason; //超时原因
}
if (channelcode == 5)
{
//配送工单 - 所有
var listdistri = await _distri_workorderrepository.Get(x => x.isdelete == 0 && x.wostate == (int)EnumDistributionState.create);
var model_distri = listdistri.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
if (model_distri != null)
{
string goodsDetail = (model_distri.goodslist != null && model_distri.goodslist.Count > 0) ? ",配送物品:" + model_distri.goodslist.Select(x => x.goodsname).ToJson() : "";
content = "配送内容:" + model_distri.detail + goodsDetail; //配送内容
}
}
if (channelcode == 6)
{
//超时工单 - 所有
var listdistri = await _distri_workorder_plantaskrepository.Get(x => x.isdelete == 0 && x.planwostate == (int)EnumDistriWorkOrderPlanWOstate.create);
var model_distri = listdistri.FirstOrDefault(x => x.wocode == wocode && x.id == woid);
if (model_distri != null)
{
string goodsDetail = (model_distri.goodslist != null && model_distri.goodslist.Count > 0) ? ",配送计划工单物品:" + model_distri.goodslist.Select(x => x.goodsname).ToJson() : "";
content = "配送计划工单内容:" + model_distri.content + goodsDetail; //配送内容
}
}
#endregion
//维修工单号
var listmap = await _wo_order_user_maprepository.Get(x => x.wocode == wocode && x.wostate.Equals(wostate) && x.woid == woid && x.channelcode == channelcode && x.readby == usercode);
var modelmap = listmap.FirstOrDefault();
if (modelmap == null)
{
//添加是否已读关系表
modelmap = new Wo_Order_User_Map();
modelmap.woid = woid;
modelmap.wocode = wocode;
modelmap.wostate = wostate;
modelmap.readby = usercode;
modelmap.channelcode = channelcode; //工单类型(枚举EnumOrderState) 维修工单 = 1, 保养工单 = 2, 运行工单 = 3, 超时工单 = 4
modelmap.ispush = 1;
modelmap.isread = 0;
modelmap.readtime = DateTime.Now;
modelmap.note = content;
bool b = await _wo_order_user_maprepository.Add(modelmap);
}
else
{
if (modelmap.ispush != 1)
{
modelmap.ispush = 1;
modelmap.note = content;
bool b = await _wo_order_user_maprepository.UpdateOne(modelmap);
}
}
return Success("推送记录成功");
}
#endregion
}
return Success("参数错误");
}
///
/// Push 消息通知 - 设备维修(报修工单)
/// 维修工单/保养工单/巡检工单/超时工单
///
/// 消息类型 (1消息通知信息,2推送信息)
///
[HttpGet("getmessagelists")]
[AllowAnonymous]
public async Task GetMessagesLists(string usercode)
{
#region 不同地方
//int messagetype = 2; //推送
//运维员工YWYG,运维主管YWZG
string rolecode = "";
string projectlist = "";
//获取角色code,运维员工维护项目id
var modelUser = await _sys_user_accountRepository.GetSingle(x => x.usercode == usercode);
if (modelUser != null)
{
var roleinfo = await _sys_roleinfoRepository.GetSingle(x => x.id == modelUser.role_id);
rolecode = roleinfo.role_code;
projectlist = string.Join(",", modelUser.projectlist);
}
//工单用户查看关系表 - 已查看订单
var listmap = await _wo_order_user_maprepository.Get(x => x.readby.Equals(usercode)); // && x.isread == 1
listmap = listmap.Where(x => x.ispush == 1);
#endregion
//维修工单 - 未处理完成
var listrepair_base = await _wo_repair_baseRepository.Get(x => x.wostate < 3 && x.isdelete == 0);
//保养工单 - 未处理完成
var listmaintain_base = await _wo_maintain_baserepository.Get(x => x.wostate < 3 && x.isdelete == false);
//设备巡检工单 - 未处理完成
var listequipmentrunning = await _wo_equipmentrunningrepository.Get(x => x.wostate <= 3 && x.isdelete == 0);
//超时工单 - 所有
var listetimeout = await _wo_timeoutrepository.Get(x=>x.isdelete == false && x.istimeout == 1);
//配送工单 - 新工单,派单(派单/强制派单)
var listdistri = await _distri_workorderrepository.Get(x => x.wostate <= (int)EnumDistributionState.assign && x.isdelete == 0 && x.totype != (int)EnumDistributionTotype.robbery); //&& (x.totype == (int)EnumDistributionTotype.send || x.totype == (int)EnumDistributionTotype.assign)
//班次
var query_classgroup = await _sys_classgrouprepository.Get(x => x.isdelete == 0);
//排班
var query_usermap = await _sys_classgroup_user_maprepository.Get(x => x.isdelete == 0 && x.isstatus == 1);//配送工单 - 新工单,派单(派单/强制派单)
//计划工单
var listwotask = await _distri_workorder_plantaskrepository.Get(x => x.isdelete == 0 && x.planwostate != (int)EnumDistriWorkOrderPlanWOstate.start);
//设备信息
var listequipment_info = await _eqp_equipment_inforepository.Get(x => x.isdelete == 0);
//检查事项
var listmatter = await _wo_mattersRepository.Get(x => x.isdelete == false);
var list = new List();
#region 条件判断 - 工单消息提醒和推送流程
//1、运维员工 YWYG < 2、运维主管 YWZG < 3、运营副经理 YWFJL < 4、运营经理 YWJL < 5、运营总监 YWZJ < 6、运营副总 YWFZ < 7、运营总经理 YWZJL
//说明工单(延迟时间配置DelayPushTime):
// 1、新单未抢单 和 未转派 运维员工;(例如9:00)
// 2、超过 1 * 几分钟 无人抢单行为推送给 运维主管;(例如9:05)
// 3、超过 3 * 几分钟 无派单行为推送给 运营副经理;(例如9:15)
// 4、超过 4 * 几分钟 无管理行为推送给 运营经理和运营总监;(例如9:20)
// 5、超过 6 * 几分钟 无管理行为推送给 运营副总和运营总经理;(例如9:30)
int timespan = 0;
int.TryParse(_configuration["PushMessage:DelayPushTime"], out timespan);
DateTime nowTime = DateTime.Now.ToLocalTime();
listrepair_base = listrepair_base.Where(x => projectlist.Contains(x.projectid));
listmaintain_base = listmaintain_base.Where(x =>projectlist.Contains(x.projectid));
listequipmentrunning = listequipmentrunning.Where(x => projectlist.Contains(x.projectid));
////listetimeout = listetimeout.Where(x => projectlist.Contains(x.projectid));
listdistri = listdistri.Where(x => projectlist.Contains(x.projectid));
#region 配送工单 参与 排班条件
//随机工单
DateTime dtnow = DateTime.Now;
string nowDay = dtnow.ToString("yyyy-MM-dd");
var listClassUser = query_usermap.Where(x => x.date == nowDay).ToList(); //.Where(x=>x.date == nowDay)
//var query_result = new List();
//此法写的原因是要查询对应时间段的工单,需要或||拼接 ----------------------------------------------
var list_distri = new List();
if (!string.IsNullOrEmpty(rolecode))
{
//var query1 = new List();
////条件拼接(时间段查询) -----------------
//非值班 && x.roleList.Select(r => r.rolecode).Contains(rolecode) 以排班的选中角色为准
var listClass = query_classgroup.ToList();
if (rolecode.Equals("SSY_DTG"))
listClass = query_classgroup.ToList().Where(x => x.iswork == false).ToList();
if (listClass != null && listClass.Count > 0)
{
#region 获取新工单 by 排班/班次 - 电梯岗 -----------------------------------------
//获取新工单
var query_zero = listdistri.Where(x => x.wostate == (int)EnumDistributionState.create).ToList();
listClassUser = listClassUser.Where(x => x.date == nowDay && x.usercode == usercode).ToList();
foreach (var item in listClassUser)
{
#region 调用条件 - 日期和班别code
//获取条件 - 日期和班别code
var list_code = new List { }; //班别code
var dayone = item.date;
var list_r = item.classgroupList.ToList();
foreach (var item_r in list_r)
{
if (item_r.roleList != null && item_r.roleList.Count > 0)
{
//角色 - 班别
var mode_r = item_r.roleList.FirstOrDefault(x => x.ischeck == true); //rolecode SSY_PSG // && x.rolecode == rolecode
if (mode_r != null)
list_code.Add(item_r.code);
}
}
if (list_code != null && list_code.Count > 0)
{
listClass = listClass.Where(x => list_code.Contains(x.code)).ToList();
var model_Class = listClass.FirstOrDefault(x => DateTime.Parse(nowDay + " " + x.starttime) <= dtnow && DateTime.Parse(nowDay + " " + x.endtime) >= dtnow);
if (model_Class != null)
{
list_distri = list_distri.Union(query_zero.Where(x => x.createtime >= DateTime.Parse(dayone + " " + model_Class.starttime) && x.createtime <= DateTime.Parse(dayone + " " + model_Class.endtime))).ToList();
}
//foreach (var item_Class in listClass)
//{
// list_distri = list_distri.Union(query_zero.Where(x => x.createtime >= DateTime.Parse(dayone + " " + item_Class.starttime) && x.createtime <= DateTime.Parse(dayone + " " + item_Class.endtime))).ToList();
//}
}
#endregion
}
#endregion
}
}
#endregion
if (rolecode.Equals("YWYG"))
{
//1、已抢单 和 已转派 运维员工 <--> 新单 - 未抢单 和 未转派 运维员工 -- 合并两List
listrepair_base = listrepair_base.Where(x => x.wostate == 1 && x.touser.Contains(usercode))
.Concat(listrepair_base.Where(x => x.wostate == 0));
listmaintain_base = listmaintain_base.Where(x => x.wostate == 1 && x.maintainuser.Contains(usercode))
.Concat(listmaintain_base.Where(x => x.wostate == 0));
listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 1 && x.checkby.Equals(usercode))
.Concat(listequipmentrunning.Where(x => x.wostate == 0));
listetimeout = listetimeout.Where(x => x.touser.Equals(usercode));
}
else if (rolecode.Equals("SSY_PSG"))
{
//rolecode.Equals("SSY_DTG") ||
//20、配送岗 <--> 新单 、派单(派单/强制派单) -- 合并两List
//listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode))
// .Concat(listdistri.Where(x => x.wostate == (int)EnumDistributionState.create));
listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode))
.Concat(list_distri); //合并新建工单,和接单工单
listwotask = listwotask.Where(x => x.joinuserlist.Count > 0 && x.joinuserlist.Contains(usercode));
}
else if (rolecode.Equals("SSY_DTG"))
{
listwotask = listwotask.Where(x => x.joinuserlist.Count > 0 && x.joinuserlist.Contains(usercode));
}
else if (rolecode.Equals("SSY_ZG"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 4); //推迟4 * 几分钟
//21、无人抢单 - 配送主管 <--> 新单 、派单(派单/强制派单) -- 合并两List
listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.create && x.createtime < dTime);
}
else if (rolecode.Equals("YWZG"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 1); //推迟1 * 几分钟
//2、无人抢单 - 运维主管
listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listequipmentrunning = listequipmentrunning.Where(x => (x.wostate == 0 && x.createtime < dTime) || x.wostate == 3); //包含完成工单(完成巡检后给对应的管理员发送信息)
listetimeout = listetimeout.Where(x => x.createtime < dTime);
}
else if (rolecode.Equals("YWFJL"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 3); //推迟3 * 几分钟
//3、无派单 - 运营副经理
listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
listetimeout = listetimeout.Where(x => x.createtime < dTime);
}
else if (rolecode.Equals("YWJL") || rolecode.Equals("YWZJ"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 4); //推迟4 * 几分钟
//无管理 - 运营经理 和 运营总监
listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
listetimeout = listetimeout.Where(x => x.createtime < dTime);
}
else if (rolecode.Equals("YWFZ") || rolecode.Equals("YWZJL"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 6); //推迟6 * 几分钟
//无管理 - 运营副总 和 运营总经理
listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
listetimeout = listetimeout.Where(x => x.createtime < dTime);
}
else
{
//其他角色或空是,不显示消息提醒
return Success("角色(" + rolecode + ")不获取消息提醒", new { rows = new List(), total = -1 });
}
#endregion
if (rolecode.Equals("SSY_PSG") || rolecode.Equals("SSY_DTG"))
{
#region 配送计划工单 - 配送
foreach (var item in listwotask)
{
string statename = string.Empty;
if (item.planwostate == (int)EnumDistriWorkOrderPlanWOstate.start)
statename = "新建计划工单";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.planwostate) && x.channelcode == (int)EnumOrderState.配送计划工单);
var modelmap = listmapwo.FirstOrDefault();
//未推送
if (modelmap == null)
{
string goodsDetail = (item.goodslist != null && item.goodslist.Count > 0) ? ",配送计划物品:" + item.goodslist.Select(x => x.goodsname).ToJson() : "";
list.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.配送计划工单,
wotype = (int)EnumWoType.配送计划,
wocode = item.wocode,
proname = "配送计划工单:" + item.wocode,
title = item.wocode,
content = "配送计划工单说明:" + item.content + goodsDetail,
wostate = item.planwostate,
statename = statename, //工单状态
checkby = string.Join(",", item.joinuserlist), //接单人
createby = item.createtby,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
#region 配送工单
foreach (var item in listdistri)
{
string statename = string.Empty;
if (item.wostate == (int)EnumDistributionState.create)
statename = "新建工单";
if (item.wostate == (int)EnumDistributionState.assign)
statename = "派单/强制派单";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.配送工单);
var modelmap = listmapwo.FirstOrDefault();
//未推送
if (modelmap == null)
{
string goodsDetail = (item.goodslist != null && item.goodslist.Count > 0) ? ",配送物品:" + item.goodslist.Select(x => x.goodsname).ToJson() : "";
list.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.配送工单,
wotype = (int)EnumWoType.配送,
wocode = item.wocode,
proname = "配送工单:" + item.wocode,
title = item.wocode,
content = "配送说明:" + item.detail + goodsDetail,
wostate = item.wostate,
statename = statename, //工单状态
checkby = string.Join(",", item.touser), //接单人
createby = item.createtby,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
}
else
{
#region 维修工单
foreach (var item in listrepair_base)
{
string statename = string.Empty;
if (item.wostate == (int)EnumWorkOrderState.create)
statename = "新建工单";
if (item.wostate == (int)EnumWorkOrderState.assign)
statename = "已转派/已抢单";
if (item.wostate >= (int)EnumWorkOrderState.deal)
statename = "已完成";
if (item.wostate == (int)EnumWorkOrderState.hangup)
statename = "已挂起";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.维修工单);
var modelmap = listmapwo.FirstOrDefault();
//未推送
if (modelmap == null)
{
list.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.维修工单,
wotype = (int)EnumWoType.维修,
wocode = item.wocode,
proname = "维修工单:" + item.wocode, // + " " + item.proname,
title = item.wocode,
content = "故障说明:" + item.faultdescripe,
wostate = item.wostate,
statename = statename, //工单状态
checkby = string.Join(",", item.touser), //接单人
createby = item.createuser,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
#region 保养工单
foreach (var item in listmaintain_base)
{
string statename = string.Empty;
if (item.wostate == (int)EnumWorkOrderState.create)
statename = "新建工单";
if (item.wostate == (int)EnumWorkOrderState.assign)
statename = "已转派/已抢单";
if (item.wostate >= (int)EnumWorkOrderState.deal)
statename = "已完成";
if (item.wostate == (int)EnumWorkOrderState.hangup)
statename = "已挂起";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.保养工单);
var modelmap = listmapwo.FirstOrDefault();
//未推送
if (modelmap == null)
{
list.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.保养工单,
wotype = (int)EnumWoType.保养,
wocode = item.wocode,
proname = "保养工单:" + item.wocode, // + " " + item.proname,
title = item.wocode,
content = item.woname + (string.IsNullOrEmpty(item.maintaincontent) ? "" : ",保养内容:" + item.maintaincontent), //保养内容
wostate = item.wostate,
statename = statename, //工单状态
//checkby = item.maintainman, //保修人
checkby = string.Join(",", item.maintainuser),
createby = item.createby,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
#region 设备巡检工单
foreach (var item in listequipmentrunning)
{
#region 检查事项
var matternames = "";
if (item.matterids != null && item.matterids.Count() > 0)
{
var matterids = string.Join(",", item.matterids);
if (!string.IsNullOrEmpty(matterids))
{
var mattermodel = listmatter.FirstOrDefault(x => matterids.Contains(x.id));
matternames = mattermodel != null ? mattermodel.matter : "";
}
}
#endregion
#region
////判断巡检中设备id是否为空
//var modelequname = new Eqp_Equipment_Info();
//if (item.equipmentid != null && item.equipmentid.Count() > 0)
//{
// var equipmentids = string.Join(",", item.equipmentid);
// if (!string.IsNullOrEmpty(equipmentids))
// modelequname = listequipment_info.FirstOrDefault(x => equipmentids.Contains(x.id));
//}
//string equipmentname = string.Empty;
//equipmentname = modelequname != null ? modelequname.equipment_name : "";
#endregion
string statename = string.Empty;
if (item.wostate == (int)EnumWorkOrderState.create)
statename = "新建工单";
if (item.wostate == (int)EnumWorkOrderState.assign)
statename = "已转派/已抢单";
if (item.wostate >= (int)EnumEquipmentRunningState.grab && item.wostate < (int)EnumEquipmentRunningState.deal)
statename = "未完成";
if (item.wostate >= (int)EnumEquipmentRunningState.deal)
statename = "已完成";
if (item.wostate == (int)EnumEquipmentRunningState.hangup)
statename = "已挂起";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.巡检工单);
#region 条件 - 工单需要提醒时
if (item.wostate == 0 || (item.wostate == 3 && item.isreturnmsg == 1))
{
listmapwo = listmapwo.Where(x => x.wostate == item.wostate);
}
#endregion
var modelmap = listmapwo.FirstOrDefault();
var orderStateTitle = item.wostate == 3 ? "已完成" : "";
//var contentStr = "设备名称:" + equipmentname;
var contentStr = "检查事项:" + matternames;
if (item.quipmenttype == 0)
contentStr += "运维异常说明:" + item.checkcontent;
//未推送
if (modelmap == null)
{
list.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.巡检工单,
wotype = (int)EnumWoType.巡检,
wocode = item.wocode,
//proname = "设备运行工单:" + item.wocode + orderStateTitle + " 设备名称:" + equipmentname,
proname = "设备运行工单:" + item.wocode + orderStateTitle + " 检查事项:" + matternames,
title = item.wocode,
content = item.woname + (string.IsNullOrEmpty(item.wocontent) ? "" : ",工单内容:" + item.wocontent) + (string.IsNullOrEmpty(item.checkcontent) ? "" : ",异常说明:" + item.checkcontent), //运维内容
wostate = item.wostate,
statename = statename, //工单状态
checkby = item.checkby, //巡检人
createby = item.createby,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
#region 超时工单
foreach (var item in listetimeout)
{
string statename = string.Empty;
if (item.isover == true)
statename = "已完结";
else
statename = "否完结";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.channelcode == (int)EnumOrderState.超时工单);
var modelmap = listmapwo.FirstOrDefault();
//未推送
if (modelmap == null)
{
list.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.超时工单,
wotype = item.wotype,
wocode = item.wocode,
proname = "超时工单(" + Enum.GetName(typeof(EnumWoType), item.wotype) + "):" + item.wocode + ",延迟时长:" + item.times,
title = item.wocode,
content = "超时原因:" + item.timeoutreason, //超时原因
wostate = 99, //超时工单无需根据状态处理转派,故默认写个参数值99
statename = statename, //工单状态
createby = item.manager,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
}
//升序排序 - (跟消息提醒排序相反,推送时先推日期比较早的工单,后推送日期比较晚的工单,故短信排在手机最上面)
list = list.OrderBy(x => x.createtime).ToList();
var obj = new
{
rows = list,
total = list.Count, //消息数
};
return Success("获取成功", obj);
}
///
/// 测试 - 批量修改消息内容和id
///
///
[HttpGet("getmessagelist_ceshi")]
public async Task GetMessagesList_ceshi()
{
var listrepair_bases = await _wo_repair_baseRepository.Get(x => x.isdelete == 0);
var listmaintain_bases = await _wo_maintain_baserepository.Get(x => x.isdelete == false);
var listequipmentrunnings = await _wo_equipmentrunningrepository.Get(x => x.isdelete == 0);
var listetimeouts = await _wo_timeoutrepository.Get(x => x.isdelete == false);
var listmap = await _wo_order_user_maprepository.GetAll();
int i = 0;
foreach (var item in listmap)
{
string statename = string.Empty;
var woid = string.Empty;
string content = string.Empty;
#region 获取工单id
//维修工单
if (item.channelcode == 1 && !string.IsNullOrEmpty(item.wocode))
{
//var listWorkOrder = listrepair_bases.Where(x => x.wocode.Equals(item.wocode));
var modelWorkOrder = listrepair_bases.Where(x => x.wocode.Equals(item.wocode)).FirstOrDefault();
if (modelWorkOrder != null)
{
woid = modelWorkOrder.id;
content = "故障说明:" + modelWorkOrder.faultdescripe;
}
}
//保养工单
if (item.channelcode == 2 && !string.IsNullOrEmpty(item.wocode))
{
var listWorkOrder = listmaintain_bases.Where(x => x.wocode.Equals(item.wocode));
var modelWorkOrder = listWorkOrder.FirstOrDefault();
if (modelWorkOrder != null)
{
woid = modelWorkOrder.id;
content = modelWorkOrder.woname + (string.IsNullOrEmpty(modelWorkOrder.maintaincontent) ? "" : ",保养内容:" + modelWorkOrder.maintaincontent);
}
}
//设备巡检工单
if (item.channelcode == 3 && !string.IsNullOrEmpty(item.wocode))
{
var listWorkOrder = listequipmentrunnings.Where(x => x.wocode.Equals(item.wocode));
var modelWorkOrder = listWorkOrder.FirstOrDefault();
if (modelWorkOrder != null)
{
woid = modelWorkOrder.id;
content = modelWorkOrder.woname + (string.IsNullOrEmpty(modelWorkOrder.wocontent) ? "" : ",工单内容:" + modelWorkOrder.wocontent) + (string.IsNullOrEmpty(modelWorkOrder.checkcontent) ? "" : ",异常说明:" + modelWorkOrder.checkcontent);
}
}
//超时工单
if (item.channelcode == 4 && !string.IsNullOrEmpty(item.wocode))
{
var listWorkOrder = listetimeouts.Where(x => x.wocode.Equals(item.wocode));
var modelWorkOrder = listWorkOrder.FirstOrDefault();
if (modelWorkOrder != null)
{
woid = modelWorkOrder.id;
content = "超时原因:" + modelWorkOrder.timeoutreason;
}
}
#endregion
if (!string.IsNullOrEmpty(woid))
{
i += 1;
item.woid = woid;
item.note = content;
await _wo_order_user_maprepository.Update(item);
}
}
return Success("更新工单id,和内容,num:" + i);
}
///
/// 消息通知 - 设备维修(报修工单)
/// 维修工单/保养工单/巡检工单/超时工单
///
/// 消息类型 (1消息通知信息,2推送信息)
///
[HttpGet("getmessagelist")]
public async Task GetMessagesList()
{
#region 不同地方
//int messagetype = 1; //消息通知
//运维员工YWYG,运维主管YWZG
string rolecode = User.Claims.FirstOrDefault(c => c.Type == "RoleCode").Value;
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;//工单用户查看关系表 - 已查看订单
//string rolecode = "XTWH";
// string usercode = "8000";
string projectlist = "";
//获取角色code
var modelUser = await _sys_user_accountRepository.GetSingle(x => x.usercode == usercode);
if (modelUser != null)
{
projectlist = string.Join(",", modelUser.projectlist);
}
var listmap = await _wo_order_user_maprepository.Get(x => x.readby == usercode); // && x.isread == 1
listmap = listmap.Where(x => x.isnotice == 1 && x.isread == 1);
#endregion
int topNum = 0;
int.TryParse(_configuration["PushMessage:MessageNoReadNum"], out topNum);
//维修工单 - 未处理完成
var listrepair_base = await _wo_repair_baseRepository.Get(x => x.wostate == 1 && x.isdelete == 0);
//保养工单 - 未处理完成
var listmaintain_base = await _wo_maintain_baserepository.Get(x => x.wostate == 1 && x.isdelete == false);
//设备巡检工单 - 未处理完成
var listequipmentrunning = await _wo_equipmentrunningrepository.Get(x => x.wostate==1 && x.isdelete == 0);
//超时工单 - 所有
var listetimeout = await _wo_timeoutrepository.Get(x => x.isdelete == false && x.istimeout == 1);
//配送工单 - 新工单,派单(派单/强制派单)
var listdistri = await _distri_workorderrepository.Get(x => x.wostate <= (int)EnumDistributionState.assign && x.isdelete == 0 && x.totype != (int)EnumDistributionTotype.robbery); // && (x.totype == (int)EnumDistributionTotype.send || x.totype == (int)EnumDistributionTotype.assign)
//班次
var query_classgroup = await _sys_classgrouprepository.Get(x => x.isdelete == 0);
//排班
var query_usermap = await _sys_classgroup_user_maprepository.Get(x => x.isdelete == 0 && x.isstatus == 1);
//计划工单
var listwotask = await _distri_workorder_plantaskrepository.Get(x => x.isdelete == 0 && x.planwostate != (int)EnumDistriWorkOrderPlanWOstate.start);
//设备信息
var listequipment_info = await _eqp_equipment_inforepository.Get(x => x.isdelete == 0);
//检查事项
var listmatter = await _wo_mattersRepository.Get(x => x.isdelete == false);
var list = new List();
var list_noread = new List();
var list_read = new List();
#region 条件判断 - 工单消息提醒和推送流程
//1、运维员工 YWYG < 2、运维主管 YWZG < 3、运营副经理 YWFJL < 4、运营经理 YWJL < 5、运营总监 YWZJ < 6、运营副总 YWFZ < 7、运营总经理 YWZJL
//说明工单(延迟时间配置DelayPushTime):
// 1、新单出现 运维员工 抢单;(例如9:00)
// 2、超过 1 * 几分钟 无人抢单行为推送给 运维主管;(例如9:05)
// 3、超过 3 * 几分钟 无派单行为推送给 运营副经理;(例如9:15)
// 4、超过 4 * 几分钟 无管理行为推送给 运营经理和运营总监;(例如9:20)
// 5、超过 6 * 几分钟 无管理行为推送给 运营副总和运营总经理;(例如9:30)
int timespan = 0;
int.TryParse(_configuration["PushMessage:DelayPushTime"], out timespan);
DateTime nowTime = DateTime.Now.ToLocalTime();
var listrepair_base2 = await _wo_repair_baseRepository.GetAll();
listrepair_base = listrepair_base.Where(x => projectlist.Contains(x.projectid));
listmaintain_base = listmaintain_base.Where(x => projectlist.Contains(x.projectid));
listequipmentrunning = listequipmentrunning.Where(x => projectlist.Contains(x.projectid));
//listetimeout = listetimeout.Where(x => projectlist.Contains(x.projectid));
listdistri = listdistri.Where(x => projectlist.Contains(x.projectid));
#region 配送工单 参与 排班条件
//随机工单
DateTime dtnow = DateTime.Now;
string nowDay = dtnow.ToString("yyyy-MM-dd");
var listClassUser = query_usermap.Where(x => x.date == nowDay).ToList(); //.Where(x=>x.date == nowDay)
//var query_result = new List();
//此法写的原因是要查询对应时间段的工单,需要或||拼接 ----------------------------------------------
var list_distri = new List();
if (!string.IsNullOrEmpty(rolecode))
{
//var query1 = new List();
////条件拼接(时间段查询) -----------------
//非值班 && x.roleList.Select(r => r.rolecode).Contains(rolecode) 以排班的选中角色为准
var listClass = query_classgroup.ToList();
if (rolecode.Equals("SSY_DTG"))
listClass = query_classgroup.ToList().Where(x => x.iswork == false).ToList();
if (listClass != null && listClass.Count > 0)
{
#region 获取新工单 by 排班/班次 - 电梯岗 -----------------------------------------
//获取新工单
var query_zero = listdistri.Where(x => x.wostate == (int)EnumDistributionState.create).ToList();
listClassUser = listClassUser.Where(x => x.date == nowDay && x.usercode == usercode).ToList();
foreach (var item in listClassUser)
{
#region 调用条件 - 日期和班别code
//获取条件 - 日期和班别code
var list_code = new List { }; //班别code
var dayone = item.date;
var list_r = item.classgroupList.ToList();
foreach (var item_r in list_r)
{
if (item_r.roleList != null && item_r.roleList.Count > 0)
{
//角色 - 班别
var mode_r = item_r.roleList.FirstOrDefault(x => x.ischeck == true); //rolecode SSY_PSG // && x.rolecode == rolecode
if (mode_r != null)
list_code.Add(item_r.code);
}
}
if (list_code != null && list_code.Count > 0)
{
listClass = listClass.Where(x => list_code.Contains(x.code)).ToList();
var model_Class = listClass.FirstOrDefault(x => DateTime.Parse(nowDay + " " + x.starttime) <= dtnow && DateTime.Parse(nowDay + " " + x.endtime) >= dtnow);
if (model_Class != null)
{
list_distri = list_distri.Union(query_zero.Where(x => x.createtime >= DateTime.Parse(dayone + " " + model_Class.starttime) && x.createtime <= DateTime.Parse(dayone + " " + model_Class.endtime))).ToList();
}
//foreach (var item_Class in listClass)
//{
// list_distri = list_distri.Union(query_zero.Where(x => x.createtime >= DateTime.Parse(dayone + " " + item_Class.starttime) && x.createtime <= DateTime.Parse(dayone + " " + item_Class.endtime))).ToList();
//}
}
#endregion
}
#endregion
}
}
#endregion
if (rolecode.Equals("YWYG"))
{
//1、已抢单 和 已转派 运维员工 <--> 新单 - 未抢单 和 未转派 运维员工 -- 合并两List
listrepair_base = listrepair_base.Where(x => x.wostate == 1 && x.touser.Contains(usercode))
.Concat(listrepair_base.Where(x => x.wostate == 0));
listmaintain_base = listmaintain_base.Where(x => x.wostate == 1 && x.maintainuser.Contains(usercode))
.Concat(listmaintain_base.Where(x => x.wostate == 0));
listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 1 && x.checkby.Equals(usercode))
.Concat(listequipmentrunning.Where(x => x.wostate == 0));
listetimeout = listetimeout.Where(x => x.touser.Equals(usercode));
}
else if (rolecode.Equals("SSY_PSG"))
{
//rolecode.Equals("SSY_DTG") ||
//20、配送岗 <--> 新单 、派单(派单/强制派单) -- 合并两List
//listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode))
// .Concat(listdistri.Where(x => x.wostate == (int)EnumDistributionState.create));
//var list_d = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode)).ToList();
listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.assign && x.touser.Contains(usercode))
.Concat(list_distri); //合并新建工单,和接单工单
listwotask = listwotask.Where(x => x.joinuserlist.Count > 0 && x.joinuserlist.Contains(usercode));
}
else if (rolecode.Equals("SSY_DTG"))
{
listwotask = listwotask.Where(x => x.joinuserlist.Count > 0 && x.joinuserlist.Contains(usercode));
}
else if (rolecode.Equals("SSY_ZG"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 4); //推迟4 * 几分钟
//21、无人抢单 - 配送主管 <--> 新单 、派单(派单/强制派单) -- 合并两List
listdistri = listdistri.Where(x => x.wostate == (int)EnumDistributionState.create && x.createtime < dTime);
}
else if (rolecode.Equals("YWZG"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 1); //推迟1 * 几分钟
//2、无人抢单 - 运维主管
listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listequipmentrunning = listequipmentrunning.Where(x => (x.wostate == 0 && x.createtime < dTime) || x.wostate == 3); //包含完成工单(完成巡检后给对应的管理员发送信息)
listetimeout = listetimeout.Where(x => x.createtime < dTime);
}
else if (rolecode.Equals("YWFJL"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 3); //推迟3 * 几分钟
//3、无人派单 - 运营副经理
listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
listetimeout = listetimeout.Where(x => x.createtime < dTime);
}
else if (rolecode.Equals("YWJL") || rolecode.Equals("YWZJ"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 4); //推迟4 * 几分钟
//无人管理 - 运营经理 和 运营总监
listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
listetimeout = listetimeout.Where(x => x.createtime < dTime);
}
else if (rolecode.Equals("YWFZ") || rolecode.Equals("YWZJL"))
{
DateTime dTime = nowTime.AddMinutes(timespan * 6); //推迟6 * 几分钟
//无人管理 - 运营副总 和 运营总经理
listrepair_base = listrepair_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listmaintain_base = listmaintain_base.Where(x => x.wostate == 0 && x.createtime < dTime);
listequipmentrunning = listequipmentrunning.Where(x => x.wostate == 0 && x.createtime < dTime);
listetimeout = listetimeout.Where(x => x.createtime < dTime);
}
else
{
//其他角色或空是,不显示消息提醒
return Success("角色(" + rolecode + ")不获取消息提醒", new { rows = new List(), total = -1 });
}
#endregion
if (rolecode.Equals("SSY_PSG") || rolecode.Equals("SSY_DTG"))
{
#region 配送计划工单 - 配送
foreach (var item in listwotask)
{
string statename = string.Empty;
if (item.planwostate == (int)EnumDistriWorkOrderPlanWOstate.start)
statename = "新建计划工单";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.planwostate) && x.channelcode == (int)EnumOrderState.配送计划工单);
var modelmap = listmapwo.FirstOrDefault();
//未推送
if (modelmap == null)
{
string goodsDetail = (item.goodslist != null && item.goodslist.Count > 0) ? ",配送计划物品:" + item.goodslist.Select(x => x.goodsname).ToJson() : "";
list.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.配送计划工单,
wotype = (int)EnumWoType.配送计划,
wocode = item.wocode,
proname = "配送计划工单:" + item.wocode,
title = item.wocode,
content = "配送计划工单说明:" + item.content + goodsDetail,
wostate = item.planwostate,
statename = statename, //工单状态
checkby = string.Join(",", item.joinuserlist), //接单人
createby = item.createtby,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
#region 配送工单
foreach (var item in listdistri)
{
string statename = string.Empty;
if (item.wostate == (int)EnumDistributionState.create)
statename = "新建工单";
if (item.wostate == (int)EnumDistributionState.assign)
statename = "派单/强制派单";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.配送工单);
var modelmap = listmapwo.FirstOrDefault();
if (modelmap == null)
{
string goodsDetail = (item.goodslist != null && item.goodslist.Count > 0) ? ",配送物品:" + item.goodslist.Select(x => x.goodsname).ToJson() : "";
//未读
list_noread.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.配送工单,
wotype = (int)EnumWoType.配送,
wocode = item.wocode,
proname = "配送工单:" + item.wocode,
title = item.wocode,
content = "配送说明:" + item.detail + goodsDetail,
wostate = item.wostate,
statename = statename, //工单状态
checkby = string.Join(",", item.touser), //接单人
createby = item.createtby,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
}
else
{
#region 维修工单
foreach (var item in listrepair_base)
{
string statename = string.Empty;
if (item.wostate == (int)EnumWorkOrderState.create)
statename = "新建工单";
if (item.wostate == (int)EnumWorkOrderState.assign)
statename = "已转派/已抢单";
if (item.wostate >= (int)EnumWorkOrderState.deal)
statename = "已完成";
if (item.wostate == (int)EnumWorkOrderState.hangup)
statename = "已挂起";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.维修工单);
var modelmap = listmapwo.FirstOrDefault();
if (modelmap == null)
{
//未读
list_noread.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.维修工单,
wotype = (int)EnumWoType.维修,
wocode = item.wocode,
proname = "维修工单:" + item.wocode, // + " " + item.proname,
title = item.wocode,
content = "故障说明:" + item.faultdescripe,
wostate = item.wostate,
statename = statename, //工单状态
checkby = string.Join(",", item.touser), //接单人
createby = item.createuser,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
#region 保养工单
foreach (var item in listmaintain_base)
{
string statename = string.Empty;
if (item.wostate == (int)EnumWorkOrderState.create)
statename = "新建工单";
if (item.wostate == (int)EnumWorkOrderState.assign)
statename = "已转派/已抢单";
if (item.wostate >= (int)EnumWorkOrderState.deal)
statename = "已完成";
if (item.wostate == (int)EnumWorkOrderState.hangup)
statename = "已挂起";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.保养工单);
var modelmap = listmapwo.FirstOrDefault();
if (modelmap == null)
{
//未读
list_noread.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.保养工单,
wotype = (int)EnumWoType.保养,
wocode = item.wocode,
proname = "保养工单:" + item.wocode, // + " " + item.proname,
title = item.wocode,
content = item.woname + (string.IsNullOrEmpty(item.maintaincontent) ? "" : ",保养内容:" + item.maintaincontent), //保养内容
wostate = item.wostate,
statename = statename, //工单状态
//checkby = item.maintainman, //保修人
checkby = item.maintainuser.ToString(), //保修人
createby = item.createby,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
#region 设备巡检工单
foreach (var item in listequipmentrunning)
{
#region 检查事项
var matternames = "";
if (item.matterids != null && item.matterids.Count() > 0)
{
var matterids = string.Join(",", item.matterids);
if (!string.IsNullOrEmpty(matterids))
{
var mattermodel = listmatter.FirstOrDefault(x => matterids.Contains(x.id));
matternames = mattermodel != null ? mattermodel.matter : "";
}
}
#endregion
string statename = string.Empty;
if (item.wostate == (int)EnumWorkOrderState.create)
statename = "新建工单";
if (item.wostate == (int)EnumWorkOrderState.assign)
statename = "已转派/已抢单";
if (item.wostate >= (int)EnumEquipmentRunningState.deal)
statename = "已完成";
if (item.wostate == (int)EnumEquipmentRunningState.hangup)
statename = "已挂起";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.wostate.Equals(item.wostate) && x.channelcode == (int)EnumOrderState.巡检工单);
#region 条件 - 工单需要提醒时
if (item.wostate == 0 || (item.wostate == 3 && item.isreturnmsg == 1))
{
listmapwo = listmapwo.Where(x => x.wostate == item.wostate);
}
#endregion
//未读
var modelmap = listmapwo.FirstOrDefault();
var orderStateTitle = item.wostate == 3 ? "已完成" : "";
//var contentStr = "运维设备:" + equipmentname;
var contentStr = "检查事项:" + matternames;
if (item.quipmenttype == 0)
contentStr += "异常说明:" + item.checkcontent;
if (modelmap == null)
{
//未读
list_noread.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.巡检工单,
wotype = (int)EnumWoType.巡检,
wocode = item.wocode,
//proname = "设备运行工单:" + item.wocode + orderStateTitle + " 设备名称:" + equipmentname,
proname = "设备运行工单:" + item.wocode + orderStateTitle + " 检查事项:" + matternames,
title = item.wocode,
content = item.woname + (string.IsNullOrEmpty(item.wocontent) ? "" : ",工单内容:" + item.wocontent) + (string.IsNullOrEmpty(item.checkcontent) ? "" : ",异常说明:" + item.checkcontent), //运维内容
wostate = item.wostate,
statename = statename, //工单状态
checkby = item.checkby, //巡检人
createby = item.createby,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
#region 超时工单
foreach (var item in listetimeout)
{
string statename = string.Empty;
if (item.isover == true)
statename = "已完结";
else
statename = "否完结";
var listmapwo = listmap.Where(x => x.wocode.Equals(item.wocode) && x.channelcode == (int)EnumOrderState.超时工单);
var modelmap = listmapwo.FirstOrDefault();
if (modelmap == null)
{
//未读
list_noread.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.超时工单,
wotype = item.wotype,
wocode = item.wocode,
proname = "超时工单(" + Enum.GetName(typeof(EnumWoType), item.wotype) + "):" + item.wocode + ",延迟时长:" + item.times,
title = item.wocode,
content = "超时原因:" + item.timeoutreason, //超时原因
wostate = 99, //超时工单无需根据状态处理转派,故默认写个参数值99
statename = statename, //工单状态
createby = item.manager,
createtime = item.createtime,
isread = 0,
});
}
}
#endregion
#region 已读 - 注释
//自己看自己的
var listmaps = listmap.Where(x => x.readby == usercode).OrderByDescending(x => x.readtime).Take(topNum);
foreach (var item in listmaps)
{
string statename = string.Empty;
var woid = string.Empty;
string content = string.Empty;
if (item.wostate == (int)EnumWorkOrderState.create)
statename = "新建工单";
if (item.wostate == (int)EnumWorkOrderState.assign)
statename = "已转派/已抢单";
if (item.wostate >= (int)EnumWorkOrderState.deal)
statename = "已完成";
if (item.wostate == (int)EnumWorkOrderState.hangup)
statename = "已挂起";
//已读
list_read.Add(new MessageListDto
{
id = item.woid, //工单id
woid = item.woid, //工单id
channelcode = item.channelcode,
wotype = item.channelcode,
wocode = item.wocode,
proname = Enum.GetName(typeof(EnumOrderState), item.channelcode) + ":" + item.wocode,
title = item.wocode,
content = item.note, //保养内容
wostate = item.wostate,
statename = statename, //工单状态
checkby = item.readby, //保修人
createby = "",
createtime = item.readtime,
isread = 1,
});
}
#endregion
}
//降序排序,获取前50条,合并未读列表 OrderByDescending(x => x.createtime).Take(topNum)
list = list_read.Concat(list_noread).ToList();
//降序排序
list = list.OrderByDescending(x => x.createtime).ToList();
var obj = new
{
rows = list,
total_read = list_read.Count > topNum ? topNum : list_read.Count, //已读消息数
total = list_noread.Count, //未读消息数
};
return Success("获取成功", obj);
}
///
/// 消息通知 - 设备维修(报修工单) - old通过时间(不用)
///
///
[AllowAnonymous]
[HttpGet("getmessagelist2")]
public async Task GetMessagesList2(string stime)
{
if (string.IsNullOrEmpty(stime))
stime = DateTime.Now.ToLocalTime().ToString();
//服务器时间
DateTime nowtime = DateTime.Now.ToLocalTime();
var listrepair_base = await _wo_repair_baseRepository.Get(x => x.isdelete == 0 && x.createtime > Convert.ToDateTime(stime)); //x => x.isdelete == false && x.createtime >= Convert.ToDateTime(stime)
var listmaintain_base = await _wo_maintain_baserepository.Get(x => x.isdelete == false && x.createtime > Convert.ToDateTime(stime));
var listequipmentrunning = await _wo_equipmentrunningrepository.Get(x => x.isdelete == 0 && x.createtime > Convert.ToDateTime(stime));
var listequipment_info = (await _eqp_equipment_inforepository.Get(x => x.isdelete == 0)).ToList();
//检查事项
var listmatter = await _wo_mattersRepository.Get(x => x.isdelete == false);
var list = new List();
//维修工单
foreach (var item in listrepair_base)
{
string statename = string.Empty;
if (item.wostate < (int)EnumWorkOrderState.deal)
statename = "未完成";
if (item.wostate >= (int)EnumWorkOrderState.deal)
statename = "已完成";
if (item.wostate == (int)EnumWorkOrderState.hangup)
statename = "已挂起";
list.Add(new MessageListDto
{
id = item.id,
channelcode = (int)EnumOrderState.维修工单,
wocode = item.wocode,
proname = "维修工单:" + item.wocode, // + " " + item.proname,
title = item.wocode,
content = item.faultdescripe,
statename = statename, //工单状态
checkby = item.touser.ToString(),
createby = item.createuser,
createtime = item.createtime,
});
}
//保养工单
foreach (var item in listmaintain_base)
{
string statename = string.Empty;
if (item.wostate < (int)EnumWorkOrderState.deal)
statename = "未完成";
if (item.wostate >= (int)EnumWorkOrderState.deal)
statename = "已完成";
if (item.wostate == (int)EnumWorkOrderState.hangup)
statename = "已挂起";
list.Add(new MessageListDto
{
id = item.id,
channelcode = (int)EnumOrderState.保养工单,
wocode = item.wocode,
proname = "保养工单:" + item.wocode, // + " " + item.proname,
title = item.wocode,
content = item.maintaincontent, //保养内容
statename = statename, //工单状态
//checkby = item.dealby, //接单人(转派)
checkby = item.maintainuser.ToString(), //接单人(转派)
createby = item.createby,
createtime = item.createtime,
});
}
//设备运行工单
foreach (var item in listequipmentrunning)
{
#region 检查事项
var matternames = "";
if (item.matterids != null && item.matterids.Count() > 0)
{
var matterids = string.Join(",", item.matterids);
if (!string.IsNullOrEmpty(matterids))
{
var mattermodel = listmatter.FirstOrDefault(x => matterids.Contains(x.id));
matternames = mattermodel != null ? mattermodel.matter : "";
}
}
#endregion
#region
//var modelequname = listequipment_info.FirstOrDefault(x => item.equipmentid.Contains(x.id));
//string equipmentname = string.Empty;
//equipmentname = modelequname != null ? modelequname.equipment_name : "";
#endregion
string statename = string.Empty;
if (item.wostate < (int)EnumEquipmentRunningState.deal)
statename = "未完成";
if (item.wostate >= (int)EnumEquipmentRunningState.deal)
statename = "已完成";
if (item.wostate == (int)EnumEquipmentRunningState.hangup)
statename = "已挂起";
list.Add(new MessageListDto
{
id = item.id,
channelcode = (int)EnumOrderState.巡检工单,
wocode = item.wocode,
//proname = "设备运行工单:" + item.wocode + " " + equipmentname,
proname = "设备运行工单:" + item.wocode + " 检查事项:" + matternames,
title = item.wocode,
content = "上次运维内容:" + item.checkcontent, //运维内容
statename = statename, //工单状态
checkby = item.checkby, //接单人(转派)
createby = item.createby,
createtime = item.createtime,
});
}
//降序排序
list = list.OrderByDescending(x => x.createtime).ToList();
var obj = new
{
rows = list,
nowtime = nowtime, //当前时间
total = list.Count, //消息数
};
return Success("获取成功", obj);
}
[HttpGet("getbxmessagelist")]
public async Task GetBxMessageList(int isread) {
string nowusercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
var listmap = await _wo_order_user_maprepository.Get(x => x.channelcode == 1 && x.readby == nowusercode);
var list= new List();
if (isread == 0)
{
var listnoreadmaps = listmap.Where(x => x.isread == 0).OrderByDescending(x => x.readtime).Take(50);
foreach (var item in listnoreadmaps)
{
list.Add(new MessageListDto
{
id = item.id,
woid = item.woid,
channelcode = (int)EnumOrderState.维修工单,
wotype = (int)EnumWoType.维修,
wocode = item.wocode,
proname = "维修工单:" + item.wocode, // + " " + item.proname,
title = "待处理提醒",
content = item.note,
wostate = item.wostate,
statename = "", //工单状态
checkby = "", //接单人
createby = "",
isread = 0,
});
}
}
else {
var listreadmaps = listmap.Where(x => x.isread == 1).OrderByDescending(x => x.readtime).Take(50);
foreach (var item in listreadmaps)
{
list.Add(new MessageListDto
{
id = item.id,
woid = item.id,
channelcode = (int)EnumOrderState.维修工单,
wotype = (int)EnumWoType.维修,
wocode = item.wocode,
proname = "维修工单:" + item.wocode, // + " " + item.proname,
title = item.wocode,
content = item.note,
wostate = item.wostate,
statename = "", //工单状态
checkby = "", //接单人
createby = "",
isread = 1,
});
}
}
var obj = new
{
rows = list,
total=list.Count
};
return Success("获取成功", obj);
}
[HttpGet("getyd")]
public async Task GetYdList(string id) {
string nowusercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
// string nowusercode="1003";
var listmap = await _wo_order_user_maprepository.Get(x => x.channelcode == 1 && x.readby == nowusercode && x.id==id);
if (listmap != null)
{
var modelmap = listmap.FirstOrDefault();
if (modelmap != null)
{
modelmap.isread = 1;
modelmap.isnotice = 1;
modelmap.readtime = DateTime.Now;
bool b = await _wo_order_user_maprepository.UpdateOne(modelmap);
}
return Success("已读成功");
}
else {
return Success( nowusercode+listmap.ToJson());
}
}
///
/// 消息通知类型
///
public enum EnumOrderState
{
维修工单 = 1,
保养工单 = 2,
巡检工单 = 3,
超时工单 = 4,
配送工单 = 5,
配送计划工单 = 6
}
///
/// 工单类型:1报修,2保养,3巡检,5配送
///
public enum EnumWoType
{
维修 = 1,
保养 = 2,
巡检 = 3,
配送 = 5,
配送计划 = 6
}
}
}