2023-05-23 16:13:17 +08:00
|
|
|
|
|
|
|
|
|
/// <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;
|
2023-11-21 19:18:23 +08:00
|
|
|
|
case enumOrderType.内部领用:
|
|
|
|
|
type = enumCreateOrderType.selfPickOrder;
|
|
|
|
|
break;
|
|
|
|
|
case enumOrderType.无单入库:
|
|
|
|
|
type = enumCreateOrderType.stockInWithNoOrder;
|
2023-12-03 22:13:49 +08:00
|
|
|
|
break;
|
|
|
|
|
case enumOrderType.货位下架:
|
|
|
|
|
type = enumCreateOrderType.stockLocationDown;
|
|
|
|
|
|
|
|
|
|
|
2023-11-21 19:18:23 +08:00
|
|
|
|
break;
|
2023-05-23 16:13:17 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wmsOrder.orderNo = Util.getOrderNo(type, new WmsOrderRequest().getNextSeq(type));
|
2023-09-04 22:41:19 +08:00
|
|
|
|
// wmsOrder.venderNo
|
|
|
|
|
wmsOrder.orderTypeName = ((enumOrderType)wmsOrder.orderType).ToString();
|
|
|
|
|
wmsOrder.venderName = new Erp_bussinessDoc(wmsOrder.venderNo).businessName;
|
2023-11-21 19:18:23 +08:00
|
|
|
|
wmsOrder.operater = operId;
|
2023-05-23 16:13:17 +08:00
|
|
|
|
|
|
|
|
|
return wmsOrder.Add();
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 22:41:19 +08:00
|
|
|
|
/// <summary
|
2023-05-23 16:13:17 +08:00
|
|
|
|
/// 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;
|
2023-12-03 22:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-23 16:13:17 +08:00
|
|
|
|
wd.state = 0;
|
2023-11-21 19:18:23 +08:00
|
|
|
|
int id= wd.getDbObject().Add();
|
|
|
|
|
|
|
|
|
|
log.Debug("add orderDetail " + wd.getDbObject());
|
|
|
|
|
|
|
|
|
|
log.Debug("add orderDetail2 " + new WmsOutDetail(id));
|
|
|
|
|
}
|
2023-05-23 16:13:17 +08:00
|
|
|
|
|
|
|
|
|
return wcfDetails.Length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal int deleteOrder(string orderNo)
|
|
|
|
|
{
|
|
|
|
|
int rt = 0;
|
|
|
|
|
WmsOrderRequest order = new WmsOrderRequest(orderNo);
|
2023-11-21 19:18:23 +08:00
|
|
|
|
if( order.state ==(int)enumOrderStatus.创建)
|
2023-05-23 16:13:17 +08:00
|
|
|
|
rt= getWmsOrderRequest.DeleteOrder(orderNo);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return rt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal int approveOrder(string orderNo,int operId)
|
|
|
|
|
{
|
|
|
|
|
int rt = 0;
|
2023-11-21 19:18:23 +08:00
|
|
|
|
WmsOrderRequest order = new WmsOrderRequest(orderNo);
|
|
|
|
|
DataTable dt= order.getDetail(order.orderNo);
|
2023-05-23 16:13:17 +08:00
|
|
|
|
|
|
|
|
|
// to create tasks.
|
|
|
|
|
using (TransactionScope scope = new TransactionScope())
|
|
|
|
|
{
|
|
|
|
|
order.state = (int)enumOrderStatus.已核准;
|
2023-11-21 19:18:23 +08:00
|
|
|
|
order.approvedBy = this.operId;
|
2023-05-23 16:13:17 +08:00
|
|
|
|
order.approveDate = order.getDateTime();
|
|
|
|
|
order.Update();
|
2023-11-21 19:18:23 +08:00
|
|
|
|
|
|
|
|
|
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);
|
2023-05-23 16:13:17 +08:00
|
|
|
|
enumStockRecordType recType = Util.getStockRecordType((int)outStoreType);
|
|
|
|
|
|
|
|
|
|
WmsWave ww = new WmsWave();
|
|
|
|
|
ww.waveNo = Util.getOrderNo(enumCreateOrderType.waveOrder, _obj.getNextSeq(enumCreateOrderType.waveOrder)); ;
|
|
|
|
|
ww.operater = this.operId;
|
2023-11-21 19:18:23 +08:00
|
|
|
|
ww.type = (int)recType;
|
2023-05-23 16:13:17 +08:00
|
|
|
|
ww.Add();
|
2023-11-21 19:18:23 +08:00
|
|
|
|
|
|
|
|
|
string locId = "";
|
|
|
|
|
string taskId = Util.getOrderNo(enumCreateOrderType.pickJobNo, _obj.getNextSeq(enumCreateOrderType.pickJobNo));
|
|
|
|
|
|
2023-05-23 16:13:17 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (DataRow dr in dt.Rows)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
WmsOrderDetail od = new WmsOrderDetail(dr);
|
|
|
|
|
WmsLocation loc = new WmsLocation(od.locationId);
|
2023-12-03 22:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (order.orderType == (int)enumOrderType.货位下架) //无单货位下架,执行时直接减库存 countOut += count, 有单移库下架,则走正常拣货流程
|
|
|
|
|
{
|
|
|
|
|
loc.state = (int)enumStockLocationStatus.入库受限;
|
|
|
|
|
loc.Update();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WmsStock stk = new WmsStock(od.locationId, od.skuId, od.goodsId);
|
2023-05-23 16:13:17 +08:00
|
|
|
|
stk.countOuting += od.count;
|
2023-12-03 22:13:49 +08:00
|
|
|
|
stk.Update();
|
|
|
|
|
|
2023-11-21 19:18:23 +08:00
|
|
|
|
// stk.state = (int)enumStockLocationStatus.不可用;
|
|
|
|
|
// loc.state = (int)enumStockLocationStatus.不可用;
|
2023-12-03 22:13:49 +08:00
|
|
|
|
|
2023-11-21 19:18:23 +08:00
|
|
|
|
// loc.Update();
|
2023-05-23 16:13:17 +08:00
|
|
|
|
|
|
|
|
|
WmsStockRecord sr = new WmsStockRecord(dr);
|
|
|
|
|
sr.rectype =(int)recType;
|
|
|
|
|
sr.orderDetailId = od.ID;
|
|
|
|
|
sr.countOuting = od.count;
|
|
|
|
|
sr.count = 0;
|
2023-11-21 19:18:23 +08:00
|
|
|
|
sr.description = "";
|
2023-05-23 16:13:17 +08:00
|
|
|
|
sr.Add();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WmsOutPickPort wp = new WmsOutPickPort(dr);
|
2023-11-21 19:18:23 +08:00
|
|
|
|
wp.jobNo = taskId;
|
2023-05-23 16:13:17 +08:00
|
|
|
|
wp.pickOrderNo = order.orderNo;
|
|
|
|
|
wp.waveOrder = ww.waveNo;
|
|
|
|
|
wp.volType = loc.volType;
|
|
|
|
|
wp.tranArea = order.toWhType;
|
|
|
|
|
wp.recordId = sr.ID;
|
|
|
|
|
wp.recType = (int)recType;
|
2023-11-21 19:18:23 +08:00
|
|
|
|
wp.pickDetailId = od.ID;
|
|
|
|
|
|
|
|
|
|
wp.Add();
|
2023-05-23 16:13:17 +08:00
|
|
|
|
|
2023-11-21 19:18:23 +08:00
|
|
|
|
locId = od.locationId;
|
|
|
|
|
}
|
2023-05-23 16:13:17 +08:00
|
|
|
|
|
2023-11-21 19:18:23 +08:00
|
|
|
|
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();
|
|
|
|
|
|
2023-05-23 16:13:17 +08:00
|
|
|
|
scope.Complete();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return rt;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|