using EnumType;
using IWareDataAccess.EF;
using IWareDataAccess.Entity.Base;
using IWareDataAccess.Entity.Order;
using IWareDataAccess.Helper;
using Models.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace IWareDataAccess.Order.INORDER
{
public static class InOrderSqlFunc
{
///
/// 搜索表
///
///
///
///
public static List Search(InOrderWebEntity webEntity, int page, int onePageNum, out string msg)
{
msg = "";
using (Model edm = new Model())
{
var f = PredicateBuilder.True();
//便利所有属性
Type type = webEntity.GetType();
foreach (var i in type.GetProperties())
{
object v = Helper.Helper.GetFieldValueByName(webEntity, i.Name);
if (i.PropertyType == typeof(String))
{
string value;
if (v != null)
{
value = v.ToString();
f = f.And(x => Helper.Helper.GetFieldValueByName(x, i.Name) != null ? Helper.Helper.GetFieldValueByName(x, i.Name).ToString().Contains(value) : false);
}
}
else if (i.PropertyType == typeof(DateTime?))
{
if (v != null)
{
DateTime value = DateTime.Parse(v.ToString());
if (i.Name == "updateTimeStart")
{
f = f.And(x => x.UPDATETIME > value);
}
if (i.Name == "updateTimeEnd")
{
f = f.And(x => x.UPDATETIME < value);
}
//执行时间
if (i.Name == "doTimeStart")
{
f = f.And(x => x.DOTIME > value);
}
if (i.Name == "doTimeEnd")
{
f = f.And(x => x.DOTIME < value);
}
}
}
else
{
if (v != null)
{
f = f.And(x => Object.Equals(Helper.Helper.GetFieldValueByName(x, i.Name), v));
}
}
}
List list = edm.ORDER_INORDER.Where(f.Compile()).Skip((page - 1) * onePageNum).Take(onePageNum).ToList();
return list;
}
}
///
/// 搜索视图
///
///
///
///
public static List SearchView(Expression> f, int page, int onePageNum, out string msg)
{
msg = "";
using (Model edm = new Model())
{
//var f = PredicateBuilder.True();
////便利所有属性
//Type type = webEntity.GetType();
//foreach (var i in type.GetProperties())
//{
// object v = Helper.Helper.GetFieldValueByName(webEntity, i.Name);
// if (i.PropertyType == typeof(String))
// {
// string value;
// if (v != null)
// {
// value = v.ToString();
// f = f.And(x => Helper.Helper.GetFieldValueByName(x, i.Name) != null ? Helper.Helper.GetFieldValueByName(x, i.Name).ToString().Contains(value) : false);
// }
// }
// else if (i.PropertyType == typeof(DateTime?))
// {
// if (v != null)
// {
// DateTime value = DateTime.Parse(v.ToString());
// if (i.Name == "updateTimeStart")
// {
// f = f.And(x => x.updateTime > value);
// }
// if (i.Name == "updateTimeEnd")
// {
// f = f.And(x => x.updateTime < value);
// }
// //执行时间
// if (i.Name == "doTimeStart")
// {
// f = f.And(x => x.doTime > value);
// }
// if (i.Name == "doTimeEnd")
// {
// f = f.And(x => x.doTime < value);
// }
// }
// }
// else
// {
// if (v != null)
// {
// f = f.And(x => Object.Equals(Helper.Helper.GetFieldValueByName(x, i.Name), v));
// }
// }
//}
List list = edm.View_ORDER_INORDER.Where(f.Compile()).Skip((page - 1) * onePageNum).Take(onePageNum).ToList();
return list;
}
}
///
/// 搜索数量
///
///
///
///
public static int SearchViewNum(Expression> f)
{
using (Model edm = new Model())
{
//var f = PredicateBuilder.True();
////便利所有属性
//Type type = webEntity.GetType();
//foreach (var i in type.GetProperties())
//{
// object v = Helper.Helper.GetFieldValueByName(webEntity, i.Name);
// if (i.PropertyType == typeof(String))
// {
// string value;
// if (v != null)
// {
// value = v.ToString();
// f = f.And(x => Helper.Helper.GetFieldValueByName(x, i.Name) != null ? Helper.Helper.GetFieldValueByName(x, i.Name).ToString().Contains(value) : false);
// }
// }
// else if (i.PropertyType == typeof(DateTime?))
// {
// if (v != null)
// {
// DateTime value = DateTime.Parse(v.ToString());
// if (i.Name == "updateTimeStart")
// {
// f = f.And(x => x.updateTime > value);
// }
// if (i.Name == "updateTimeEnd")
// {
// f = f.And(x => x.updateTime < value);
// }
// //执行时间
// if (i.Name == "doTimeStart")
// {
// f = f.And(x => x.doTime > value);
// }
// if (i.Name == "doTimeEnd")
// {
// f = f.And(x => x.doTime < value);
// }
// }
// }
// else
// {
// if (v != null)
// {
// f = f.And(x => Object.Equals(Helper.Helper.GetFieldValueByName(x, i.Name), v));
// }
// }
//}
int num = edm.View_ORDER_INORDER.Where(f.Compile()).Count();
return num;
}
}
///
/// 添加修改入库计划
///
///
///
public static bool AddOrUpdate(InOrderWebEntity webEntity, out string msg)
{
msg = "";
using (Model edm = new Model())
{
ORDER_INORDER order = new ORDER_INORDER();
order = edm.ORDER_INORDER.FirstOrDefault(x => x.INORDERCODE == webEntity.inOrderCode);
if (order == null)
{
order = new ORDER_INORDER();
order.CreateTime = DateTime.Now;
//order.ORDERSTATUS ="未完成";
}
order.INORDERCODE = webEntity.inOrderCode;
BASE_ITEM item = edm.BASE_ITEM.FirstOrDefault(x => x.ITEMNAME == webEntity.itemName);
if (item != null)
{
//msg = "无此零件";
//return false;
order.ITEMID = item.ID;
}
//order.BASE_ITEM = item;
order.UPDATETIME = DateTime.Now;
order.ORDERTYPE = webEntity.orderType ?? order.ORDERTYPE;
order.TOTALNUM = webEntity.totalNum ?? order.TOTALNUM;
//校验已绑任务记录与当前入库单是否匹配
var taskRecordList = edm.TASK_RECORD.Where(x => x.INORDERID == order.ID && x.ITEMID != order.ITEMID);
foreach (var i in taskRecordList)
{
i.INORDERID = null;//不匹配的自动去除
}
//查询任务统计数量
//order.DONENUM = webEntity.doneNum ?? order.DONENUM;
var taskRecord = edm.TASK_RECORD.Where(x => x.INORDERID == order.ID && x.ITEMID == order.ITEMID).ToList();
int doneNum = taskRecord.Sum(x => x.ITEMCOUNT);
order.DONENUM = doneNum;
order.UNLINENUM = webEntity.unLineNum ?? order.UNLINENUM;
order.ORDERSTATUS = webEntity.orderStatus ?? order.ORDERSTATUS;
order.AllFinishedNum = (order.DONENUM ?? 0) + (order.UNLINENUM ?? 0);//总完工数
order.IsSatisfyAudit = false;
//通过数量变化状态
if (order.TOTALNUM <= order.AllFinishedNum)
{
//order.ORDERSTATUS = "完工";
order.IsSatisfyAudit = true;
}
else if (0 < order.AllFinishedNum)
{
//order.ORDERSTATUS = "执行中";
}
else
{
var changeStatus = InOrderStatusEnum.新建;
order.OrderStatusId = (int)changeStatus;
order.ORDERSTATUS = changeStatus.ToString();
}
SYS_USER user = edm.SYS_USER.FirstOrDefault(x => x.USERNAME == webEntity.userName);
if (user != null)
{
order.CREATORID = user.ID;
}
order.ISFINISH = webEntity.isFinsish ?? order.ISFINISH;
order.DOTIME = webEntity.doTime ?? order.DOTIME;
order.ENABLE = webEntity.enable ?? order.ENABLE;
if (item != null)
{
order.TOTALWEIGHT = item.WEIGHT * order.TOTALNUM ?? order.TOTALWEIGHT;
}
order.CLASSNO = webEntity.classNo ?? order.CLASSNO;
//order.STATUS = webEntity.status ?? order.STATUS;
SYS_USER sender = edm.SYS_USER.FirstOrDefault(x => x.USERNAME == webEntity.senderName);
if (sender != null)
{
order.SENDERID = sender.ID;
}
SYS_USER checker = edm.SYS_USER.FirstOrDefault(x => x.USERNAME == webEntity.checkerName);
if (checker != null)
{
order.CHECKERID = checker.ID;
}
edm.ORDER_INORDER.AddOrUpdateExtension(order);
if (edm.SaveChanges() > 0)
{
return true;
}
else
{
msg = "保存失败";
return false;
}
}
}
///
/// 修改入库计划 状态
///
///
///
public static bool UpdateStatus(InOrderAuditInput input, string type, out string msg)
{
msg = "";
using (Model edm = new Model())
{
ORDER_INORDER order = new ORDER_INORDER();
order = edm.ORDER_INORDER.FirstOrDefault(x => x.INORDERCODE == input.InOrderCode);
InOrderStatusEnum changeStatus = default(InOrderStatusEnum);
InOrderStatusEnum orderStatus = (InOrderStatusEnum)Enum.Parse(typeof(InOrderStatusEnum), order.ORDERSTATUS);
switch (type)
{
case "提交审核":
if (orderStatus != InOrderStatusEnum.新建 && orderStatus != InOrderStatusEnum.驳回)
{
msg = "状态必须是'新建'或'驳回'才能提交审核!";
return false;
}
if (order.AllFinishedNum == null || Convert.ToInt32(order.AllFinishedNum) <= 0)
{
msg = "总完工数必须大于0才能提交审核!";
return false;
}
//修改
changeStatus = InOrderStatusEnum.焊装审核中;
order.OrderStatusId = (int)changeStatus;
order.ORDERSTATUS = changeStatus.ToString();
order.CHECKERID = input.AuditUserId;
order.CheckResult = "待审";
order.SENDERID = input.SendUserId;
order.SendTime = DateTime.Now;
break;
case "审核通过":
if (orderStatus != InOrderStatusEnum.焊装审核中)
{
msg = "状态必须是'焊装审核中'才能提交审核!";
return false;
}
//修改
changeStatus = InOrderStatusEnum.完工;
order.OrderStatusId = (int)changeStatus;
order.ORDERSTATUS = changeStatus.ToString();
order.CheckTime = DateTime.Now;
order.CheckResult = "通过";
break;
case "驳回":
if (orderStatus != InOrderStatusEnum.焊装审核中)
{
msg = "状态必须是'焊装审核中'才能提交审核!";
return false;
}
changeStatus = InOrderStatusEnum.驳回;
order.OrderStatusId = (int)changeStatus;
order.ORDERSTATUS = changeStatus.ToString();
order.CheckRemark = input.Remark;
order.CheckTime = DateTime.Now;
order.CheckResult = "驳回";
break;
default:
throw new Exception("不支持的类型");
}
order.UPDATETIME = DateTime.Now;
if (edm.SaveChanges() > 0)
{
return true;
}
else
{
msg = "保存失败";
return false;
}
}
}
///
/// 修改 线下交付数量
///
///
///
public static bool UpdateUnlineNum(InOrderUnlineNumInput input, out string msg)
{
msg = "";
using (Model edm = new Model())
{
ORDER_INORDER order = new ORDER_INORDER();
order = edm.ORDER_INORDER.FirstOrDefault(x => x.INORDERCODE == input.InOrderCode);
//重新计算订单表的数量
order.UNLINENUM = input.Qty;
order.AllFinishedNum = (order.DONENUM ?? 0) + (order.UNLINENUM ?? 0);
order.UPDATETIME = DateTime.Now;
if (edm.SaveChanges() > 0)
{
return true;
}
else
{
msg = "保存失败";
return false;
}
}
}
///
/// 删除
///
///
///
public static bool Delete(InOrderWebEntity webEntity, out string msg)
{
msg = "";
using (Model edm = new Model())
{
ORDER_INORDER inOrder = edm.ORDER_INORDER.FirstOrDefault(x => x.INORDERCODE == webEntity.inOrderCode);
if (inOrder == null)
{
//无此角色
msg = "无此订单";
return false;
}
else
{
//edm.BASE_CONTAINER_VS_ITEM.Remove(cvi);
inOrder.ENABLE = 0;
if (edm.SaveChanges() > 0)
{
return true;
}
else
{
msg = "保存失败";
return false;
}
}
}
}
///
/// 获取编号
///
///
public static string GetCode()
{
string month = DateTime.Now.Month.ToString("00");
string day = DateTime.Now.Day.ToString("00");
string hour = DateTime.Now.Hour.ToString("00");
string minute = DateTime.Now.Minute.ToString("00");
string second = DateTime.Now.Second.ToString("00");
string millSecond = DateTime.Now.Millisecond.ToString("0000");
string time = DateTime.Now.Year.ToString() + month + day + hour + minute + second + millSecond;
return "IO" + time;
}
///
/// 导入入库单数据
///
///
///
public static bool ImportInOrder(List model, string userName, out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
if (model != null && model.Count > 0)
{
int userid = 1;
SYS_USER user = edm.SYS_USER.FirstOrDefault(x => x.USERNAME == userName);
if (user != null)
{
userid = user.ID;
}
List oinlst = new List();
foreach (InOrderWebEntity iow in model)
//foreach (InOrderExcelEntity iow in model)
{
ORDER_INORDER order = new ORDER_INORDER();
order = edm.ORDER_INORDER.FirstOrDefault(x => x.INORDERCODE == iow.inOrderCode);
if (order == null)
{
order = new ORDER_INORDER();
//order.ORDERSTATUS ="未完成";
order.CreateTime = DateTime.Now;
}
order.INORDERCODE = iow.inOrderCode;
BASE_ITEM item = edm.BASE_ITEM.FirstOrDefault(x => x.ITEMNAME == iow.itemName);
if (item == null)
{
msg = "无此零件";
return false;
}
order.BASE_ITEM = item;
order.UPDATETIME = DateTime.Now;
order.ORDERTYPE = iow.orderType ?? order.ORDERTYPE;
order.TOTALNUM = iow.totalNum ?? order.TOTALNUM;
//校验已绑任务记录与当前入库单是否匹配
var taskRecordList = edm.TASK_RECORD.Where(x => x.INORDERID == order.ID && x.ITEMID != order.ITEMID);
foreach (var i in taskRecordList)
{
i.INORDERID = null;//不匹配的自动去除
}
//查询任务统计数量
//order.DONENUM = webEntity.doneNum ?? order.DONENUM;
int doneNum = edm.TASK_RECORD.Where(x => x.INORDERID == order.ID && x.ITEMID == order.ITEMID).Sum(x => x.ITEMCOUNT);
order.DONENUM = doneNum;
order.UNLINENUM = iow.unLineNum ?? order.UNLINENUM;
order.ORDERSTATUS = iow.orderStatus ?? order.ORDERSTATUS;
//else
//{
// //通过数量变化状态
// if (order.TOTALNUM <= order.DONENUM + order.UNLINENUM)
// {
// order.ORDERSTATUS = "完工";
// }
// else if (0 < order.DONENUM + order.UNLINENUM)
// {
// order.ORDERSTATUS = "执行中";
// }
// else
// {
// order.ORDERSTATUS = "新建";
// }
//}
if (user != null)
{
order.CREATORID = user.ID;
}
order.ISFINISH = iow.isFinsish ?? order.ISFINISH;
order.DOTIME = iow.doTime ?? order.DOTIME;
order.ENABLE = iow.enable ?? order.ENABLE;
order.TOTALWEIGHT = item.WEIGHT * order.TOTALNUM ?? order.TOTALWEIGHT;
order.CLASSNO = iow.classNo ?? order.CLASSNO;
//order.STATUS = webEntity.status ?? order.STATUS;
SYS_USER sender = edm.SYS_USER.FirstOrDefault(x => x.USERNAME == iow.senderName);
if (sender != null)
{
order.SENDERID = sender.ID;
}
SYS_USER checker = edm.SYS_USER.FirstOrDefault(x => x.USERNAME == iow.checkerName);
if (checker != null)
{
order.CHECKERID = checker.ID;
}
oinlst.Add(order);
}
if (string.IsNullOrEmpty(msg))
{
edm.ORDER_INORDER.AddRange(oinlst);
if (edm.SaveChanges() > 0)
{
return true;
}
else
{
msg = "导入失败";
return false;
}
}
else
{
return false;
}
}
else
{
msg = "导入失败";
return false;
}
}
}
catch (Exception ex)
{
msg = "导入失败";
return false;
}
}
///
/// 导出入库单数据
///
///
public static List ExportInOrder(Expression> f, int page, int onePageNum, out string msg)
{
try
{
msg = "";
List iowlst = new List();
using (Model edm = new Model())
{
var list = SearchView(f, page, onePageNum, out msg);
if (list != null && list.Count > 0)
{
foreach (var inorder in list)
{
iowlst.Add(new InOrderExcelEntity()
{
itemCode = inorder.itemName,
inType = inorder.orderType,
itemNum = (int)inorder.totalNum,
createTime = (DateTime)inorder.updateTime
});
}
}
else
{
return null;
}
}
return iowlst;
}
catch (Exception ex)
{
msg = "导出失败!";
return null;
}
}
public static bool ImportExcel(string path, InOrderExcelEntity inord, out string msg)
{
using (Model dbModel = new Model())
{
try
{
msg = "";
var ds = ExcelHelper.FromExcelByEPPlus(path, "冲压计划导入模板", inord, out msg);
if (!string.IsNullOrEmpty(msg))
{
throw new Exception(msg);
}
var data = ds;
//数据保存
foreach (var i in data)
{
View_ORDER_INORDER newInorder = (View_ORDER_INORDER)i;
}
return string.IsNullOrEmpty(msg);
}
catch (Exception ex)
{
msg = ex.Message;
return false;
}
}
}
}
}