using IWareCC.CacheInfo;
using IWareCC.Extend;
using IWareCC.ORM;
using IWareCC.Properties;
using IWareCommon.Enum.Common;
using IWareCommon.Enum.Rgv;
using IWareCommon.Enum.Srm;
using IWareCommon.Help;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace IWareCC.Task
{
public class TaskService
{
private static object Lock = new object();
private TaskService() { }
private static TaskService Instance = null;
///
/// 获取单例的方法
///
/// 用户服务的单例实体
public static TaskService GetInstance()
{
if (Instance == null)
{
lock (Lock)
{
if (Instance == null)
{
Instance = new TaskService();
}
}
}
return Instance;
}
///
/// 发送主任务
///
/// 任务号
/// 起始位置
/// 目标位置
/// 任务类型
/// 托盘类型
/// 出库类型
///
public bool CreateMainTask(int taskId, string sourcePlce, string toPlace, int taskType, int containerType, int storageno, int height, string containerName, ref string errMsg, int wmsTaskId)
{
try
{
if (!CheckDevIsOK(taskType, storageno, containerType, ref errMsg))
{
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "设备条件不满足," + errMsg);
return false;
}
// LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendTask", "收到任务id={0},sourcePlce={1},toPlace={2},taskType={3}", taskId, sourcePlce, toPlace, taskType);
using (DbModel db = new DbModel())
{
#region 增加是否重复了发送了任务 [Editby shaocx,2024-10-14]
var _query_taskno = taskId.ToString();
var isExist = db.MainTasks.Where(x => x.wmsTaskId == wmsTaskId && x.taskno == _query_taskno).FirstOrDefault();
if (isExist != null)
{
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "重复任务:" + taskId);
return true;
}
#endregion
MainTask task = new MainTask()
{
taskno = taskId.ToString(),
wmsTaskId = wmsTaskId,
containertype = containerType,
taskcode = NumberHelp.GenerateRandomCodeForMainTask(),
decompositiontimes = 0,
decompositiontime = DateTime.Now,
deliverytype = 0,
priority = 1,//默认为1,原先是100 【EditBy shaocx,2022-10-21】
sendtime = DateTime.Now,
sourceplace = sourcePlce,
toplace = toPlace,
tasktype = taskType,
status = 0,//EMainTaskStatus.未分解
finishstatus = 0,//,使用枚举 EMainTaskFinishstatus
heighttype = height,
storageno = storageno,
containername = containerName
};
db.MainTasks.Add(task);
if (task.tasktype == (int)EMainTaskType.常规出库)//检查设备是否空闲再下发
{
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "收到出库任务id={0},sourcePlce={1},toPlace={2},taskType={3}", taskId, sourcePlce, toPlace, taskType);
var chaitask = db.PartTasks.OrderBy(x => x.updatetime).FirstOrDefault(x => x.eqtype == (int)EPartTaskType.堆垛机任务 && x.isfinished == (int)EYesOrNo.否 && x.storageno == storageno && x.maintasktype == (int)EMainTaskType.常规出库);
if (chaitask != null && chaitask.id > 0)
{
var mainTask = db.MainTasks.Where(x => x.id == chaitask.maintaskid).FirstOrDefault();//增加显示WCS任务号 [EditBy shaocx,2022-09-26]
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "收到出库任务id={0},出库任务不满足", taskId);
errMsg = "收到出库任务id" + taskId + ",出库任务不满足,前面有未结束的堆垛机任务,未结束的WCS任务号:" + mainTask.taskno;
return false;
}
}
if (task.tasktype == (int)EMainTaskType.入库拆盘)//检查设备是否空闲再下发
{
int eqqid = 0;
if (containerType == (int)EContainerType.大托盘)
{
eqqid = (int)EDeviceId.大盘拆盘机;
}
else
{
eqqid = (int)EDeviceId.小盘拆盘机;
}
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "收到拆盘任务id={0},sourcePlce={1},toPlace={2},taskType={3}", taskId, sourcePlce, toPlace, taskType);
var chaitask = db.PartTasks.OrderBy(x => x.updatetime).FirstOrDefault(x => x.eqtype == (int)EPartTaskType.拆叠机任务 && x.isfinished == (int)EYesOrNo.否 && x.eqid == eqqid && x.maintasktype == (int)EMainTaskType.入库拆盘);
if (chaitask != null && chaitask.id > 0)
{
var mainTask = db.MainTasks.Where(x => x.id == chaitask.maintaskid).FirstOrDefault();//增加显示WCS任务号 [EditBy shaocx,2022-09-26]
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "收到拆盘任务id={0},拆盘任务不满足", taskId);
errMsg = "收到拆盘任务id" + taskId + ",拆盘任务不满足,前面有未结束的任务,未结束的WCS任务号:" + mainTask.taskno;
return false;
}
}
if (task.tasktype == (int)EMainTaskType.常规入库)
{
task.heighttype = 0;
task.toplace = "0";
}
else
{
if (string.IsNullOrEmpty(toPlace))
{
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "toPlace为空");
errMsg = "目标位不能为空";
return false;
}
}
if (task.tasktype == (int)EMainTaskType.出库叠盘)
{
var chaitask = db.PartTasks.FirstOrDefault(x => x.toplace == task.sourceplace && x.maintasktype == task.tasktype && x.isfinished == 0);
if (chaitask != null)
{
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "存在chaitask");
errMsg = "已经存在出库叠盘任务";
return false;
}
}
if (task.tasktype == (int)EMainTaskType.空托出库 || task.tasktype == (int)EMainTaskType.满空托回库)
{
if (task.containertype == (int)EContainerType.小托盘)
{
if (task.tasktype == (int)EMainTaskType.空托出库)
{
var cdtask = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.小盘拆盘机);
if (cdtask != null)//代表已经开始执行
{
cdtask.status = 2;
}
}
else
{
var cdtask = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.小盘叠盘机);
if (cdtask != null)
{
cdtask.status = 2;
}
}
}
else
{
if (task.tasktype == (int)EMainTaskType.空托出库)
{
var cdtask = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.大盘拆盘机);
if (cdtask != null)
{
cdtask.status = 2;
}
}
else
{
var cdtask = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.大盘叠盘机);
if (cdtask != null)
{
cdtask.status = 2;
}
}
}
}
bool bl = db.SaveChanges() > 0 ? true : false;
if (!bl)
{
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "写入数据库失败!");
errMsg = "写入数据库失败";
}
return bl;
}
}
catch (Exception ex)
{
LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", ex.Message);
errMsg = "出现异常:" + ex.Message;
return false;
}
}
public static string GenerateRandomCode()
{
var result = new StringBuilder();
for (var i = 0; i < 5; i++)
{
var r = new Random(Guid.NewGuid().GetHashCode());
result.Append(r.Next(0, 10));
}
return result.ToString();
}
///
/// 检查设备是否满足下发任务的条件
///
///
private bool CheckDevIsOK(int type, int storageno, int contype, ref string errMsg)
{
bool b1 = false;
errMsg = "默认为FALSE";
//检验所有的设备是否在线
switch (type)
{
case (int)EMainTaskType.常规入库:
b1 = IsDevOk(1, storageno, contype, ref errMsg);
break;
case (int)EMainTaskType.空托出库:
b1 = IsDevOk(1, storageno, contype, ref errMsg);
break;
case (int)EMainTaskType.组盘出库:
b1 = IsDevOk(1, storageno, contype, ref errMsg);
break;
case (int)EMainTaskType.常规出库:
b1 = IsDevOk(2, storageno, contype, ref errMsg);
break;
case (int)EMainTaskType.余料回库:
b1 = IsDevOk(2, storageno, contype, ref errMsg);
break;
case (int)EMainTaskType.满空托回库:
b1 = IsDevOk(2, storageno, contype, ref errMsg);
break;
case (int)EMainTaskType.移库:
b1 = IsDevOk(3, storageno, contype, ref errMsg);
break;
case (int)EMainTaskType.出库叠盘:
b1 = IsDevOk(4, storageno, contype, ref errMsg);
break;
case (int)EMainTaskType.入库拆盘:
b1 = IsDevOk(5, storageno, contype, ref errMsg);
break;
default:
b1 = false;
errMsg = "任务类型不合法";
break;
}
return b1;
}
public bool IsDevOk(int type, int storageno, int contype, ref string errMsg)
{
bool bl = false;
errMsg = "默认返回FALSE";
var cy = CacheEntity.Conveyors.FirstOrDefault();
var srm1 = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == "Srm1");
var srm2 = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == "Srm2");
var rgv1 = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == "Rgv1");
var rgv2 = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == "Rgv2");
switch (type)
{
case 1:
#region 入库测检测设备
if (cy.IsOnline && rgv1.IsOnline)
{
if (storageno == 1)
{
if (srm1.IsOnline)
{
bl = true;
}
else
{
bl = false;
errMsg = "1号堆垛机不在线";
}
}
else
{
if (srm2.IsOnline)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号堆垛机不在线";
}
}
}
else
{
bl = false;
errMsg = "输送线或1号RGV不在线";
}
//检验主要设备是否报警
if (!rgv1.RAlarm)
{
if (storageno == 1)
{
if (!srm1.RAlarm)
{
bl = true;
}
else
{
bl = false;
errMsg = "1号堆垛机有报警";
}
}
else
{
if (!srm2.RAlarm)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号堆垛机有报警";
}
}
}
else
{
bl = false;
errMsg = "1号RGV有报警";
}
//检验主要设备模式是否正确
if (rgv1.RMode == (int)ERgvMode.连机自动模式)
{
if (storageno == 1)
{
if (srm1.RMode == (int)ESrmMode.自动模式)
{
bl = true;
}
else
{
bl = false;
errMsg = "1号堆垛机是非自动模式";
}
}
else
{
if (srm2.RMode == (int)ESrmMode.自动模式)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号堆垛机是非自动模式";
}
}
}
else
{
bl = false;
errMsg = "1号RGV是非连机自动模式";
}
#endregion
break;
case 2:
#region 出库测检测设备
if (cy.IsOnline && rgv2.IsOnline)
{
if (storageno == 1)
{
if (srm1.IsOnline)
{
bl = true;
}
else
{
bl = false;
errMsg = "1号堆垛机不在线";
}
}
else
{
if (srm2.IsOnline)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号堆垛机不在线";
}
}
}
else
{
bl = false;
errMsg = "输送线或2号RGV不在线";
}
//检验主要设备是否报警
if (!rgv2.RAlarm)
{
if (storageno == 1)
{
if (!srm1.RAlarm)
{
bl = true;
}
else
{
bl = false;
errMsg = "1号堆垛机有报警";
}
}
else
{
if (!srm2.RAlarm)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号堆垛机有报警";
}
}
}
else
{
bl = false;
errMsg = "2号RGV有报警";
}
//检验主要设备模式是否正确
if (rgv2.RMode == (int)ERgvMode.连机自动模式)
{
if (storageno == 1)
{
if (srm1.RMode == (int)ESrmMode.自动模式)
{
bl = true;
}
else
{
bl = false;
errMsg = "1号堆垛机是非自动模式";
}
}
else
{
if (srm2.RMode == (int)ESrmMode.自动模式)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号堆垛机是非自动模式";
}
}
}
else
{
bl = false;
errMsg = "2号RGV是非连机自动模式";
}
#endregion
break;
case 3:
#region 移库检测设备
if (storageno == 1)
{
if (srm1.IsOnline)
{
bl = true;
}
else
{
bl = false;
errMsg = "1号堆垛机不在线";
}
}
else
{
if (srm2.IsOnline)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号堆垛机不在线";
}
}
//检验主要设备是否报警
if (storageno == 1)
{
if (!srm1.RAlarm)
{
bl = true;
}
else
{
bl = false;
errMsg = "1号堆垛机有报警";
}
}
else
{
if (!srm2.RAlarm)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号堆垛机有报警";
}
}
//检验主要设备模式是否正确
if (storageno == 1)
{
if (srm1.RMode == (int)ESrmMode.自动模式)
{
bl = true;
}
else
{
bl = false;
errMsg = "1号堆垛机是非自动模式";
}
}
else
{
if (srm2.RMode == (int)ESrmMode.自动模式)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号堆垛机是非自动模式";
}
}
#endregion
break;
case 4:
if (cy.IsOnline && rgv2.IsOnline)
{
bl = true;
}
else
{
bl = false;
errMsg = "输送线或2号RGV不在线";
}
//检验主要设备是否报警
if (!rgv2.RAlarm)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号RGV有报警";
}
//检验主要设备模式是否正确
if (rgv2.RMode == (int)ERgvMode.连机自动模式)
{
bl = true;
}
else
{
bl = false;
errMsg = "2号RGV是非连机自动模式";
}
if (contype == 1)
{
var cd1 = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == "ChaiDei2");
string msg = "";
bl = cd1.CanSendTask(cd1.DeviceId, out msg);
if (bl == false) errMsg = "下发失败:" + msg;
}
else
{
var cd2 = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == "ChaiDei1");
string msg = "";
bl = cd2.CanSendTask(cd2.DeviceId, out msg);
if (bl == false) errMsg = "下发失败:" + msg;
}
break;
case 5:
if (contype == 1)
{
var cd1 = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == "ChaiDei3");
string msg = "";
bl = cd1.CanSendTask(cd1.DeviceId, out msg);
if (bl == false) errMsg = "下发失败:" + msg;
}
else
{
var cd2 = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == "ChaiDei4");
string msg = "";
bl = cd2.CanSendTask(cd2.DeviceId, out msg);
if (bl == false) errMsg = "下发失败:" + msg;
}
break;
}
return bl;
}
///
/// 获取任务是否完成(0带表未完成;1代表完成;2代表外形检测不通过)
///
///
/// WMS任务ID
///
public int GetTaskIsFinishOrCheckOk(int taskId, int wmsTaskId)
{
try
{
using (DbModel db = new DbModel())
{
string taskid = taskId.ToString();
MainTask maintask = null;
if (wmsTaskId != 0)
{
maintask = db.MainTasks.Where(x => x.taskno == taskid && x.wmsTaskId == wmsTaskId).OrderByDescending(x => x.id).FirstOrDefault();
}
else
{
maintask = db.MainTasks.Where(x => x.taskno == taskid).OrderByDescending(x => x.id).FirstOrDefault();
}
if (maintask != null)
{
#region 判定空托出库或者满盘回库的任务是否完成,完成的话则不再主动发送需要空头或满托的接口
//,使用枚举 EMainTaskFinishstatus
if (maintask.finishstatus == 1 && (maintask.tasktype == (int)EMainTaskType.空托出库 || maintask.tasktype == (int)EMainTaskType.满空托回库))
{
ChaiDieTransport cdt = new ChaiDieTransport();
if (maintask.tasktype == (int)EMainTaskType.空托出库)
{
if (maintask.containertype == (int)EContainerType.小托盘)
{
cdt = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.小盘拆盘机);
}
else
{
cdt = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.大盘拆盘机);
}
}
else
{
if (maintask.containertype == (int)EContainerType.小托盘)
{
cdt = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.小盘叠盘机);
}
else
{
cdt = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.大盘叠盘机);
}
}
if (cdt != null && cdt.id > 0)
{
cdt.status = 2;
db.SaveChanges();
}
}
#endregion
return maintask.finishstatus;//,使用枚举 EMainTaskFinishstatus
}
else
{
return 0;
}
}
}
catch (Exception ex)
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetTaskIsFinishOrCheckOk", ex.Message);
return 0;
}
}
public BackData GetCheckIsNeedOrSendcontainer()
{
try
{
using (DbModel db = new DbModel())
{
var task = db.ChaiDieTransports.OrderBy(x => x.updatetime).ToList().FirstOrDefault(x => x.status == 0);
if (task != null)
{
task.updatetime = DateTime.Now;
db.SaveChanges();
int containertype = 1;
if (task.devname == "小盘拆盘机" || task.devname == "小盘叠盘机")
{
containertype = 1;
}
else
{
containertype = 2;
}
return new BackData()
{
ContainerType = containertype,
DevId = task.dev,
DevName = task.devname,
Type = task.type,
Id = task.id
};
}
else
{
return null;
}
}
}
catch (Exception ex)
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetCheckIsNeedOrSendcontainer", ex.Message);
return null;
}
}
///
/// 删除所有任务
///
///
///
public bool DealAllPartTask(string containerName)
{
try
{
using (DbModel db = new DbModel())
{
bool b1 = false;
string msg = "";
var task = db.PartTasks.Where(x => x.containername == containerName && x.isfinished == 0).ToList();
if (task != null && task.Count > 0)
{
task.ForEach(x =>
{
if (x.eqtype == (int)EPartTaskType.堆垛机任务 && x.isreleased == 1)
{
var srm = CacheEntity.Srms.FirstOrDefault(y => y.DeviceId == x.eqid);
if (srm.RAlarm || srm.RMode != (int)ESrmMode.自动模式)
{
b1 = srm.SendDelTask(x.eqid, int.Parse(x.taskcode), out msg);
if (!b1)
{
b1 = srm.SendDelTask(x.eqid, int.Parse(x.taskcode), out msg);
}
}
else
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealAllPartTask", "设备任务删除失败,只有设备报警或者非自动才允许删除");
}
}
else
{
b1 = true;
}
if (x.eqtype == (int)EPartTaskType.Rgv任务 && x.isreleased == 1)
{
var rgv = CacheEntity.Rgvs.FirstOrDefault(y => y.DeviceId == x.eqid);
if (rgv.RAlarm || rgv.RMode != (int)ERgvMode.连机自动模式)
{
b1 = rgv.DeleteTask(x.eqid, int.Parse(x.taskcode), out msg);
if (!b1)
{
b1 = rgv.DeleteTask(x.eqid, int.Parse(x.taskcode), out msg);
}
}
else
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealAllPartTask", "设备任务删除失败,只有设备报警或者非自动才允许删除");
}
}
else
{
b1 = true;
}
if (x.eqtype == (int)EPartTaskType.输送线任务 && x.isreleased == 1)
{
string name = "Line" + x.sourceplace;
var conve = CacheEntity.Conveyors.FirstOrDefault(y => y.ConveyorName == name);
b1 = conve.DeleteTask(x.eqid, out msg);
if (!b1)
{
b1 = conve.DeleteTask(x.eqid, out msg);
}
string toname = "";
if (x.sourceplace == "1008" || x.sourceplace == "1003" || x.sourceplace == "1001")
{
toname = "Line" + x.sourceplace;
}
else
{
if (x.toplace == "1011" || x.toplace == "1005")//此两处要判断的是后一位的位置的光电信号
{
toname = "Line" + (int.Parse(x.toplace) + 1).ToString();
}
else
{
toname = "Line" + x.toplace;
}
}
var TConveyor = CacheEntity.Conveyors.FirstOrDefault(y => y.ConveyorName == toname);
if (TConveyor.RTaskNo == int.Parse(x.taskcode))
{
if (!TConveyor.DeleteTask(x.eqid, out msg))
{
TConveyor.DeleteTask(x.eqid, out msg);
}
}
}
else
{
b1 = true;
}
if (b1)
{
x.isreleased = 1;
x.isfinished = 1;
x.nexthandel = (int)ENextHandelTask.已全部完成;
x.filereason = "任务已经被强制删除!";
}
});
if (b1)
{
var maintask = db.MainTasks.OrderByDescending(x => x.id).FirstOrDefault(x => x.containername == containerName);
if (maintask != null && maintask.id > 0)
{
maintask.status = 1;//EMainTaskStatus.已分解,使用枚举 EMainTaskFinishstatus
maintask.finishstatus = 1;
maintask.decompositiontimes = 1;
}
db.SaveChanges();
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
catch (Exception ex)
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealPartTask", ex.Message);
return false;
}
}
///
/// 设置主任务任务权重
///
///
///
///
public bool SetMainTaskPriority(string taskno, int priority, int wmsTaskId)
{
try
{
using (DbModel db = new DbModel())
{
MainTask task = null;
if (wmsTaskId != 0)
{
task = db.MainTasks.Where(x => x.taskno == taskno && x.wmsTaskId == wmsTaskId).OrderByDescending(x => x.sendtime).FirstOrDefault();
}
else
{
task = db.MainTasks.Where(x => x.taskno == taskno).OrderByDescending(x => x.sendtime).FirstOrDefault();
}
if (task == null)
{
return false;
}
task.priority = priority;
if (db.SaveChanges() < 1)
{
Thread.Sleep(1000);
db.SaveChanges();
}
return true;
}
}
catch
{
return false;
}
}
///
/// 设置子任务任务权重
///
///
///
///
public bool SetPartTaskPriority(string taskcode, int priority)
{
try
{
using (DbModel db = new DbModel())
{
var task = db.PartTasks.Where(x => x.taskcode == taskcode).OrderByDescending(x => x.createtime).FirstOrDefault();
if (task == null)
{
return false;
}
task.priority = priority;
if (db.SaveChanges() < 1)
{
Thread.Sleep(1000);
db.SaveChanges();
}
return true;
}
}
catch
{
return false;
}
}
///
/// 处理任务
///
/// 要处理的子任务号
/// 处理类型(1:强制完成;2:删除任务)
///
public bool DealPartTask(int taskId, int type)
{
try
{
using (DbModel db = new DbModel())
{
var task = db.PartTasks.FirstOrDefault(x => x.id == taskId);
if (task != null)
{
if (type == 1)
{
task.isreleased = 1;
task.isfinished = 1;
if (task.nexthandel == (int)ENextHandelTask.已全部完成)
{
var maintask = db.MainTasks.OrderByDescending(x => x.id).FirstOrDefault(x => x.id == task.maintaskid);
if (maintask != null)
{
maintask.finishstatus = 1;//,使用枚举 EMainTaskFinishstatus
}
}
}
else if (type == 2)
{
db.PartTasks.Remove(task);
}
db.SaveChanges();
return true;
}
else
{
return false;
}
}
}
catch (Exception ex)
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealPartTask", ex.Message);
return false;
}
}
internal List GetDevAlert(int pageIndex, int pagecount, out int totalNum, Dictionary parm)
{
try
{
using (DbModel db = new DbModel())
{
var sqlParamsCount = new List();
var sqlParamsData = new List();
string sqlCount = "SELECT COUNT(*) FROM DevAlert WHERE 1=1";
string sqlData = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY finishtime desc ) AS ROWNUM from DevAlert where 1=1";
if (parm.Count > 0)
{
if (!parm.Keys.Contains("?"))
{
foreach (var key in parm.Keys)
{
if (parm[key] != null && !string.IsNullOrEmpty(parm[key] + ""))
{
sqlParamsCount.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%"));
sqlParamsData.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%"));
sqlCount += string.Format(" AND {0} LIKE {1}", key, "@S_" + key);
sqlData += string.Format(" AND {0} LIKE {1}", key, "@S_" + key);
}
}
}
}
pageIndex = pageIndex < 1 ? 1 : pageIndex;
pagecount = pagecount < 1 ? 10 : pagecount;
sqlParamsData.Add(new SqlParameter("@PI_Start", (pageIndex - 1) * pagecount + 1));
sqlParamsData.Add(new SqlParameter("@PI_End", pageIndex * pagecount));
sqlData += string.Format(") t Where t.ROWNUM between {0} and {1} ", "@PI_Start", "@PI_End");
totalNum = db.Database.SqlQuery(sqlCount, sqlParamsCount.ToArray()).ToList()[0];
var datas = db.Database.SqlQuery(sqlData, sqlParamsData.ToArray()).ToList();
if (datas != null)
{
return datas;
}
else
{
return new List();
}
}
}
catch (Exception ex)
{
totalNum = 0;
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetDevAlert", ex.Message);
return new List();
}
}
internal List GetPartTask(int pageIndex, int pagecount, out int totalNum, Dictionary parm)
{
try
{
using (DbModel db = new DbModel())
{
var sqlParamsCount = new List();
var sqlParamsData = new List();
string sqlCount = "SELECT COUNT(*) FROM PartTask WHERE 1=1";
string sqlData = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY maintaskid ) AS ROWNUM from PartTask where 1=1";
if (parm.Count > 0)
{
if (!parm.Keys.Contains("?"))
{
foreach (var key in parm.Keys)
{
if (parm[key] != null && !string.IsNullOrEmpty(parm[key] + ""))
{
sqlParamsCount.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%"));
sqlParamsData.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%"));
sqlCount += string.Format(" AND {0} LIKE {1}", key, "@S_" + key);
sqlData += string.Format(" AND {0} LIKE {1}", key, "@S_" + key);
}
}
}
}
pageIndex = pageIndex < 1 ? 1 : pageIndex;
pagecount = pagecount < 1 ? 10 : pagecount;
sqlParamsData.Add(new SqlParameter("@PI_Start", (pageIndex - 1) * pagecount + 1));
sqlParamsData.Add(new SqlParameter("@PI_End", pageIndex * pagecount));
sqlData += string.Format(") t Where t.ROWNUM between {0} and {1} ", "@PI_Start", "@PI_End");
totalNum = db.Database.SqlQuery(sqlCount, sqlParamsCount.ToArray()).ToList()[0];
var datas = db.Database.SqlQuery(sqlData, sqlParamsData.ToArray()).ToList();
if (datas != null)
{
return datas;
}
else
{
return new List();
}
}
}
catch (Exception ex)
{
totalNum = 0;
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetPartTask", ex.Message);
return new List();
}
}
}
}