using HHWCS.Model; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using SystemLogHelper; using LEDhelp; namespace HHWCS.Bll { public class Bll : IBll { public static void Main(String[] args) { //string str = ""; //for (int i = 1; i < 3; i++) //{ // for (int j = 1; j < 33; j++) // { // for (int k = 1; k < 6; k++) // { // str += String.Format("INSERT INTO `huaheng`.`location` (`code`, `warehouseId`, `warehouseCode`, `row`, `line`, `layer`, `grid`, `roadway`, `type`, `containerId`, `containerCode`, `zoneId`, `zoneCode`, `status`, `lastCycleCountDate`, `created`, `createdBy`, `lastUpdated`, `lastUpdatedBy`, `enable`, `deleted`, `userDef1`, `userDef2`, `userDef3`, `userDef4`, `userDef5`) VALUES ('{0}', '1', 'CS0001', '{1}', '{2}', '{3}', '0', '1', 'LK', NULL, NULL, NULL, NULL, 'empty', NULL, '2018-08-24 11:31:27', NULL, '2018-08-24 14:31:46', NULL, b'01', b'00', NULL, NULL, NULL, NULL, NULL);\r\n", "A" + i.ToString().PadLeft(2, '0') + j.ToString().PadLeft(2, '0') + k.ToString().ToString().PadLeft(2, '0'), i, j, k); // } // } //} //LogExecute.WriteInfoLog(str); //Console.WriteLine(str); //object a = false; //object b = "abc"; //object c = 1; //object d = (byte)1; //object a =Convert.ToBoolean("True"); //object b = Convert.ToInt32("1"); //object c = Convert.ToByte("1"); //object d = Convert.ToBoolean("0"); //Console.WriteLine(a.GetType()+" - "+a); //Console.WriteLine(b.GetType() +" - "+b); //Console.WriteLine(c.GetType()+" - "+c); //Console.WriteLine(d.GetType()+ " - " + d); //Console.WriteLine(d); //byte a = 0b00010001; //Console.WriteLine(a); //LEDhelp.LEDHelper led = new LEDhelp.LEDHelper("192.168.10.110", 5005, 1); //led.SendLedInfo("dfadffgsdgsdfgs\\ndfgsdfgdfg16\\n开发机构涉及地方\\n管理会计师对方了国家\\n受到了房价太高迫而价格\\n破手机而苹果就是独立\\n开发背景来看笑话\\nVB哦时间的反馈给解释答复"); //Bll bll = new Bll(); //var a = bll.GetTaskDetailsByTaskId(150); //a.Data.ForEach(t => Console.WriteLine(t.ToString())); //Queue<string> q = new Queue<string>(); //LEDHelper led = new LEDHelper("192.168.10.110", 5005, 1); //LEDHelper led2 = new LEDHelper("192.168.10.110", 5005, 1); //Task.Run(async () => //{ // while (true) // { // await Task.Delay(3000); // if (q.Count > 0) // { // led2.SendLedInfo(q.Dequeue()); // } // } //}); //String read = ""; //while (read != "exit") //{ // read = Console.ReadLine(); // //led.SendLedInfo(read); // q.Enqueue(read); //} Console.Read(); } #region Login public async Task<BllResult> Login(string userName, string password) { return BllResultFactory.Sucess(null, "默认成功"); } #endregion #region Task public BllResult<List<TaskDetailEntity>> GetTaskDetailsByTaskId(int taskId) { try { string sql = $"SELECT td.*,m.`name` materialName FROM task_detail td join material m on td.materialCode = m.`code` and td.warehouseId = m.warehouseId where td.taskId = {taskId}"; var ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<List<TaskDetailEntity>>(null, "没有数据"); } var list = ds.Tables[0].AsEnumerable().Select(t => new TaskDetailEntity() { Id = Convert.ToInt32(t["id"]), TaskId = (int)t["taskId"], WarehouseId = (int)t["warehouseId"], WarehouseCode = t["warehouseCode"] is DBNull ? null : t["warehouseCode"].ToString(), AllocationId = t["allocationId"] is DBNull ? -1 : Convert.ToInt32(t["allocationId"]), MaterialCode = t["materialCode"] is DBNull ? null : t["materialCode"].ToString(), ContainerCode = t["containerCode"] is DBNull ? null : t["containerCode"].ToString(), SourceLocation = t["sourceLocation"] is DBNull ? null : t["sourceLocation"].ToString(), DestinationLocation = t["destinationLocation"] is DBNull ? null : t["destinationLocation"].ToString(), Qty = t["qty"] is DBNull ? 0 : Convert.ToInt32(t["qty"]), Status = Convert.ToInt32(t["status"]), Endtime = t["endTime"] is DBNull ? null : (DateTime?)(t["endTime"]), LastUpdated = t["lastUpdated"] is DBNull ? null : (DateTime?)t["lastUpdated"], LastUpdateBy = t["lastUpdatedBy"] is DBNull ? "" : t["lastUpdatedBy"].ToString(), Deleted =Convert.ToBoolean(t["deleted"]), MaterialName = t["materialName"] is DBNull ? null : t["materialName"].ToString() }).ToList(); return BllResultFactory.Sucess<List<TaskDetailEntity>>(list, "成功"); } catch (Exception ex) { return BllResultFactory.Error<List<TaskDetailEntity>>(null, "查询失败"); } } /// <summary> /// 处理空出 /// </summary> /// <param name="v"></param> /// <param name="task"></param> /// <returns></returns> public BllResult EmptyOutHandle(string v, string status, TaskEntity task) { try { string sql = $"UPDATE task set isEmptyOut ={v} ,lastStatus = {status},firstStatus={status} where id = {task.Id}"; int i = MySqlHelper.ExecuteNonQuery(AppCommon.ConnectionString, sql); if (i == 0) { UpdateLocationStatus(task.DestinationLocation, AppCommon.WarehouseId, "empty", AppCommon.ConnectionString); UpdateLocationStatus(task.SourceLocation, AppCommon.WarehouseId, "empty", AppCommon.ConnectionString); return BllResultFactory.Error(null, "更新失败"); } else { return BllResultFactory.Sucess(null, "成功"); } } catch (Exception ex) { return BllResultFactory.Error(null, "空出处理失败:" + ex.ToString()); } } /// <summary> /// 处理重入 /// </summary> /// <param name="location"></param> /// <param name="task"></param> /// <returns></returns> public BllResult TaskDoubleInHandle(string flag, String location, int taskId) { try { string sql = $"update task set isDoubleIn = {flag},secondDestinationLocation = '{location}' WHERE id = {taskId}"; int i = MySqlHelper.ExecuteNonQuery(AppCommon.ConnectionString, sql); if (i == 0) { return BllResultFactory.Error(null, "更新失败"); } else { UpdateLocationStatus(location, AppCommon.WarehouseId, "lock", AppCommon.ConnectionString); return BllResultFactory.Sucess(null, "更新成功"); } } catch (Exception ex) { return BllResultFactory.Error(null, "更新失败:" + ex.ToString()); } } public BllResult<List<TaskEntity>> GetTasks(string status, string taskNo, string pallet, DateTime? beginTime, DateTime? endTime) { try { String sql = "select * from task where 1=1 "; if (!String.IsNullOrEmpty(status)) { sql += " and lastStatus = '" + status + "'"; } if (!String.IsNullOrEmpty(taskNo)) { sql += " and id = " + taskNo; } if (!String.IsNullOrEmpty(pallet)) { sql += " and containerCode = '" + pallet + "'"; } if (beginTime != null) { sql += " and created>='" + beginTime.ToString() + "'"; } if (endTime != null) { sql += " and created<='" + endTime.ToString() + "'"; } sql += " ORDER BY lastUpdated "; DataSet ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<List<TaskEntity>>(null, "未找到数据"); } return BllResultFactory.Sucess<List<TaskEntity>>(ds.Tables[0].AsEnumerable().Select(x => new TaskEntity { Id = (int)x["id"], WarehouseId = Convert.ToInt32(x["warehouseId"]), WarehouseCode = x["warehouseCode"]?.ToString(), CompanyId = x["companyId"] is DBNull ? null : (int?)x["companyId"], Priority = Convert.ToInt32(x["priority"]), Type = Convert.ToInt32(x["type"]), Station = x["station"] is DBNull ? null : (int?)x["station"], ContainerId = x["containerId"] is DBNull ? null : (int?)x["containerId"], ContainerCode = x["containerCode"]?.ToString(), SourceLocation = x["sourceLocation"]?.ToString(), DestinationLocation = x["destinationLocation"]?.ToString(), FirstStatus = Convert.ToInt32(x["firstStatus"]), LastStatus = Convert.ToInt32(x["lastStatus"]), Created = x["created"] is DBNull ? null : (DateTime?)x["created"], CreatedBy = x["createdBy"]?.ToString(), BeginTime = x["beginTime"] is DBNull ? null : (DateTime?)x["beginTime"], EndTime = x["endTime"] is DBNull ? null : (DateTime?)x["endTime"], LastUpdated = x["lastUpdated"] is DBNull ? null : (DateTime?)x["lastUpdated"], IsDoubleIn = Convert.ToInt32(x["isDoubleIn"]), SecondDestinationLocation = x["secondDestinationLocation"] is DBNull ? null : x["secondDestinationLocation"].ToString() }).OrderByDescending(t => t.Created).ToList(), "成功"); } catch (Exception ex) { return BllResultFactory.Error<List<TaskEntity>>(null, "获取任务出现异常:" + ex.ToString()); } } public virtual BllResult SendTaskToWCS(int id) { try { var tasks = GetTasks(null, id.ToString(), null, null, null); if (!tasks.Success) { return BllResultFactory.Error(null, "未找到任务"); } var task = tasks.Data[0]; if (task.LastStatus != 0) { return BllResultFactory.Error(null, "任务状态不允许下发"); } string sql = "update task set lastStatus = 10,firstStatus=10 where id = " + id; int i = MySqlHelper.ExecuteNonQuery(AppCommon.ConnectionString, sql); if (i > 0) { return BllResultFactory.Sucess(null, "成功"); } else { return BllResultFactory.Error(null, "更新失败"); } } catch (Exception ex) { return BllResultFactory.Error(null, "更新出现异常:" + ex.ToString()); } } /// <summary> /// 创建任务 /// </summary> /// <param name="palletCode"></param> /// <param name="station"></param> /// <param name="sourceLocation"></param> /// <param name="destinationLocation"></param> /// <param name="status"></param> /// <param name="type"></param> /// <param name="priority"></param> /// <returns>注意,任务实体没有返回</returns> public BllResult<TaskEntity> CreatTask(string palletCode, int station, string sourceLocation, string destinationLocation, int status, int type, int priority) { MySqlConnection mySqlConnection = new MySqlConnection(AppCommon.ConnectionString); MySqlTransaction tran = null; try { //检查参数 if (!String.IsNullOrEmpty(palletCode)) { //校验托盘,查看托盘是否存在任务未完成 int result = Convert.ToInt32(MySqlHelper.ExecuteScalar(AppCommon.ConnectionString, "SELECT count(*) from task where containerCode = @pallet and `lastStatus`<40 and warehouseId= @warehouseId", new MySqlParameter("@pallet", palletCode), new MySqlParameter("@warehouseId", AppCommon.WarehouseId))); if (result > 0) { return BllResultFactory.Error<TaskEntity>(null, "托盘已存在任务"); } } if (type == 100 || type == 500 || type == 800) { if (String.IsNullOrEmpty(destinationLocation)) { return BllResultFactory.Error<TaskEntity>(null, "对于整盘入库、空盘入库和移库目标库位不能为空"); } else if (String.IsNullOrEmpty(palletCode)) { return BllResultFactory.Error<TaskEntity>(null, "对于整盘入库、空盘入库和移库托盘号不能为空"); } else { var temp = CheckLocationForCreateTaskIn(destinationLocation, AppCommon.WarehouseId); if (!temp.Success) { return temp; } } } if (type == 200 || type == 300 || type == 400 || type==900 || type == 600 || type == 700 || type == 800) { if (String.IsNullOrEmpty(sourceLocation)) { return BllResultFactory.Error<TaskEntity>(null, "对于补充入库、整盘出库、分拣出库、空盘出库、出库查看、盘点和移库源库位不能为空"); } else { //校验库位 var temp = GetAllLocations(null, null, null, null, null, null, sourceLocation); if (!temp.Success) { return BllResultFactory.Error<TaskEntity>(null, "未找到" + sourceLocation); } var location = temp.Data[0]; if (location.Status != "empty") { return BllResultFactory.Error<TaskEntity>(null, sourceLocation + "非空闲"); } if (string.IsNullOrEmpty(location.ContainerCode)) { return BllResultFactory.Error<TaskEntity>(null, sourceLocation + "没有托盘"); } if (string.IsNullOrEmpty(palletCode)) { palletCode = location.ContainerCode; } else { if (palletCode != location.ContainerCode) { return BllResultFactory.Error<TaskEntity>(null, sourceLocation + "库位托盘为" + location.ContainerCode + "与录入的" + palletCode + "不一致"); } } } } mySqlConnection.Open(); tran = mySqlConnection.BeginTransaction(); string sql = "insert into task(containerCode,station,sourceLocation,destinationLocation,lastStatus,firstStatus,type,priority,warehouseId,warehouseCode,created,createdBy) " + " VALUES(@pallet, @station, @sourceLocation, @destinationLocation, @lastStatus,@firstStatus, @type, @priority, @warehouseId,@warehouseCode, NOW(),@createdBy)"; List<MySqlParameter> mySqlParameters = new List<MySqlParameter>(); mySqlParameters.Add(new MySqlParameter("@pallet", palletCode)); mySqlParameters.Add(new MySqlParameter("@station", station)); mySqlParameters.Add(new MySqlParameter("@sourceLocation", sourceLocation)); mySqlParameters.Add(new MySqlParameter("@destinationLocation", destinationLocation)); mySqlParameters.Add(new MySqlParameter("@lastStatus", status)); mySqlParameters.Add(new MySqlParameter("@firstStatus", status)); mySqlParameters.Add(new MySqlParameter("@type", type)); mySqlParameters.Add(new MySqlParameter("@priority", priority)); mySqlParameters.Add(new MySqlParameter("@warehouseId", AppCommon.WarehouseId)); mySqlParameters.Add(new MySqlParameter("@createdBy", AppCommon.User.UserName)); mySqlParameters.Add(new MySqlParameter("@warehouseCode", AppCommon.WarehouseCode)); int i = MySqlHelper.ExecuteNonQuery(mySqlConnection, sql, mySqlParameters.ToArray()); if (i == 1) { if (type == 100 || type == 500 || type == 800) { var temp = UpdateLocationStatus(destinationLocation, AppCommon.WarehouseId, "lock", mySqlConnection); if (!temp.Success) { tran.Rollback(); return BllResultFactory.Sucess<TaskEntity>(null, "创建任务失败,更新货位状态失败"); } } if (type == 200 || type == 300 || type == 400 || type == 900 || type == 600 || type == 700 || type == 800) { var temp = UpdateLocationStatus(sourceLocation, AppCommon.WarehouseId, "lock", mySqlConnection); if (!temp.Success) { tran.Rollback(); return BllResultFactory.Sucess<TaskEntity>(null, "创建任务失败,更新货位状态失败"); } } //更新货位状态为预定 tran.Commit(); return BllResultFactory.Sucess<TaskEntity>(null, "成功"); } else { tran.Rollback(); return BllResultFactory.Error<TaskEntity>(null, "插入任务失败"); } } catch (Exception ex) { tran?.Rollback(); return BllResultFactory.Error<TaskEntity>(null, "出现异常:" + ex.ToString()); } finally { mySqlConnection.Close(); mySqlConnection.Dispose(); } } public BllResult<TaskEntity> CheckLocationForCreateTaskIn(String code, int warehouseId) { //校验库位 var ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, "SELECT * from location where `code` = @code and warehouseId = @warehouseId", new MySqlParameter("@code", code), new MySqlParameter("@warehouseId", AppCommon.WarehouseId)); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<TaskEntity>(null, "没有找到库位"); } var dr = ds.Tables[0].AsEnumerable().FirstOrDefault(); if (dr["status"].ToString() != "empty") { return BllResultFactory.Error<TaskEntity>(null, "目标库位非空闲"); } if (!String.IsNullOrEmpty(dr["containerCode"].ToString())) { return BllResultFactory.Error<TaskEntity>(null, "目标库位已有货,请不要重入"); } return BllResultFactory.Sucess<TaskEntity>(null, "OK"); } public BllResult SetTaskStatus(int taskId, int status) { try { string sql = "update task set lastStatus =" + status + ",firstStatus=" + status + " where id =" + taskId; int i = MySqlHelper.ExecuteNonQuery(AppCommon.ConnectionString, sql); if (i > 0) { return BllResultFactory.Sucess(null, "更新成功"); } else { return BllResultFactory.Error(null, "更新失败"); } } catch (Exception ex) { return BllResultFactory.Error(null, "更新出现异常:" + ex.ToString()); } } /// <summary> /// 更新货位状态 /// </summary> /// <param name="locationCode"></param> /// <param name="warehouseId"></param> /// <param name="newStatus"></param> /// <returns></returns> public BllResult<int> UpdateLocationStatus(String locationCode, int warehouseId, String newStatus, MySqlConnection mySqlConnection) { string sql = "update location set `status` = @status where code = @code;"; List<MySqlParameter> mySqlParameters = new List<MySqlParameter>(); mySqlParameters.Add(new MySqlParameter("@status", newStatus)); mySqlParameters.Add(new MySqlParameter("@code", locationCode)); //mySqlParameters.Add(new MySqlParameter("@warehouseId", warehouseId)); int i = MySqlHelper.ExecuteNonQuery(mySqlConnection, sql, mySqlParameters.ToArray()); if (i != 1) { return BllResultFactory.Error<int>(0, "失败"); } else { return BllResultFactory.Sucess<int>(0, "成功"); } } /// <summary> /// 更新货位状态 /// </summary> /// <param name="locationCode"></param> /// <param name="warehouseId"></param> /// <param name="newStatus"></param> /// <returns></returns> public BllResult<int> UpdateLocationStatus(String locationCode, int warehouseId, String newStatus, String mySqlConnection) { string sql = "update location set `status` = @status where code = @code;"; List<MySqlParameter> mySqlParameters = new List<MySqlParameter>(); mySqlParameters.Add(new MySqlParameter("@status", newStatus)); mySqlParameters.Add(new MySqlParameter("@code", locationCode)); //mySqlParameters.Add(new MySqlParameter("@warehouseId", warehouseId)); int i = MySqlHelper.ExecuteNonQuery(mySqlConnection, sql, mySqlParameters.ToArray()); if (i != 1) { return BllResultFactory.Error<int>(0, "失败"); } else { return BllResultFactory.Sucess<int>(0, "成功"); } } /// <summary> /// 完成任务 /// todo:事物管理 /// </summary> /// <param name="task"></param> public virtual BllResult CompleteTask(string taskId) { try { var tasks = GetTasks(null, taskId, null, null, null); if (!tasks.Success) { return BllResultFactory.Error(null, "未找到任务"); } var task = tasks.Data[0]; if (task.LastStatus == 40) { return BllResultFactory.Error(null, "任务已完成请不要重复完成"); } //入库任务将托盘更新到货位上、更新任务状态、更新货位状态 //整入、空入 if (task.Type == 100 || task.Type == 500) { //更新货位状态为空闲 var location = GetAllLocations(null, null, null, null, null, null, task.DestinationLocation).Data[0]; var temp = UpdateLocationStatus(location.Code, task.WarehouseId, "empty", AppCommon.ConnectionString); if (task.IsDoubleIn == 1) { // UpdateLocationStatus(task.SecondDestinationLocation, task.WarehouseId, "empty", AppCommon.ConnectionString); SetLocationPallet(task.SecondDestinationLocation, task.ContainerCode); } else { //更新托盘到货位上 SetLocationPallet(location.Code, task.ContainerCode); } //更新任务状态 SetTaskStatus(task.Id, 40); } //补入、分拣、盘点 if (task.Type == 200 || task.Type == 400 || task.Type == 900 || task.Type == 700) { //更新货位状态为空闲 var location = GetAllLocations(null, null, null, null, null, null, task.SourceLocation).Data[0]; var temp = UpdateLocationStatus(location.Code, task.WarehouseId, "empty", AppCommon.ConnectionString); if (task.IsDoubleIn == 1) { UpdateLocationStatus(task.SecondDestinationLocation, task.WarehouseId, "empty", AppCommon.ConnectionString); SetLocationPallet(task.SecondDestinationLocation, task.ContainerCode); //清除原来货位上的托盘 SetLocationPallet(location.Code, ""); } else { //更新托盘到货位上 SetLocationPallet(location.Code, task.ContainerCode); } //更新任务状态 SetTaskStatus(task.Id, 40); } if (task.Type == 300 || task.Type == 600) { //整出、空出 //更新货位状态为空闲 var location = GetAllLocations(null, null, null, null, null, null, task.SourceLocation).Data[0]; var temp = UpdateLocationStatus(location.Code, task.WarehouseId, "empty", AppCommon.ConnectionString); //清理货位上托盘 SetLocationPallet(location.Code, ""); //更新任务状态 SetTaskStatus(task.Id, 40); } if (task.Type == 800) { //更新货位状态为空闲 var location = GetAllLocations(null, null, null, null, null, null, task.SourceLocation).Data[0]; var location2 = GetAllLocations(null, null, null, null, null, null, task.DestinationLocation).Data[0]; var temp = UpdateLocationStatus(location.Code, task.WarehouseId, "empty", AppCommon.ConnectionString); var temp2 = UpdateLocationStatus(location2.Code, task.WarehouseId, "empty", AppCommon.ConnectionString); //清理货位上托盘 SetLocationPallet(location.Code, ""); if (task.IsDoubleIn == 1) { UpdateLocationStatus(task.SecondDestinationLocation, task.WarehouseId, "empty", AppCommon.ConnectionString); SetLocationPallet(task.SecondDestinationLocation, task.ContainerCode); } else { //新增目标货位上的托盘 SetLocationPallet(location2.Code, task.ContainerCode); } //更新任务状态 SetTaskStatus(task.Id, 40); } return BllResultFactory.Sucess(null, "完成任务成功"); } catch (Exception ex) { return BllResultFactory.Error(null, "完成任务发生异常:" + ex.ToString()); } } /// <summary> /// 删除任务,只有生成未执行的任务可以删除 /// </summary> /// <param name="taskId"></param> /// <returns></returns> public BllResult DeleteTask(int taskId) { try { var tasks = GetTasks(null, taskId.ToString(), null, null, null); if (!tasks.Success) { return BllResultFactory.Error(null, "未找到任务"); } var task = tasks.Data[0]; if (task.LastStatus != 0) { return BllResultFactory.Error(null, "任务状态不允许删除"); } string sql = "DELETE from task where id = " + taskId; int i = MySqlHelper.ExecuteNonQuery(AppCommon.ConnectionString, sql); if (i > 0) { return BllResultFactory.Sucess(null, "删除成功"); } else { return BllResultFactory.Error(null, "删除失败"); } } catch (Exception ex) { return BllResultFactory.Error(null, "删除任务出现异常:" + ex.ToString()); } } /// <summary> /// 根据托盘号获取一条未完成的任务 /// </summary> /// <param name="palletCode"></param> /// <returns></returns> public BllResult<TaskEntity> GetTaskUncompleteByPalletCode(string palletCode) { try { string sql = "SELECT * from task where `lastStatus`<40 and containerCode = '" + palletCode + "'"; var ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<TaskEntity>(null, "未找到数据"); } return BllResultFactory.Sucess<TaskEntity>(ds.Tables[0].AsEnumerable().Select(x => new TaskEntity { Id = (int)x["id"], WarehouseId = Convert.ToInt32(x["warehouseId"]), WarehouseCode = x["warehouseCode"]?.ToString(), CompanyId = x["companyId"] is DBNull ? null : (int?)x["companyId"], Priority = Convert.ToInt32(x["priority"]), Type = Convert.ToInt32(x["type"]), Station = x["station"] is DBNull ? null : (int?)x["station"], ContainerId = x["containerId"] is DBNull ? null : (int?)x["containerId"], ContainerCode = x["containerCode"]?.ToString(), SourceLocation = x["sourceLocation"]?.ToString(), DestinationLocation = x["destinationLocation"]?.ToString(), LastStatus = Convert.ToInt32(x["lastStatus"]), Created = x["created"] is DBNull ? null : (DateTime?)x["created"], CreatedBy = x["createdBy"]?.ToString(), BeginTime = x["beginTime"] is DBNull ? null : (DateTime?)x["beginTime"], EndTime = x["endTime"] is DBNull ? null : (DateTime?)x["endTime"], LastUpdated = x["lastUpdated"] is DBNull ? null : (DateTime?)x["lastUpdated"], }).OrderByDescending(t => t.Created).ToList()[0], "成功"); } catch (Exception ex) { return BllResultFactory.Error<TaskEntity>(null, "获取数据出现异常:" + ex.ToString()); } } /// <summary> /// todo:根据空托盘创建一条空托盘入库任务,暂时不实现 /// </summary> /// <param name="palletCode"></param> /// <returns></returns> public BllResult CreatePalletIn(string palletCode) { return null; } #endregion #region Device public BllResult<List<DeviceEntity>> GetAllDevice() { try { string sql = "select * from devicelist where enable = 1"; var ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<List<DeviceEntity>>(null, "没有数据"); } var list = ds.Tables[0].AsEnumerable().Select(t => new DeviceEntity { Id = (int)t["id"], Code = t["code"].ToString(), Name = t["name"].ToString(), Type = (int)t["type"], IP = t["ip"].ToString(), S7_Connect = t["S7_Connect"].ToString(), GroupName = t["groupName"].ToString(), Enable = Convert.ToBoolean(t["enable"]), DeviceTypeId = (int)t["deviceTypeId"], Roadway = t["roadway"] is DBNull ? -1 : Convert.ToInt32(t["roadway"]), SelfAddress = t["selfAddress"] is DBNull ? -1 : Convert.ToInt32(t["selfAddress"]), BackAddress = t["backAddress"] is DBNull ? null : t["backAddress"].ToString() }).ToList(); return BllResultFactory.Sucess<List<DeviceEntity>>(list, "成功"); } catch (Exception ex) { return BllResultFactory.Error<List<DeviceEntity>>(null, "异常:" + ex.ToString()); } } public BllResult<List<DeviceAddressEntity>> GetAllDeviceAddress() { try { string sql = "select * from deviceaddress where enable = 1"; var ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<List<DeviceAddressEntity>>(null, "没有数据"); } var list = ds.Tables[0].AsEnumerable().Select(t => new DeviceAddressEntity { Id = (int)t["id"], DeviceId = t["deviceId"] is DBNull ? null : (int?)t["deviceId"], DevicePropId = t["devicePropId"] is DBNull ? null : (int?)t["devicePropId"], DevicePropCode = t["devicePropCode"].ToString(), ServerHandle = (int)t["serverHandle"], Address = t["address"].ToString(), value = t["value"].ToString(), Enable = Convert.ToBoolean(t["enable"]) }).ToList(); return BllResultFactory.Sucess<List<DeviceAddressEntity>>(list, "成功"); } catch (Exception ex) { return BllResultFactory.Error<List<DeviceAddressEntity>>(null, "异常:" + ex.ToString()); } } public BllResult<List<DevicePropEntity>> GetAllDeviceProp() { try { string sql = "select * from deviceprop where enable=1"; var ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<List<DevicePropEntity>>(null, "没有数据"); } var list = ds.Tables[0].AsEnumerable().Select(t => new DevicePropEntity { Id = (int)t["id"], DeviceTypeId = (int)t["deviceTypeId"], Code = t["code"].ToString(), Name = t["name"].ToString(), Type = t["type"].ToString(), Description = t["description"].ToString(), Enable = Convert.ToBoolean(t["enable"]), IsMonitor = t["isMonitor"] is DBNull ? null : (int?)t["isMonitor"], MonitorCompareValue = t["monitorCompareValue"] is DBNull ? null : t["monitorCompareValue"].ToString(), MonitorFailure = t["monitorFailure"] is DBNull ? null : t["monitorFailure"].ToString(), MonitorNormal = t["monitorNormal"] is DBNull ? null : t["monitorNormal"].ToString(), }).ToList(); return BllResultFactory.Sucess<List<DevicePropEntity>>(list, "成功"); } catch (Exception ex) { return BllResultFactory.Error<List<DevicePropEntity>>(null, "异常:" + ex.ToString()); } } public BllResult<List<DeviceTypeEntity>> GetAllDeviceType() { try { string sql = "select * from devicetype where enable=1"; var ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<List<DeviceTypeEntity>>(null, "没有数据"); } var list = ds.Tables[0].AsEnumerable().Select(t => new DeviceTypeEntity { Id = (int)t["id"], Code = t["code"].ToString(), Name = t["name"].ToString(), Description = t["description"].ToString(), Enable = Convert.ToBoolean(t["enable"]) }).ToList(); return BllResultFactory.Sucess<List<DeviceTypeEntity>>(list, "成功"); } catch (Exception ex) { return BllResultFactory.Error<List<DeviceTypeEntity>>(null, "异常:" + ex.ToString()); } } #endregion #region location public BllResult SetLocationPallet(string locationCode, string palletCode) { try { if (String.IsNullOrEmpty(locationCode) || palletCode == null) { return BllResultFactory.Error(null, "参数不全"); } string sql = "update location set containerCode ='" + palletCode + "' where code ='" + locationCode + "'"; int i = MySqlHelper.ExecuteNonQuery(AppCommon.ConnectionString, sql); if (i > 0) { return BllResultFactory.Sucess(null, "更新成功"); } else { return BllResultFactory.Error(null, "更新失败"); } } catch (Exception ex) { return BllResultFactory.Error(null, "更新出现异常:" + ex.ToString()); } } public BllResult<List<LocationEntity>> GetAllLocations(String containerCode, string row, string column, string layer, string roadway, string status, string code) { try { string sql = "select * from location where 1=1 "; if (!String.IsNullOrEmpty(containerCode)) { sql += " and containerCode = '" + containerCode + "'"; } if (!String.IsNullOrEmpty(row)) { sql += " and row =" + row; } if (!String.IsNullOrEmpty(column)) { sql += " and line =" + column; } if (!String.IsNullOrEmpty(layer)) { sql += " and layer =" + layer; } if (!String.IsNullOrEmpty(roadway)) { sql += " and roadway =" + roadway; } if (!String.IsNullOrEmpty(status) && status != "all") { sql += " and status = '" + status + "'"; } if (!String.IsNullOrEmpty(code)) { sql += " and code ='" + code + "'"; } var ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<List<LocationEntity>>(null, "没有数据"); } var list = ds.Tables[0].AsEnumerable().Select(t => new LocationEntity { Id = (int)t["id"], Code = t["code"].ToString(), WarehouseCode = t["warehouseCode"].ToString(), Row = Convert.ToInt32(t["row"]), Line = Convert.ToInt32(t["line"]), Layer = Convert.ToInt32(t["layer"]), Grid = t["grid"] is DBNull ? 0 : Convert.ToInt32(t["grid"]), Roadway = (int)t["roadway"], ContainerCode = t["containerCode"] is DBNull ? "" : t["containerCode"].ToString(), Status = t["status"].ToString() }).ToList(); return BllResultFactory.Sucess<List<LocationEntity>>(list, "成功"); } catch (Exception ex) { return BllResultFactory.Error<List<LocationEntity>>(null, "访问异常:" + ex.ToString()); } } #endregion #region pallet public BllResult<List<ContainerEntity>> GetAllContainer(string code, bool isInLocation, bool isPrint) { try { string sql = "select * from container t where 1=1 "; if (!String.IsNullOrEmpty(code)) { sql += " and t.code = '" + code + "'"; } if (isPrint) { sql += " and t.printCount > 0"; } if (isInLocation) { sql += " and EXISTS(SELECT * from location where containerCode = t.`code`);"; } var ds = MySqlHelper.ExecuteDataset(AppCommon.ConnectionString, sql); if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0) { return BllResultFactory.Error<List<ContainerEntity>>(null, "没有数据"); } var list = ds.Tables[0].AsEnumerable().Select(t => new ContainerEntity { Id = (int)t["id"], Code = t["code"].ToString(), Status = t["status"] is DBNull ? "" : t["status"].ToString(), PrintCount = (int)t["printCount"], Enable = Convert.ToBoolean(t["enable"]) }).ToList(); return BllResultFactory.Sucess<List<ContainerEntity>>(list, "成功"); } catch (Exception ex) { return BllResultFactory.Error<List<ContainerEntity>>(null, "访问异常:" + ex.ToString()); } } /// <summary> /// todo: 托盘添加 /// </summary> /// <param name="code"></param> /// <param name="warehouseCode"></param> /// <param name="warehouseId"></param> /// <param name="containerTypeId"></param> /// <returns></returns> public BllResult CreateContainer(string code, string warehouseCode, int warehouseId, int containerTypeId) { try { string sql = $"insert into container(code ,warehouseId,warehouseCode,containerTypeId,status) values ('{code}',{warehouseId},'{warehouseCode}',{containerTypeId},1)"; int i = MySqlHelper.ExecuteNonQuery(AppCommon.ConnectionString, sql); if (i == 0) { return BllResultFactory.Error(null, "插入失败"); } else { return BllResultFactory.Sucess(null, "插入成功"); } } catch (Exception ex) { return BllResultFactory.Error(null, "异常:" + ex.ToString()); } } public BllResult UpdatePallet(string code, string print, string status) { try { if (String.IsNullOrEmpty(print) && String.IsNullOrEmpty(status)) { return BllResultFactory.Error(null, "数据不全"); } string sql = "update container set "; bool flag = false; if (!String.IsNullOrEmpty(print)) { sql += "printCount = printCount+" + print; flag = true; } if (!String.IsNullOrEmpty(status)) { if (flag) { sql += ", "; } sql += "`status` = '" + status + "'"; } sql += " where code ='" + code + "'"; int i = MySqlHelper.ExecuteNonQuery(AppCommon.ConnectionString, sql); if (i > 0) { return BllResultFactory.Sucess(null, "成功"); } else { return BllResultFactory.Error(null, "更新失败"); } } catch (Exception ex) { return BllResultFactory.Error(null, "更新打印次数出现异常:" + ex.ToString()); } } #endregion #region 字符串和Byte之间的转化 /// <summary> /// 数字和字节之间互转 /// </summary> /// <param name="num"></param> /// <returns></returns> public int IntToBitConverter(int num) { int temp = 0; byte[] bytes = BitConverter.GetBytes(num);//将int32转换为字节数组 temp = BitConverter.ToInt32(bytes, 0);//将字节数组内容再转成int32类型 return temp; } /// <summary> /// 将字符串转为16进制字符,允许中文 /// </summary> /// <param name="s"></param> /// <param name="encode"></param> /// <returns></returns> public string StringToHexString(string s, Encoding encode, string spanString) { byte[] b = encode.GetBytes(s);//按照指定编码将string编程字节数组 string result = string.Empty; for (int i = 0; i < b.Length; i++)//逐字节变为16进制字符 { result += Convert.ToString(b[i], 16) + spanString; } return result; } /// <summary> /// 将16进制字符串转为字符串 /// </summary> /// <param name="hs"></param> /// <param name="encode"></param> /// <returns></returns> public string HexStringToString(string hs, Encoding encode) { string strTemp = ""; byte[] b = new byte[hs.Length / 2]; for (int i = 0; i < hs.Length / 2; i++) { strTemp = hs.Substring(i * 2, 2); b[i] = Convert.ToByte(strTemp, 16); } //按照指定编码将字节数组变为字符串 return encode.GetString(b); } /// <summary> /// byte[]转为16进制字符串 /// </summary> /// <param name="bytes"></param> /// <returns></returns> public string ByteToHexStr(byte[] bytes) { string returnStr = ""; if (bytes != null) { for (int i = 0; i < bytes.Length; i++) { returnStr += bytes[i].ToString("X2"); } } return returnStr; } /// <summary> /// 将16进制的字符串转为byte[] /// </summary> /// <param name="hexString"></param> /// <returns></returns> public byte[] StrToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; } public string ASCIIToString(short[] ints) { String str = ""; foreach (var item in ints) { str += Chr(item); } return str; } public string Chr(int asciiCode) { if (asciiCode >= 0 && asciiCode <= 255) { System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding(); byte[] byteArray = new byte[] { (byte)asciiCode }; string strCharacter = asciiEncoding.GetString(byteArray); return (strCharacter); } else { throw new Exception("ASCII Code is not valid."); } } public byte[] StringToASCII(string str) { System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding(); return asciiEncoding.GetBytes(str.PadRight(20, ' ')); } public short Asc(string character) { if (character.Length == 1) { System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding(); short intAsciiCode = (short)asciiEncoding.GetBytes(character)[0]; return (intAsciiCode); } else { throw new Exception("Character is not valid."); } } #endregion #region Common public BllResult HeartBeat() { return BllResultFactory.Sucess(null, "默认实现"); } #endregion } }