/// ///LOGIC CLASS FOR TABLE t_wmsOrderRequest ///By wm with codesmith. ///on 07/07/2020 /// 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(); } /// /// get all data /// public DataSet getAllData() { return _obj.Query(); } /// /// get all data /// public DataSet getAllActiveData() { return _obj.QueryActived(); } /// /// get a record by id /// public void initialize(int id) { _obj = id != 0 ? new WmsOrderRequest(id) : new WmsOrderRequest(); } /// /// get a record by id 0 /// public void initialize() { initialize(0); } /// /// get a record by id /// 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; } wmsOrder.orderNo = Util.getOrderNo(type, new WmsOrderRequest().getNextSeq(type)); return wmsOrder.Add(); } /// /// update in a transaction scrop /// 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; wd.getDbObject().Add(); } return wcfDetails.Length; } internal int deleteOrder(string orderNo) { int rt = 0; WmsOrderRequest order = new WmsOrderRequest(orderNo); if(order.state ==(int)enumOrderStatus.已驳回 || 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); // to create tasks. using (TransactionScope scope = new TransactionScope()) { order.state = (int)enumOrderStatus.已核准; order.approvedBy = operId; order.approveDate = order.getDateTime(); order.Update(); 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(); WmsFlow wf = new WmsFlow(); wf.orderNo = ww.waveNo; wf.task = Util.getOrderNo(enumCreateOrderType.pickJobNo, _obj.getNextSeq(enumCreateOrderType.pickJobNo)); wf.type = (int)Util.getTaskType((int)recType); ; wf.typeName =recType.ToString(); // wf.taskPartion = order. //TODO: set task partion wf.Add(); DataTable dt= order.getDetail(order.orderNo); foreach (DataRow dr in dt.Rows) { WmsOrderDetail od = new WmsOrderDetail(dr); WmsLocation loc = new WmsLocation(od.locationId); WmsStock stk = new WmsStock(od.locationId,od.skuId); stk.countOuting += od.count; stk.state = (int)enumStockLocationStatus.不可用; loc.state = (int)enumStockLocationStatus.不可用; stk.Update(); loc.Update(); WmsStockRecord sr = new WmsStockRecord(dr); sr.rectype =(int)recType; sr.orderDetailId = od.ID; sr.countOuting = od.count; sr.count = 0; sr.Add(); WmsOutPickPort wp = new WmsOutPickPort(dr); wp.jobNo = wf.task; 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.Add(); } scope.Complete(); } return rt; } } }