358 lines
11 KiB
C#
358 lines
11 KiB
C#
|
||
/// <summary>
|
||
///LOGIC CLASS FOR TABLE t_wmsOrderRequest
|
||
///By wm with codesmith.
|
||
///on 07/07/2020
|
||
/// </summary>
|
||
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using DeiNiu.wms.Data.Model;
|
||
using System.Data;
|
||
using System.Transactions;
|
||
using DeiNiu.Wcf;
|
||
using DeiNiu.Utils;
|
||
|
||
namespace DeiNiu.wms.Logical
|
||
{
|
||
[Serializable]
|
||
public class lWmsOrderRequest :lbase
|
||
{
|
||
WmsOrderRequest _obj;
|
||
public lWmsOrderRequest()
|
||
{
|
||
initialize();
|
||
}
|
||
|
||
public WmsOrderRequest getWmsOrderRequest
|
||
{
|
||
get
|
||
{
|
||
if (_obj == null)
|
||
{
|
||
_obj = new WmsOrderRequest();
|
||
|
||
}
|
||
_obj.operater = operId;
|
||
return _obj;
|
||
}
|
||
}
|
||
|
||
public lWmsOrderRequest(int operId)
|
||
: base(operId)
|
||
{
|
||
initialize();
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// get all data
|
||
/// </summary>
|
||
public DataSet getAllData()
|
||
{
|
||
return _obj.Query();
|
||
}
|
||
|
||
/// <summary>
|
||
/// get all data
|
||
/// </summary>
|
||
public DataSet getAllActiveData()
|
||
{
|
||
return _obj.QueryActived();
|
||
}
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// get a record by id
|
||
/// </summary>
|
||
public void initialize(int id)
|
||
{
|
||
_obj = id != 0 ? new WmsOrderRequest(id) : new WmsOrderRequest();
|
||
}
|
||
|
||
/// <summary>
|
||
/// get a record by id 0
|
||
/// </summary>
|
||
public void initialize()
|
||
{
|
||
initialize(0);
|
||
}
|
||
|
||
/// <summary>
|
||
/// get a record by id
|
||
/// </summary>
|
||
public void initialize(DataRow dr)
|
||
{
|
||
_obj = new WmsOrderRequest(dr);
|
||
}
|
||
|
||
protected override DeiNiu.Data.BaseObject.BaseModel getModel()
|
||
{
|
||
return _obj;
|
||
}
|
||
|
||
//begin cust db operation, query, excute sql etc.
|
||
|
||
internal int add(WmsOrderRequest wmsOrder)
|
||
{
|
||
enumCreateOrderType type = enumCreateOrderType.obsolete;
|
||
// enumWhType toWhtype = enumWhType.报废库;
|
||
switch ((enumOrderType)wmsOrder.orderType)
|
||
{
|
||
case enumOrderType.报废申请:
|
||
type = enumCreateOrderType.obsolete;
|
||
// toWhtype = enumWhType.报废库;
|
||
break;
|
||
case enumOrderType.仓间调拨:
|
||
type = enumCreateOrderType.transferInternal;
|
||
break;
|
||
case enumOrderType.库区转移:
|
||
type = enumCreateOrderType.transferOutside;
|
||
break;
|
||
case enumOrderType.退供应商:
|
||
type = enumCreateOrderType.returnVender;
|
||
break;
|
||
case enumOrderType.内部领用:
|
||
type = enumCreateOrderType.selfPickOrder;
|
||
break;
|
||
case enumOrderType.无单入库:
|
||
type = enumCreateOrderType.stockInWithNoOrder;
|
||
break;
|
||
case enumOrderType.货位下架:
|
||
type = enumCreateOrderType.stockLocationDown;
|
||
|
||
|
||
break;
|
||
}
|
||
|
||
|
||
wmsOrder.orderNo = Util.getOrderNo(type, new WmsOrderRequest().getNextSeq(type));
|
||
// wmsOrder.venderNo
|
||
wmsOrder.orderTypeName = ((enumOrderType)wmsOrder.orderType).ToString();
|
||
wmsOrder.venderName = new Erp_bussinessDoc(wmsOrder.venderNo).businessName;
|
||
wmsOrder.operater = operId;
|
||
|
||
return wmsOrder.Add();
|
||
}
|
||
|
||
/// <summary
|
||
/// update in a transaction scrop
|
||
/// </summary>
|
||
|
||
public void update()
|
||
{
|
||
if (valid())
|
||
{
|
||
using (TransactionScope scope = new TransactionScope())
|
||
{
|
||
|
||
//Node tmp = new Node();
|
||
//tmp.parentid = 1;
|
||
//tmp.name = "test trans" + DateTime.Now;
|
||
//tmp.description = "this is for transTest";
|
||
//tmp.Add();
|
||
_obj.Update();
|
||
|
||
scope.Complete();
|
||
}
|
||
}
|
||
}
|
||
|
||
private bool valid()
|
||
{
|
||
return true;
|
||
}
|
||
|
||
|
||
|
||
internal DataTable getDetail(string orderNo)
|
||
{
|
||
return getWmsOrderRequest.getDetail(orderNo);
|
||
}
|
||
|
||
internal int addDetail( enumOrderType orderType,Wcf.WcfWmsOrderDetail[] wcfDetails)
|
||
{
|
||
/*
|
||
enumWhType whType = enumWhType.合格库, toWhType = enumWhType.报废库;
|
||
if (wcfDetails.Length > 0)
|
||
{
|
||
switch (orderType)
|
||
{
|
||
case enumOrderType.报废申请:
|
||
whType = enumWhType.合格库;
|
||
toWhType = enumWhType.报废库;
|
||
break;
|
||
|
||
case enumOrderType.库区转移:
|
||
whType = enumWhType.合格库;
|
||
toWhType = enumWhType.报废库;
|
||
break;
|
||
}
|
||
|
||
|
||
}
|
||
*/
|
||
foreach (WcfWmsOrderDetail wd in wcfDetails)
|
||
{
|
||
// wd.whtype = (int)whType;
|
||
// wd.toWhType =(int) toWhType;
|
||
|
||
|
||
|
||
wd.state = 0;
|
||
int id= wd.getDbObject().Add();
|
||
|
||
log.Debug("add orderDetail " + wd.getDbObject());
|
||
|
||
log.Debug("add orderDetail2 " + new WmsOutDetail(id));
|
||
}
|
||
|
||
return wcfDetails.Length;
|
||
}
|
||
|
||
internal int deleteOrder(string orderNo)
|
||
{
|
||
int rt = 0;
|
||
WmsOrderRequest order = new WmsOrderRequest(orderNo);
|
||
if( order.state ==(int)enumOrderStatus.创建)
|
||
rt= getWmsOrderRequest.DeleteOrder(orderNo);
|
||
|
||
|
||
return rt;
|
||
}
|
||
|
||
internal int approveOrder(string orderNo,int operId)
|
||
{
|
||
int rt = 0;
|
||
WmsOrderRequest order = new WmsOrderRequest(orderNo);
|
||
DataTable dt= order.getDetail(order.orderNo);
|
||
|
||
// to create tasks.
|
||
using (TransactionScope scope = new TransactionScope())
|
||
{
|
||
order.state = (int)enumOrderStatus.已核准;
|
||
order.approvedBy = this.operId;
|
||
order.approveDate = order.getDateTime();
|
||
order.Update();
|
||
|
||
if (order.orderType == (int)enumOrderType.无单入库) //无单入库则生成入库通知单
|
||
{
|
||
|
||
Erp_purch purch = new Erp_purch();
|
||
purch.pur_order = orderNo;
|
||
purch.orderType = order.orderType;
|
||
purch.order_typeName = ((enumOrderType)order.orderType).ToString();
|
||
purch.vender = order.requestBy + "";
|
||
purch.venderName = WmsConstants.CURRENT_USER_ORG;
|
||
purch.orgid= WmsConstants.CURRENT_USER_ORGID;
|
||
purch.entid= WmsConstants.CURRENT_USER_ORGID;
|
||
int i = 0;
|
||
foreach (DataRow dr in dt.Rows)
|
||
{
|
||
|
||
WmsOrderDetail od = new WmsOrderDetail(dr);
|
||
Erp_purch_d pd = new Erp_purch_d();
|
||
pd.pur_order = orderNo;
|
||
pd.pur_order_sn = ++i;
|
||
pd.goods_id = od.goodsId;
|
||
pd.count = od.count;
|
||
pd.add_date = pd.getDateTime();
|
||
pd.entid = WmsConstants.CURRENT_USER_ORGID;
|
||
|
||
pd.Add();
|
||
|
||
}
|
||
|
||
purch.Add();
|
||
|
||
scope.Complete();
|
||
return rt;
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
enumOutStoreType outStoreType =Util.getOutStoreTypeByOrderType( order.orderType);
|
||
enumStockRecordType recType = Util.getStockRecordType((int)outStoreType);
|
||
|
||
WmsWave ww = new WmsWave();
|
||
ww.waveNo = Util.getOrderNo(enumCreateOrderType.waveOrder, _obj.getNextSeq(enumCreateOrderType.waveOrder)); ;
|
||
ww.operater = this.operId;
|
||
ww.type = (int)recType;
|
||
ww.Add();
|
||
|
||
string locId = "";
|
||
string taskId = Util.getOrderNo(enumCreateOrderType.pickJobNo, _obj.getNextSeq(enumCreateOrderType.pickJobNo));
|
||
|
||
|
||
|
||
foreach (DataRow dr in dt.Rows)
|
||
{
|
||
|
||
WmsOrderDetail od = new WmsOrderDetail(dr);
|
||
WmsLocation loc = new WmsLocation(od.locationId);
|
||
|
||
|
||
if (order.orderType == (int)enumOrderType.货位下架) //无单货位下架,执行时直接减库存 countOut += count, 有单移库下架,则走正常拣货流程
|
||
{
|
||
loc.state = (int)enumStockLocationStatus.入库受限;
|
||
loc.Update();
|
||
}
|
||
|
||
WmsStock stk = new WmsStock(od.locationId, od.skuId, od.goodsId);
|
||
stk.countOuting += od.count;
|
||
stk.Update();
|
||
|
||
// stk.state = (int)enumStockLocationStatus.不可用;
|
||
// loc.state = (int)enumStockLocationStatus.不可用;
|
||
|
||
// loc.Update();
|
||
|
||
WmsStockRecord sr = new WmsStockRecord(dr);
|
||
sr.rectype =(int)recType;
|
||
sr.orderDetailId = od.ID;
|
||
sr.countOuting = od.count;
|
||
sr.count = 0;
|
||
sr.description = "";
|
||
sr.Add();
|
||
|
||
|
||
WmsOutPickPort wp = new WmsOutPickPort(dr);
|
||
wp.jobNo = taskId;
|
||
wp.pickOrderNo = order.orderNo;
|
||
wp.waveOrder = ww.waveNo;
|
||
wp.volType = loc.volType;
|
||
wp.tranArea = order.toWhType;
|
||
wp.recordId = sr.ID;
|
||
wp.recType = (int)recType;
|
||
wp.pickDetailId = od.ID;
|
||
|
||
wp.Add();
|
||
|
||
locId = od.locationId;
|
||
}
|
||
|
||
WmsFlow wf = new WmsFlow();
|
||
wf.orderNo = order.orderNo;// ww.waveNo;
|
||
wf.task = taskId;
|
||
wf.type = (int)Util.getTaskType((int)recType); ;
|
||
wf.typeName = recType.ToString();
|
||
wf.taskCnt = dt.Rows.Count;
|
||
wf.taskPartion = new WmsLocation(locId).partion;
|
||
wf.Add();
|
||
|
||
scope.Complete();
|
||
}
|
||
|
||
|
||
return rt;
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|