using iWareCommon.Common.Entity;
|
using iWareCommon.Common.EnumType;
|
using iWareCommon.Common.Service;
|
using iWareCommon.Utils;
|
using iWareDataCore.BASE.Dao;
|
using iWareDataCore.BASE.Entity;
|
using iWareDataCore.BASE.EnumType;
|
using iWareDataCore.ORM;
|
using iWareDataCore.Properties;
|
using iWareDataCore.TASK.EnumType;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace iWareDataCore.BASE.Service
|
{
|
public class WebOrderService : CommonService<WebOrderEntity, WebOrder, DbModelCore>
|
{
|
private static object Lock = new object();
|
|
private WebOrderService() : base(WebOrderDao.GetInstance()) { }
|
|
private static WebOrderService Instance = null;
|
|
/// <summary>
|
/// 获取单例的方法
|
/// </summary>
|
/// <returns>用户服务的单例实体</returns>
|
public static WebOrderService GetInstance()
|
{
|
|
if (Instance == null)
|
{
|
lock (Lock)
|
{
|
if (Instance == null)
|
{
|
Instance = new WebOrderService();
|
}
|
}
|
}
|
return Instance;
|
}
|
|
public List<WebOrderDetail> GetReqOrderDetail(int id, out string msg)
|
{
|
msg = "";
|
using (var dbModel = new DbModelCore())
|
{
|
List<WebOrderDetail> detail = new List<WebOrderDetail>();
|
try
|
{
|
return dbModel.WebOrderDetail.Where(x => x.weborderid== id).ToList();
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
return detail;
|
}
|
}
|
}
|
|
public int DeleteRequest(int id, out string msg)
|
{
|
msg = "";
|
using (var dbModel = new DbModelCore())
|
{
|
try
|
{
|
var webOrder = dbModel.WebOrder.FirstOrDefault(x => id == x.id);
|
if (webOrder != null)
|
{
|
if(webOrder.statusflag==1)
|
{
|
msg = "此单据已下发,不能删除";
|
return -1;
|
}
|
string listNo = webOrder.listno;
|
var webOrderDetail = dbModel.WebOrderDetail.Where(x => x.weborderid == id).ToList();
|
if (webOrderDetail != null && webOrderDetail.Count > 0)
|
{
|
webOrderDetail.ForEach(x => dbModel.WebOrderDetail.Remove(x));
|
}
|
|
var inoutlist = dbModel.BASEInOutLists.FirstOrDefault(x => x.listno== listNo);
|
if (inoutlist != null)
|
{
|
var inoutdetail = dbModel.BASEInOutListDetails.Where(x => x.inoutlistid == inoutlist.id).ToList();
|
if (inoutdetail!=null && inoutdetail.Count > 0)
|
inoutdetail.ForEach(x => dbModel.BASEInOutListDetails.Remove(x));
|
dbModel.BASEInOutLists.Remove(inoutlist);
|
}
|
|
dbModel.WebOrder.Remove(webOrder);
|
dbModel.SaveChanges();
|
return 1;
|
}
|
else
|
{
|
msg = "单据不存在";
|
return -1;
|
}
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DeleteInOut", ex.Message);
|
return 0;
|
}
|
}
|
}
|
|
public bool DoInOutWork(int id, out string msg)
|
{
|
msg = "";
|
List<MaterialPlaceView> outMrl;
|
using (var dbModel = new DbModelCore())
|
{
|
try
|
{
|
bool checkResult = CheckWorkCanDo(dbModel, id, out outMrl, out msg);
|
if (!checkResult)
|
return checkResult;
|
|
List<InOutListDetailEntity> addInOutDetail = new List<InOutListDetailEntity>();
|
|
var inoutdetails = InOutListDetailViewService.GetInstance().QueryByParam(new QueryParam { }, out msg);
|
var placeMaterial = PlaceMaterialViewService.GetInstance().QueryByParam(new QueryParam { }, out msg);
|
|
var webOrder = dbModel.WebOrder.FirstOrDefault(x => x.id == id);
|
var webOrderDetail = dbModel.WebOrderDetail.Where(x => x.weborderid == id).ToList();
|
|
string busTypeName = "";
|
string listNo = webOrder.listno;
|
|
if (webOrder.bustype == (int)EMainTaskType.入库任务)
|
{
|
busTypeName = "入库";
|
foreach (var cutInMaterial in outMrl)
|
{
|
if (placeMaterial.Select(x => x.MaterialId).Contains((int)cutInMaterial.materialid))
|
{
|
msg = cutInMaterial.materialcode + "已存在立库中,不能添加到入库单明细中!";
|
break;
|
}
|
if (inoutdetails.Select(x => x.MaterialId).Contains((int)cutInMaterial.materialid))
|
{
|
msg = cutInMaterial.materialcode + "已存在之前的入库单明细中,不能添加到当前入库单明细中!";
|
break;
|
}
|
}
|
}
|
else if (webOrder.bustype == (int)EMainTaskType.出库任务)
|
{
|
busTypeName = "出库";
|
foreach (var cutOutMaterial in outMrl)
|
{
|
if (inoutdetails.Select(x => x.MaterialId).Contains((int)cutOutMaterial.materialid))
|
{
|
var inoutdeta = inoutdetails.FirstOrDefault(x => x.MaterialId == cutOutMaterial.materialid);
|
if (inoutdeta.TypeName == "出库")
|
{
|
msg = cutOutMaterial.materialname + "已存在之前的出库单明细中,不能添加到当前出库单明细中!";
|
break;
|
}
|
}
|
InOutListDetailEntity outdetail = new InOutListDetailEntity()
|
{
|
MaterialId = (int)cutOutMaterial.materialid,
|
IsFinish = 0
|
};
|
addInOutDetail.Add(outdetail);
|
}
|
}
|
if (!string.IsNullOrEmpty(msg))
|
return false;
|
|
InOutListService.GetInstance().CreateListAndDetial(
|
new InOutListEntity
|
{
|
ListNo = listNo,
|
CreateTime = DateTime.Now,
|
TypeName = busTypeName,
|
Status = 0,
|
Remark = "",
|
InOutListDetail = addInOutDetail
|
}, out msg);
|
|
msg = "生成" + busTypeName + "单成功";
|
|
webOrder.statusflag = 1;//已下发
|
dbModel.SaveChanges();
|
return true;
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
return false;
|
}
|
}
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="id">web单据Id</param>
|
/// <param name="canOutMrl">可以出库的物料</param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool CheckWorkOption(int id, out List<MaterialPlaceView> canOutMrl,out string msg)
|
{
|
using (var dbModel = new DbModelCore())
|
{
|
return CheckWorkCanDo(dbModel,id, out canOutMrl, out msg);
|
}
|
}
|
|
/// <summary>
|
/// 验证条件
|
/// </summary>
|
/// <param name="id">web单据Id</param>
|
/// <param name="bueType">业务类型</param>
|
/// <param name="canOutMrl">可以出库的物料</param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
private bool CheckWorkCanDo(DbModelCore dbModel,int id, out List<MaterialPlaceView> canOutMrl, out string msg)
|
{
|
msg = "";
|
canOutMrl = new List<MaterialPlaceView>();
|
try
|
{
|
var webOrder = dbModel.WebOrder.FirstOrDefault(x => x.id == id);
|
if (webOrder != null)
|
{
|
if(webOrder.statusflag==1)
|
{
|
msg = "此单据已下发";
|
return false;
|
}
|
var details = dbModel.WebOrderDetail.Where(x => x.weborderid == id).ToList();
|
if (details.Count < 1)
|
{
|
msg = "推送单据明细为空";
|
return false;
|
}
|
|
if (webOrder.bustype == (int)EMainTaskType.入库任务)
|
{
|
int inCount = (int)details.Select(x => x.quantity).Sum();
|
var emptyPlaces = dbModel.BASEEmptyPlaceViews.Where(x => x.isexecute == (int)EYesOrNo.否 && x.islock == (int)EYesOrNo.否 && x.typeid == 4 && x.status == (int)EPlaceStatus.空库位).OrderBy(x => new { x.layer, x.col }).ToList();
|
if (inCount <= emptyPlaces.Count)
|
{
|
msg = "空库位充足";
|
return true;
|
}
|
else
|
{
|
msg = "空库位不足";
|
return false;
|
}
|
}
|
else if (webOrder.bustype == (int)EMainTaskType.出库任务)
|
{
|
bool returnResult = true;
|
foreach (var outItem in details)
|
{
|
var cutStorageMaterials = dbModel.MaterialPlaceView.Where(x => x.materialno == outItem.materialno && x.typeid==4).OrderBy(x => x.createtime).ToList();
|
if (outItem.quantity <= cutStorageMaterials.Count)//库存足够
|
{
|
for (int i = 0; i < outItem.quantity; i++)
|
{
|
canOutMrl.Add(cutStorageMaterials[i]);
|
}
|
}
|
else
|
{
|
msg = outItem.materialno + "库存不足";
|
returnResult = false;
|
break;
|
}
|
}
|
return returnResult;
|
}
|
else
|
{
|
msg = "业务类型不识别";
|
return false;
|
}
|
}
|
else
|
{
|
msg = "单据不存在";
|
return false;
|
}
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
return false;
|
}
|
}
|
|
}
|
}
|