/// ///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; 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(); } /// 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; } } }