using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using DeiNiu.wms.Data.Model; using DeiNiu.Utils; using DeiNiu.wms.win.ServiceReferenceStockOutPickRequest; using System.Data; namespace DeiNiu.wms.win.epick { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“ServiceLight”。 public delegate void addNewLabelsToPool(List labels); public delegate void lightLable(List lables,int portNo); public delegate void turnoffLable(int portNo); public delegate void clearOrder(int deskId ); public delegate bool turnOnLights(int portNo, List lights); public delegate bool turnOffLights(int portNo, List lights); [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class ServiceLight : IServiceLight { static log4net.ILog log = log4net.LogManager.GetLogger("light"); public SeedsLabel getLabel(string Id) { SeedsLabel lb = new SeedsLabel(); lb.labelId = int.Parse(Id); lb.color = 1; lb.address = 11; return lb; } public addNewLabelsToPool newLabels = null; public string lightLabels(List labels) { //labelPool.Concat(labels); if (null != newLabels) { newLabels(labels); return "succeed"; } return "bad"; } public string lightLabels2(String s) { return s; } public static List labelPool = new List(); public lightLable lightUp = null; public string lightLabel(string Id) { List lbs = new List(); SeedsLabel lb = new SeedsLabel(); lb.labelId = int.Parse(Id); lb.color = 1; lb.address = 0; lb.count = 11; lb.port = 13; lbs.Add(lb); lb = new SeedsLabel(); lb.labelId = 2; lb.color = 2; lb.address = 0; lb.count = 12; lb.port = 13; lbs.Add(lb); if (lightUp != null) { lightUp(lbs,13); return "success"; } return "服务出错"; } public turnoffLable turnOff = null; public turnOffLights turnOffLts = null; public turnOnLights turnOnLts = null; public clearOrder clOrder = null; /// /// 开始新的一组 /// /// /// /// public string startSeeds(int deskId, string seedsNo) { if (turnOff != null) { turnOff(deskId); } /* if (seedsItem.startSeeds(deskId, seedsNo)) { return "成功开始新播种"; } */ return "服务出错"; } public FormatedResult lightDeskSeed( string seedsNo, string barcode, int userId, bool isValid) { string msg = "没有找到亮灯数据"; /* List els = importSeeds.startNewDeskSeed( seedsNo, barcode, userId,5 ,isValid); if (els.Count > 0) { // int deskId = els[0].port; //int color = els[0].color; #if DEBUG // portNo = 13; #endif if (lightUp != null) { lightUp(els, userId); msg = "已发送亮灯请求"; } } else { if (clOrder != null) { clOrder(0); } } */ return new FormatedResult(msg); } public FormatedResult lightSeed(int deskId, string flowNo, string barcode, int toTalpcs, int userId, bool isValid) { log.Debug(string.Format("start request.... deskId:{0} ,flowNo:{1} ,barcode:{2}, userId: {3}, isValid:{4} ", deskId, flowNo, barcode, userId, isValid)); List els = new List(); using (WmsOutPickRequestClient client = new WmsOutPickRequestClient("BasicHttpBinding_IWmsOutPickRequest", string.Format("http://{0}/{1}", Park.svrUrl, "WmsOutPickRequestService.svc"))) { log.Debug(" start to load light data....."); DataTable dt= client.lightSeeds(deskId,flowNo,barcode, userId, isValid); log.Debug("light items cnt: " + dt.Rows.Count); int pcs = 0; try { foreach (DataRow dr in dt.Rows) { if (toTalpcs <= 0) { break; } pcs = (int) Convert.ToDecimal(dr["wantCount"].ToString()) / (int)Convert.ToDecimal(dr["minOperateCount"].ToString()); if (pcs < toTalpcs) { toTalpcs -= pcs; } else { pcs = toTalpcs; toTalpcs = 0; } log.Debug(string.Format("pcs {0}, totalPcs {1}", pcs, toTalpcs)); SeedsLabel el = new SeedsLabel(); el.count = (int)Convert.ToDecimal(dr["wantCount"].ToString()) ; el.pcs = pcs; el.color = 1; el.barcode = barcode; el.address = barcode.Length > 2 ? Convert.ToInt16(barcode.Substring(barcode.Length - 2)) : 0; el.labelId = Convert.ToInt16(dr["lightId"].ToString()); el.deskId = deskId; el.seedsNo = flowNo; el.flowNo = flowNo; el.toFlowNo = dr["toFlowNo"].ToString(); el.productDate = dr["productDate"].ToString(); el.skuId = Convert.ToInt16(dr["skuId"].ToString()); el.batch = dr["batch"].ToString(); el.outDetailId = Convert.ToInt32(dr["outDetailId"].ToString()); el.inDetailId = Convert.ToInt32(dr["inDetailId"].ToString()); el.userId = userId; el.isValid = isValid; el.name = dr["goodsName"].ToString(); els.Add(el); } } catch (Exception er) { LogHelper.debug("serviceLights", "组织亮灯数据错误: " + er.Message); log.Error(er); } } string msg = "没有找到亮灯数据"; if (els.Count > 0) { #if DEBUG // portNo = 13; #endif if (lightUp != null) { lightUp(els, userId); // msg= els[0].name; int cnt = 0; foreach(SeedsLabel eLabel in els) { cnt += eLabel.count; } msg = "总数: " + cnt + " [" + els[0].name + "]"; if (WmsConstants.WAVE_CURRENT_LIGHTS_PORT_STATUS.ContainsKey(deskId) && WmsConstants.WAVE_CURRENT_LIGHTS_PORT_STATUS[deskId]) { //seedsItem.lightSeeds(seedsNo, enumSeedsState.已亮灯); // importSeeds.lightSeeds(seedsNo, enumSeedsState.已亮灯); msg = "亮灯成功 " + msg; } else { msg = "亮灯失败 " + msg; } } } else { if (clOrder != null) { clOrder(deskId); } } log.Debug(msg); return new FormatedResult(msg); } public string uploadSeeds(List seeds) { foreach (SeedsItem si in seeds) { // WmsOutSeeds dbObj = si.getDbObject(); /// dbObj.Add(); } return "服务完成"; } public string turnOnLight(int lightId, byte which, int portNo) { List els = new List(); ELight el = new ELight(); el.port = portNo; el.which = which; el.lightId = lightId; els.Add(el); bool rt = true; if (turnOnLts != null) { rt = turnOnLts(portNo, els); } if (rt) return "亮灯请求成功"; else return "亮灯失败"; } /* public string turnOffLight(int lightId, int portNo) { List els = new List(); ELight el = new ELight(); el.port = portNo; el.lightId = lightId; els.Add(el); if (turnOffLts != null) { turnOffLts(portNo, els); } return "灭灯成功"; } */ public string turnOffLight(int lightId, byte which, int portNo) { List els = new List(); ELight el = new ELight(); el.port = portNo; el.which = which; el.lightId = lightId; els.Add(el); bool rt = true; if (turnOffLts != null) { rt = turnOffLts(portNo, els); } if (rt) return "灭灯成功"; else return "灭灯失败"; } public string turnOnLightByScan(int deskId, string barcode) { //ELight el= lseeds.getLight(deskId, barcode); // return turnOnLight(el.lightId, el.which, el.port); return ""; } } }