zhao
2021-06-11 98186752629a7bd38965418af84db382d90b9c07
移送任务,MES下达的任务生成WMS主任务
9个文件已修改
4个文件已添加
1515 ■■■■■ 已修改文件
HH.WMS.BLL/External/WmsApiBaseBLL.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.BLL/HH.WMS.BLL.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.BLL/Pda/ZCBLL.cs 1092 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.Entitys/Dto/ZCTransferDto.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.Entitys/Entitys/Mes/TN_MES_TASK.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.Entitys/External/ZCReceiveTaskEntity.cs 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.Entitys/HH.WMS.Entitys.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.WebApi/Config.json 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.WebApi/Controllers/WmsApiController.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.WebApi/Extension/ExecSelfManageTask.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.WebApi/Extension/ExecTransferTask.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.WebApi/Web.config 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.WebUI/Web.config 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WMS.BLL/External/WmsApiBaseBLL.cs
@@ -2,6 +2,7 @@
using HH.WMS.BLL.Basic;
using HH.WMS.BLL.InStock;
using HH.WMS.BLL.Interface;
using HH.WMS.BLL.Pda;
using HH.WMS.BLL.SysMgr;
using HH.WMS.Common;
using HH.WMS.Common.Algorithm;
@@ -19,6 +20,7 @@
using HH.WMS.Entitys.Common;
using HH.WMS.Entitys.Dto;
using HH.WMS.Entitys.Entitys;
using HH.WMS.Entitys.Entitys.Mes;
using HH.WMS.Entitys.External;
using Newtonsoft.Json;
using System;
@@ -2754,5 +2756,44 @@
            }
        }
        /// <summary>
        /// 接收任务
        /// </summary>
        /// <param name="receuveTask"></param>
        /// <returns></returns>
        public OperateResult ReceiveTask(ZCReceiveTaskEntity receuveTask)
        {
            TN_MES_TASK req = new TN_MES_TASK()
            {
                task_no = receuveTask.task_no,
                Task_type = receuveTask.Task_type,
                TurnCardNum = receuveTask.TurnCardNum,
                PROD_NO = receuveTask.PROD_NO,
                PROD_TECH = receuveTask.PROD_TECH,
                PROD_SPEC = receuveTask.PROD_SPEC,
                PROD_BOM = receuveTask.PROD_BOM,
                PROD_Feature = receuveTask.PROD_Feature,
                TOOLS_NO = receuveTask.TOOLS_NO,
                ST_AMOUNT = receuveTask.ST_AMOUNT,
                CURRENT_AMOUNT = receuveTask.CURRENT_AMOUNT,
                Location_From = receuveTask.Location_From,
                Location_To = receuveTask.Location_To,
                PRODUCE_TIME = receuveTask.PRODUCE_TIME,
                SHELF_LIFE_TIME = receuveTask.SHELF_LIFE_TIME,
                EXPIRED_TIME = receuveTask.EXPIRED_TIME,
                SHELF_REP = receuveTask.SHELF_REP,
                EXPIRED_REP = receuveTask.EXPIRED_REP,
                CHECK_CODE = receuveTask.CHECK_CODE,
                CHECK_INFO = receuveTask.CHECK_INFO,
                Priority = receuveTask.Priority,
                Data_status = receuveTask.Data_status,
                NeedTrig = "Y",
                CreateDate = DateTime.Now,
                BUSI_TYPE = receuveTask.BUSI_TYPE
            };
            return BLLCreator.Create<ZCBLL>().SaveTask(req);
        }
    }
}
HH.WMS.BLL/HH.WMS.BLL.csproj
@@ -159,6 +159,7 @@
    <Compile Include="Pda\ProdBLL.cs" />
    <Compile Include="Pda\NtApiBLL.cs" />
    <Compile Include="Pda\YuShouApiBLL.cs" />
    <Compile Include="Pda\ZCBLL.cs" />
    <Compile Include="Project\Tzlj\MesStackTrayBLL.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="SysMgr\StockInitBLL.cs" />
HH.WMS.BLL/Pda/ZCBLL.cs
New file
@@ -0,0 +1,1092 @@
using HH.WMS.BLL.Basic;
using HH.WMS.BLL.External;
using HH.WMS.BLL.Interface;
using HH.WMS.BLL.MiddleDB;
using HH.WMS.Common;
using HH.WMS.Common.External;
using HH.WMS.Common.Response;
using HH.WMS.DAL.Basic;
using HH.WMS.DAL.Pda;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Autobom;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Common;
using HH.WMS.Entitys.Dto;
using HH.WMS.Entitys.Entitys.Mes;
using HH.WMS.Entitys.External;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.BLL.Pda
{
    public class ZCBLL : DapperBaseBLL
    {
        #region 保存任务
        public OperateResult SaveTask(TN_MES_TASK task)
        {
            OperateResult result = BLLCreator.CreateDapper<TN_MES_TASK>().Add(task);
            return result;
        }
        #endregion
        #region 根据库区取占用的货位
        /// <summary>
        /// 根据库区取占用的货位
        /// </summary>
        /// <param name="areaCode"></param>
        /// <returns></returns>
        public List<TN_WM_LOCATION_EXTEntity> GetUsedLocationByArea(string areaCode)
        {
            return CreateDAL<GlDAL>().GetUsedLocationByArea(areaCode);
        }
        #endregion
        #region 移库
        /// <summary>
        /// 移库
        /// </summary>
        /// <param name="transferType"></param>
        public void TransferRubber(string transferType)
        {
            string workFlowName = string.Empty;
            switch (transferType)
            {
                case "transferOfFinalRubber":
                    workFlowName = WorkFlowName.FlowNameList["Z3"];
                    break;
                case "transferOfRawRubber":
                    workFlowName = WorkFlowName.FlowNameList["S2"];
                    break;
            }
            if (string.IsNullOrEmpty(workFlowName))
                TransferRubberThrow(new Exception("未找到移库工作流名称"), workFlowName);
            var isEnableAms = new GLTransferDto();
            var _isEnableAmsStr = JsonHelper.GetValue("isSendAms");
            if (!string.IsNullOrEmpty(_isEnableAmsStr))
            {
                isEnableAms = JsonConvert.DeserializeObject<GLTransferDto>(_isEnableAmsStr);
                isEnableAms = isEnableAms ?? new GLTransferDto();
            }
            try
            {
                var mapStr = JsonHelper.GetValue(transferType);
                if (string.IsNullOrEmpty(mapStr))
                    return;
                var config = JsonConvert.DeserializeObject<GLTransferDto>(mapStr);
                if (IsWorkTime(config))
                {
                    var usedLocations = BLLCreator.Create<GlBLL>().GetUsedLocationByArea(config.endArea);
                    if (usedLocations.Count < config.transferMax)
                    {
                        mapStr = JsonHelper.GetValue("workFlowTransType");
                        if (string.IsNullOrEmpty(mapStr))
                            return;
                        var workFlowTransType = JsonConvert.DeserializeObject<List<GLTransferDto>>(mapStr);
                        var existsWorkFlow = workFlowTransType.Find(f => f.workFlowName == workFlowName);
                        if (existsWorkFlow == null)
                        {
                            TransferRubberThrow(new Exception("未找到移库方向"), workFlowName);
                        }
                        TN_WM_B_MAKE_TASKEntity makeReq = new TN_WM_B_MAKE_TASKEntity()
                        {
                            CN_S_START_AREA = config.startArea,
                            CN_S_END_AREA = config.endArea,
                            CN_S_ITEM_CODE = config.itemCode,
                            CN_S_NEED_AMS = Constants.Y,
                            CN_S_WORKFLOW_NAME = workFlowName,
                            CN_S_ISTRANSPORT = isEnableAms.moveStockEnableAms,
                            //CN_F_QUANTITY = 1
                        };
                        var externalRes = new ExternalResponse();
                        if (existsWorkFlow.transType == "In")
                        {
                            try
                            {
                                var res = BLLCreator.Create<GlBLL>().GLInWorkArea(makeReq);
                                externalRes = JsonConvert.DeserializeObject<ExternalResponse>(res);
                            }
                            catch (Exception ex)
                            {
                                TransferRubberThrow(ex, workFlowName);
                            }
                        }
                        else
                        {
                            try
                            {
                                var res = BLLCreator.Create<GlBLL>().GLOutWorkArea(makeReq);
                                externalRes = JsonConvert.DeserializeObject<ExternalResponse>(res);
                            }
                            catch (Exception ex)
                            {
                                TransferRubberThrow(ex, workFlowName);
                            }
                        }
                        if (!externalRes.success)
                        {
                            TransferRubberThrow(new Exception(externalRes.errMsg), workFlowName);
                        }
                        else//成功的话写移库记录
                        {
                            var ok = externalRes.okList[0];
                            AGV_Transfer_record _log = new AGV_Transfer_record()
                            {
                                ID = Guid.NewGuid().ToString(),
                                LoadNo = ok.trayCode,
                                MaterielCode = config.itemCode,
                                MaterielName = config.itemName,
                                Quantity = 1,
                                LocationName_Source = ok.startBit,
                                LocationName_Dest = ok.endBit,
                                CreateDate = DateTime.Now,
                                HasBeenReceived = Constants.Y
                            };
                            var _or = BLLCreator.CreateMiddleDapper<AGV_Transfer_record>().Add(_log);
                            if (!_or.Success)
                            {
                                TransferRubberThrow(new Exception("下达成功,写入移库记录失败:" + _or.Msg), workFlowName);
                                //throw new Exception("下达成功,写入移库记录失败:" + _or.Msg);
                                //ors.Add(OperateResult.Succeed("下达成功,写入移送任务日志失败:" + _or.Msg, req));
                            }
                            var _serviceExec = new TN_WM_SERVICE_EXECEntity()
                            {
                                CN_S_TASK_NO = Guid.NewGuid().ToString(),
                                CN_S_ITEM_CODE = config.itemCode,
                                CN_S_ITEM_NAME = config.itemName,
                                CN_S_TASK_TYPE = "移库",
                                CN_S_TRANS_TYPE = workFlowName,
                                CN_S_TRAY_CODE = ok.trayCode,
                                CN_N_PRIORITY = 1,
                                CN_S_START_LOCATION = ok.startBit,
                                CN_S_END_LOCATION = ok.endBit,
                                CN_T_CREATE = DateTime.Now,
                                CN_C_COMPLETE = Constants.Y,
                                CN_C_SEND_MES = Constants.Y,
                                CN_S_MSG = "下达成功"
                            };
                            var or = BLLCreator.CreateDapper<TN_WM_SERVICE_EXECEntity>().Add(_serviceExec);
                            if (!or.Success)
                                throw new Exception(or.Msg);
                            Log.DomainInfo(workFlowName + "移库成功", JsonConvert.SerializeObject(externalRes));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.DomainInfo(workFlowName + " Error", ex.Message);
            }
        }
        #endregion
        #region 移库异常记录
        /// <summary>
        /// 移库异常记录
        /// </summary>
        /// <param name="ex"></param>
        private void TransferRubberThrow(Exception ex, string workFlowName)
        {
            var lastServiceExec = BLLCreator.CreateDapper<TN_WM_SERVICE_EXECEntity>().GetSingleEntity(new
            {
                CN_S_TASK_TYPE = "移库",
                CN_S_TRANS_TYPE = workFlowName,
            }, " ORDER BY CN_T_CREATE DESC ");
            if (lastServiceExec != null && ex.Message == lastServiceExec.CN_S_MSG)
            {
                BLLCreator.CreateDapper<TN_WM_SERVICE_EXECEntity>().Update(new
                {
                    CN_T_CREATE = DateTime.Now
                }, new
                {
                    CN_S_TASK_NO = lastServiceExec.CN_S_TASK_NO
                });
                throw ex;
            }
            TN_WM_SERVICE_EXECEntity serviceExec = new TN_WM_SERVICE_EXECEntity()
            {
                CN_S_TASK_NO = Guid.NewGuid().ToString(),
                CN_S_TASK_TYPE = "移库",
                CN_S_TRANS_TYPE = workFlowName,
                CN_T_CREATE = DateTime.Now,
                CN_C_COMPLETE = Constants.Y,
                CN_C_SEND_MES = Constants.N,
                CN_S_MSG = ex.Message
            };
            var or = BLLCreator.CreateDapper<TN_WM_SERVICE_EXECEntity>().Add(serviceExec);
            if (!or.Success)
                throw new Exception(or.Msg);
            throw ex;
        }
        #endregion
        #region 移送任务
        /// <summary>
        /// 移送任务
        /// </summary>
        /// <param name="transportReqs"></param>
        public List<OperateResult> ExecTransferTask(List<TN_MES_TASK> transportReqs)
        {
            var mapStr = JsonHelper.GetValue("workFlowTransType");
            if (string.IsNullOrEmpty(mapStr))
                throw new Exception("未找到配置:workFlowTransType");
            var isEnableAms = new ZCTransferDto();
            var _isEnableAmsStr = JsonHelper.GetValue("isSendAms");
            if (!string.IsNullOrEmpty(_isEnableAmsStr))
            {
                isEnableAms = JsonConvert.DeserializeObject<ZCTransferDto>(_isEnableAmsStr);
                isEnableAms = isEnableAms ?? new ZCTransferDto();
            }
            var workFlowTransType = JsonConvert.DeserializeObject<List<ZCTransferDto>>(mapStr);
            List<OperateResult> ors = new List<OperateResult>();
            if (transportReqs.Any())
            {
                foreach (var req in transportReqs)
                {
                    string startBit = req.Location_From;
                    string endBit = req.Location_To;
                    string startArea = string.Empty, endArea = string.Empty;
                    //校验起点
                    if (!string.IsNullOrEmpty(startBit))
                    {
                        var _location = BLLCreator.CreateDapper<TN_WM_LOCATION_EXTEntity>().GetSingleEntity(new
                        {
                            CN_S_LOCATION_CODE = startBit
                        });
                        if (_location == null)
                        {
                            ors.Add(OperateResult.Error("未找到起始货位:" + startBit, req));
                            continue;
                        }
                        startArea = Util.ToString(_location.CN_S_AREA_CODE).Trim();
                    }
                    //校验终点
                    if (!string.IsNullOrEmpty(endBit))
                    {
                        var _location = BLLCreator.CreateDapper<TN_WM_LOCATION_EXTEntity>().GetSingleEntity(new
                        {
                            CN_S_LOCATION_CODE = endBit
                        });
                        if (_location == null)
                        {
                            ors.Add(OperateResult.Error("未找到终点货位:" + endBit, req));
                            continue;
                        }
                        endArea = Util.ToString(_location.CN_S_AREA_CODE).Trim();
                    }
                    if (string.IsNullOrEmpty(startArea) && string.IsNullOrEmpty(endArea))
                    {
                        ors.Add(OperateResult.Error("起点终点不可同时为空"));
                        continue;
                    }
                    //找作业路径
                    //var workRoute = BLLCreator.Create<TN_AB_B_WORK_AREA_PROBLL>().GetSingleRoute(startArea, endArea);
                    //if (workRoute == null)
                    //{
                    //    ors.Add(OperateResult.Error("未找到作业路径", req));
                    //    continue;
                    //}
                    var workRoute = new TN_AB_B_WORK_AREA_PROEntity();
                    var workRoutes = BLLCreator.Create<TN_AB_B_WORK_AREA_PROBLL>().GetRoute("", startArea, endArea);
                    if (!workRoutes.Any())
                    {
                        ors.Add(OperateResult.Error("未找到作业路径", req));
                        continue;
                    }
                    else
                    {
                        workRoute = workRoutes[0];
                        if (workRoutes.Count > 1)
                        {
                            if (workRoutes.Exists(e => Util.ToString(e.CN_S_TYPE_CODE) == "X6" || Util.ToString(e.CN_S_TYPE_CODE) == "X7"))
                            {
                                if (string.IsNullOrEmpty(req.PROD_NO))
                                {
                                    workRoute = workRoutes.Find(f => f.CN_S_TYPE_CODE == "X6");
                                }
                                else
                                {
                                    workRoute = workRoutes.Find(f => f.CN_S_TYPE_CODE == "X7");
                                }
                            }
                        }
                        if (workRoute == null)
                        {
                            ors.Add(OperateResult.Error("未找到作业路径", req));
                            continue;
                        }
                    }
                    var existsWorkFlow = workFlowTransType.Find(f => f.workFlowCode == workRoute.CN_S_TYPE_CODE);
                    if (existsWorkFlow == null)
                    {
                        ors.Add(OperateResult.Error("未找到作业方向", req));
                        continue;
                    }
                    TN_WM_B_MAKE_TASKEntity makeReq = new TN_WM_B_MAKE_TASKEntity()
                    {
                        CN_S_ITEM_CODE = req.PROD_NO,
                        CN_S_ITEM_NAME = "",
                        CN_S_START_BIT = req.Location_From,
                        CN_S_START_AREA = workRoute.CN_S_START_AREA_CODE,
                        CN_S_END_BIT = req.Location_To,
                        CN_S_END_AREA = workRoute.CN_S_END_AREA_CODE,
                        CN_S_TRAY_CODE = req.TurnCardNum,
                        CN_S_PRIORITY = req.Priority.ToString(),
                        CN_S_WORKFLOW_NAME = WorkFlowName.FlowNameList[existsWorkFlow.workFlowCode],
                        CN_F_QUANTITY = Convert.ToDecimal(req.CURRENT_AMOUNT),
                        CN_S_NEED_AMS = isEnableAms.transferEnableAms,
                        CN_S_ISTRANSPORT = existsWorkFlow.isTransport
                    };
                    var externalRes = new ExternalResponse();
                    if (existsWorkFlow.transType == "In")
                    {
                        try
                        {
                            var res = BLLCreator.Create<ZCBLL>().GLInWorkArea(makeReq);
                            externalRes = JsonConvert.DeserializeObject<ExternalResponse>(res);
                        }
                        catch (Exception ex)
                        {
                            ors.Add(OperateResult.Error("入作业区失败:" + ex.Message, req));
                            continue;
                        }
                    }
                    else
                    {
                        try
                        {
                            var res = BLLCreator.Create<ZCBLL>().GLOutWorkArea(makeReq);
                            externalRes = JsonConvert.DeserializeObject<ExternalResponse>(res);
                        }
                        catch (Exception ex)
                        {
                            ors.Add(OperateResult.Error("出作业区失败:" + ex.Message, req));
                            continue;
                        }
                    }
                    var _serviceExec = BLLCreator.CreateDapper<TN_WM_SERVICE_EXECEntity>().GetSingleEntity(new
                    {
                        CN_S_TASK_NO = req.task_no
                    });
                    if (_serviceExec != null)
                    {
                        _serviceExec.Update = true;
                    }
                    else
                    {
                        _serviceExec = new TN_WM_SERVICE_EXECEntity()
                        {
                            CN_S_TASK_NO = req.task_no,
                            CN_S_ITEM_CODE = req.PROD_NO,
                            CN_S_ITEM_NAME = "",
                            CN_S_TASK_TYPE = "移送",
                            CN_S_TRANS_TYPE = WorkFlowName.FlowNameList[existsWorkFlow.workFlowCode],
                            CN_S_TRAY_CODE = req.TurnCardNum,
                            CN_N_PRIORITY = req.Priority,
                            CN_S_START_LOCATION = req.Location_From,
                            CN_S_END_LOCATION = req.Location_To,
                            CN_T_CREATE = DateTime.Now,
                            CN_C_COMPLETE = Constants.N,
                            CN_C_SEND_MES = Constants.N,
                            CN_F_QUANTITY = Convert.ToDecimal(req.CURRENT_AMOUNT),
                            CN_N_REQUEST_TYPE = 0,//req.RequestType,
                            CN_S_TRAY_TYPE = "0"//req.LoadType
                        };
                    }
                    if (!externalRes.success)
                    {
                        //写任务执行表,并回报mes
                        if (externalRes.errCode == "7" || externalRes.errCode == "8")
                        {
                            _serviceExec.CN_C_COMPLETE = Constants.Y;
                            _serviceExec.CN_C_SEND_MES = Constants.Y;
                            _serviceExec.CN_S_MSG = externalRes.errMsg;
                        }
                        else
                        {
                            _serviceExec.CN_C_COMPLETE = Constants.N;
                            _serviceExec.CN_C_SEND_MES = Constants.N;
                            _serviceExec.CN_S_MSG = externalRes.errMsg;
                        }
                        var _or = TransportSuccess(_serviceExec);
                        if (!_or.Success)
                        {
                            Log.DomainInfo("TransportSuccess error", _or.Msg);
                            Log.DomainInfo("externalRes Error: " + externalRes.errMsg, JsonConvert.SerializeObject(req));
                            ors.Add(OperateResult.Error("TransportSuccess error", _or.Msg));
                        }
                        else
                        {
                            if (externalRes.errCode == "7" || externalRes.errCode == "8")
                            {
                                ors.Add(OperateResult.Warning("已反馈至mes,消息: " + externalRes.errMsg, req));
                            }
                            else
                            {
                                ors.Add(OperateResult.Error("externalRes Error: " + externalRes.errMsg, req));
                            }
                        }
                    }
                    else//成功的话写移送任务日志
                    {
                        var ok = externalRes.okList[0];
                        _serviceExec.CN_S_START_LOCATION = ok.startBit;
                        _serviceExec.CN_S_END_LOCATION = ok.endBit;
                        _serviceExec.CN_C_COMPLETE = Constants.Y;
                        _serviceExec.CN_C_SEND_MES = Constants.Y;
                        _serviceExec.CN_S_MSG = "下达成功";
                        var _or = TransportSuccess(_serviceExec);
                        if (!_or.Success)
                        {
                            ors.Add(OperateResult.Warning("下达成功,更新移送任务日志失败:" + _or.Msg, req));
                            continue;
                        }
                        ors.Add(OperateResult.Succeed("下达成功", req));
                    }
                }
                Log.DomainInfo("移送任务 结果", JsonConvert.SerializeObject(ors));
            }
            return ors;
        }
        #endregion
        #region 判断是否在工作时间
        /// <summary>
        /// 判断是否在工作时间
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        private bool IsWorkTime(GLTransferDto config)
        {
            try
            {
                TimeSpan dspWorkingDayAM = config.startTime.TimeOfDay;
                TimeSpan dspWorkingDayPM = config.endTime.TimeOfDay;
                TimeSpan dspNow = DateTime.Now.TimeOfDay;
                if (dspNow >= dspWorkingDayAM && dspNow <= dspWorkingDayPM)
                {
                    return true;
                }
                return false;
            }
            catch
            {
                return false;
            }
        }
        #endregion
        /// <summary>
        /// 入作业区
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public string GLInWorkArea(TN_WM_B_MAKE_TASKEntity entity)
        {
            ExternalResponse result = new ExternalResponse();
            try
            {
                Log.Info("处理位置信息开始:", JsonConvert.SerializeObject(entity));
                //处理位置信息
                CheckPosition(ref entity);
                Log.Info("处理位置信息结束:", JsonConvert.SerializeObject(entity));
                //传递参数
                List<InWorkAreaEntity> inWorkAreaEntitys = new List<InWorkAreaEntity>();
                InWorkAreaEntity model = new InWorkAreaEntity();
                model.itemCode = entity.CN_S_ITEM_CODE;
                model.trayCode = entity.CN_S_TRAY_CODE;
                model.priority = Convert.ToInt32(entity.CN_S_PRIORITY);
                model.startBit = entity.CN_S_START_BIT;
                model.startArea = entity.CN_S_START_AREA;
                model.startStock = entity.CN_S_START_STOCK;
                model.endBit = entity.CN_S_END_BIT;
                model.endArea = entity.CN_S_END_AREA;
                model.endStock = entity.CN_S_END_STOCK;
                model.remark = entity.CN_S_WORKFLOW_NAME;
                model.isBackItem = "";
                model.needCreateAMSTask = entity.CN_S_NEED_AMS;
                //标记是否是退回物料(生胶、小料、母胶、终炼胶小盘料退回,余料格栅车退回,余料帘布退回)
                string workFlowName = entity.CN_S_WORKFLOW_NAME;
                if (workFlowName == WorkFlowName.FlowNameList["S5"] || workFlowName == WorkFlowName.FlowNameList["X7"] || workFlowName == WorkFlowName.FlowNameList["M5"] || workFlowName == WorkFlowName.FlowNameList["Z6"] || workFlowName == WorkFlowName.FlowNameList["T5"] || workFlowName == WorkFlowName.FlowNameList["L5"])
                {
                    model.isBackItem = Constants.Y;
                }
                List<string> keyList = (from q in WorkFlowName.FlowNameList
                                        where q.Value == entity.CN_S_WORKFLOW_NAME
                                        select q.Key).ToList<string>(); //get all keys
                var funcName = WorkFlowName.FlowNameList.FirstOrDefault(q => q.Value == entity.CN_S_WORKFLOW_NAME).Key;
                if (funcName != "" && funcName != null)
                {
                    model.funCode = funcName;
                }
                //物料编码不为空时 才组织Data
                if (!string.IsNullOrEmpty(entity.CN_S_ITEM_CODE))
                {
                    var item = BLLCreator.Create<TN_WMS_ITEMBLL>().GetItem(entity.CN_S_ITEM_CODE);
                    List<ChaoYangItemDataEntity> DataList = new List<ChaoYangItemDataEntity>();
                    DataList.Add(new ChaoYangItemDataEntity
                    {
                        itemCode = entity.CN_S_ITEM_CODE,
                        qty = Convert.ToInt32(entity.CN_F_QUANTITY),
                        itemModel = item == null ? "" : item.CN_S_MODEL,
                        itemPackUnit = item == null ? "" : item.CN_S_MEASURE_UNIT,
                        itemName = item == null ? "" : item.CN_S_ITEM_NAME,
                        itemState = "合格"
                    });
                    model.data = DataList;
                }
                inWorkAreaEntitys.Add(model);
                Log.Info("开始进入入库,传参:", JsonConvert.SerializeObject(inWorkAreaEntitys));
                result = BLLCreator.Create<WmsApiBaseBLL>().InWorkArea(inWorkAreaEntitys);
                return JsonConvert.SerializeObject(result);
            }
            catch (Exception ex)
            {
                result.errCode = "5";//程序异常
                result.errMsg = ex.Message;//程序异常
                Log.DomainInfo(entity.CN_S_WORKFLOW_NAME + ": InError", ex.Message);
                return JsonConvert.SerializeObject(result);
            }
        }
        /// <summary>
        /// 出作业区
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public string GLOutWorkArea(TN_WM_B_MAKE_TASKEntity entity)
        {
            ExternalResponse result = new ExternalResponse();
            try
            {
                Log.Info("处理位置信息开始:", JsonConvert.SerializeObject(entity));
                //处理位置信息
                CheckPosition(ref entity);
                Log.Info("处理位置信息结束:", JsonConvert.SerializeObject(entity));
                //传递参数
                List<OutWorkAreaEntity> outWorkAreaEntitys = new List<OutWorkAreaEntity>();
                List<OutWorkDataEntity> DataList = new List<OutWorkDataEntity>();
                //物料编码不为空时 才组织Data
                if (!string.IsNullOrEmpty(entity.CN_S_ITEM_CODE))
                {
                    DataList.Add(new OutWorkDataEntity
                    {
                        ItemCode = entity.CN_S_ITEM_CODE,
                        TrayCode = entity.CN_S_TRAY_CODE,
                        UnitQty = Convert.ToInt32(entity.CN_F_QUANTITY)
                    });
                }
                string funCode = "";
                List<string> keyList = (from q in WorkFlowName.FlowNameList
                                        where q.Value == entity.CN_S_WORKFLOW_NAME
                                        select q.Key).ToList<string>(); //get all keys
                var funcName = WorkFlowName.FlowNameList.FirstOrDefault(q => q.Value == entity.CN_S_WORKFLOW_NAME).Key;
                if (funcName != "" && funcName != null)
                {
                    funCode = funcName;
                }
                outWorkAreaEntitys.Add(new OutWorkAreaEntity()
                {
                    itemCode = entity.CN_S_ITEM_CODE,
                    trayCode = entity.CN_S_TRAY_CODE,
                    priority = Convert.ToInt32(entity.CN_S_PRIORITY),
                    startBit = entity.CN_S_START_BIT,
                    startArea = entity.CN_S_START_AREA,
                    startStock = entity.CN_S_START_STOCK,
                    endBit = entity.CN_S_END_BIT,
                    endArea = entity.CN_S_END_AREA,
                    endStock = entity.CN_S_END_STOCK,
                    remark = entity.CN_S_WORKFLOW_NAME,
                    Data = DataList,
                    needCreateAMSTask = entity.CN_S_NEED_AMS,
                    IsTransport = entity.CN_S_ISTRANSPORT,
                    funCode = string.IsNullOrEmpty(funCode) ? "" : funCode
                });
                Log.Info("开始进入出库,传参:", JsonConvert.SerializeObject(entity));
                result = BLLCreator.Create<WmsApiBaseBLL>().OutWorkArea(outWorkAreaEntitys);
                return JsonConvert.SerializeObject(result);
            }
            catch (Exception ex)
            {
                result.errCode = "5";//程序异常
                result.errMsg = ex.Message;//程序异常
                Log.DomainInfo(entity.CN_S_WORKFLOW_NAME + ": OutError", ex.Message);
                return JsonConvert.SerializeObject(result);
            }
        }
        /// <summary>
        /// 处理位置信息
        /// </summary>
        /// <param name="entity"></param>
        private void CheckPosition(ref TN_WM_B_MAKE_TASKEntity entity)
        {
            //防止传了起始位置,没传起始库区
            if (!string.IsNullOrEmpty(entity.CN_S_START_BIT))
            {
                TN_WM_LOCATION_EXTEntity locationModel = BLL.BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetExtModel(" WHERE CN_S_LOCATION_CODE='" + entity.CN_S_START_BIT + "' ");
                if (locationModel != null)
                {
                    entity.CN_S_START_AREA = locationModel.CN_S_AREA_CODE.Trim();
                    entity.CN_S_START_STOCK = locationModel.CN_S_STOCK_CODE.Trim();
                }
            }
            //防止传了目的位置,没传目的库区
            if (!string.IsNullOrEmpty(entity.CN_S_END_BIT))
            {
                TN_WM_LOCATION_EXTEntity locationModel = BLL.BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetExtModel(" WHERE CN_S_LOCATION_CODE='" + entity.CN_S_END_BIT + "' ");
                if (locationModel != null)
                {
                    entity.CN_S_END_AREA = locationModel.CN_S_AREA_CODE.Trim();
                    entity.CN_S_END_STOCK = locationModel.CN_S_STOCK_CODE.Trim();
                }
            }
            Log.Info("处理位置信息位置一:", JsonConvert.SerializeObject(entity));
            if (string.IsNullOrEmpty(entity.CN_S_START_AREA) || string.IsNullOrEmpty(entity.CN_S_END_AREA))
            {
                //找作业路径
                var workRoute = BLLCreator.Create<TN_AB_B_WORK_AREA_PROBLL>().GetSingleRoute(entity.CN_S_START_AREA, entity.CN_S_END_AREA);
                if (workRoute == null)
                {
                    throw new Exception("失败,未找到作业路径!");
                }
                if (string.IsNullOrEmpty(entity.CN_S_START_AREA))
                {
                    entity.CN_S_START_AREA = workRoute.CN_S_START_AREA_CODE;
                }
                if (string.IsNullOrEmpty(entity.CN_S_END_AREA))
                {
                    entity.CN_S_END_AREA = workRoute.CN_S_END_AREA_CODE;
                }
            }
            Log.Info("处理位置信息位置二:", JsonConvert.SerializeObject(entity));
            var SareaEntity = BLLCreator.Create<TN_AB_B_STOCK_AREABLL>().GetStockAreaEntity(entity.CN_S_START_AREA.Trim());
            if (SareaEntity != null)
                entity.CN_S_START_STOCK = SareaEntity.CN_S_STOCK_CODE;
            var EareaEntity = BLLCreator.Create<TN_AB_B_STOCK_AREABLL>().GetStockAreaEntity(entity.CN_S_END_AREA.Trim());
            if (EareaEntity != null)
                entity.CN_S_END_STOCK = EareaEntity.CN_S_STOCK_CODE;
            Log.Info("处理位置信息位置三:", JsonConvert.SerializeObject(entity));
        }
        private OperateResult TransportSuccess(TN_WM_SERVICE_EXECEntity _serviceExec)
        {
            return UseTransaction(trans =>
            {
                if (_serviceExec.Update)
                {
                    var or = BLLCreator.CreateDapper<TN_WM_SERVICE_EXECEntity>().Update(new
                    {
                        CN_S_START_LOCATION = _serviceExec.CN_S_START_LOCATION,
                        CN_S_END_LOCATION = _serviceExec.CN_S_END_LOCATION,
                        CN_C_COMPLETE = _serviceExec.CN_C_COMPLETE,
                        CN_C_SEND_MES = _serviceExec.CN_C_SEND_MES,
                        CN_S_MSG = _serviceExec.CN_S_MSG
                    }, new
                    {
                        CN_S_TASK_NO = _serviceExec.CN_S_TASK_NO
                    });
                    if (!or.Success)
                        throw new Exception(or.Msg);
                }
                else
                {
                    var or = BLLCreator.CreateDapper<TN_WM_SERVICE_EXECEntity>().Add(_serviceExec);
                    if (!or.Success)
                        throw new Exception(or.Msg);
                }
            });
        }
        #region 服务执行记录日志分页
        /// <summary>
        /// 服务执行记录日志分页
        /// </summary>
        /// <param name="sm"></param>
        /// <returns></returns>
        public OperateResult GetServiceExecList(SearchModel sm)
        {
            return CreateDAL<GlDAL>().GetServiceExecList(sm);
        }
        #endregion
        public void SelfManageTask()
        {
            try
            {
                //取未执行的自管任务
                var tasks = BLLCreator.CreateDapper<TN_WM_TASKEntity>().GetList(new
                {
                    CN_S_TASK_FLAG = Constants.TaskFlag_ZG,
                    CN_S_STATE = new List<string>() { Constants.TaskState_NoExecuted, Constants.TaskState_CompleteHalf }
                });
                var connectBitStr = JsonHelper.GetValue("connectBit");
                if (string.IsNullOrEmpty(connectBitStr))
                    throw new Exception("未找到配置:connectBit");
                var connectBits = JsonConvert.DeserializeObject<List<ConnectBitDto>>(connectBitStr);
                List<OperateResult> ors = new List<OperateResult>();
                foreach (var task in tasks)
                {
                    try
                    {
                        //未执行表示第一个任务
                        if (task.CN_S_STATE == Constants.TaskState_NoExecuted)
                        {
                            //立库货位
                            string lkBit = string.Empty;
                            //根据任务类型判断立库货位
                            if (task.CN_S_TASK_TYPE == Constants.Out)
                            {
                                lkBit = task.CN_S_START_BIT;
                            }
                            else if (task.CN_S_TASK_TYPE == Constants.In)
                            {
                                lkBit = task.CN_S_END_BIT;
                            }
                            else
                            {
                                throw new Exception("自管任务任务类型不正确");
                            }
                            var locationBit = BLLCreator.CreateDapper<TN_WM_LOCATION_EXTEntity>().GetSingleEntity(new
                            {
                                CN_S_LOCATION_CODE = lkBit
                            });
                            if (locationBit == null)
                                throw new Exception("未找到立库货位:" + lkBit);
                            var _bit = connectBits.Find(f => f.tunnel == Util.ToString(locationBit.CN_S_ROADWAY).Trim());
                            if (_bit == null)
                                throw new Exception("未找到配置巷道:" + locationBit.CN_S_ROADWAY + "的接驳位");
                            var connectBit = BLLCreator.CreateDapper<TN_WM_LOCATION_EXTEntity>().GetSingleEntity(new
                            {
                                CN_S_LOCATION_CODE = _bit.bit
                            });
                            if (connectBit == null)
                                throw new Exception("未找到接驳位货位:" + _bit.bit);
                            if (connectBit.CN_S_LOCATION_STATE != Constants.Location_State_Normal)
                                throw new Exception("接驳位:" + _bit.bit + "存在未执行完的任务");
                            //赋值接驳位
                            task.CN_S_CONNECT_BIT = _bit.bit;
                            //string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_TransTaskNo + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
                            //string taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
                            //if (string.IsNullOrEmpty(taskNo))
                            //    throw new Exception("任务号生成失败,请检查在AUTOBOM中是否配置转运任务号生成规则!");
                            string taskNo = task.CN_S_TASK_NO + "_1";
                            //创建第一个任务
                            TN_WM_TASKEntity taskEntity = new TN_WM_TASKEntity()
                            {
                                CN_S_TASK_NO = taskNo,
                                CN_S_TRAY_CODE = task.CN_S_TRAY_CODE,
                                CN_S_START_BIT = task.CN_S_START_BIT,
                                CN_S_END_BIT = task.CN_S_CONNECT_BIT,
                                CN_S_STATE = Constants.TaskState_NoExecuted,
                                CN_S_BF_TASK_NO = "",
                                CN_S_AF_TASK_NO = "",
                                CN_S_STOCK_CODE = task.CN_S_STOCK_CODE,
                                CN_S_START_AREA = task.CN_S_START_AREA,
                                CN_S_END_AREA = connectBit.CN_S_AREA_CODE,
                                CN_N_PRIORITY = 1,
                                CN_S_CREATOR = "sys",
                                CN_S_CREATOR_BY = "sys",
                                CN_T_CREATE = DateTime.Now,
                                CN_T_MODIFY = DateTime.Now,
                                CN_S_REMARK = "",
                                //CN_C_IS_AUTO = transport.CN_C_IS_AUTO,
                                CN_S_TASK_FLAG = task.CN_S_TASK_TYPE == Constants.Out ? Constants.TaskFlag_LG : Constants.TaskFlag_AGV,
                                //CN_C_START_IS_CONTROL_QTY = transport.CN_C_START_IS_CONTROL_QTY,
                                //CN_C_END_IS_CONTROL_QTY = transport.CN_C_END_IS_CONTROL_QTY,
                                //CN_S_START_CONTROL_INV = transport.CN_S_START_CONTROL_INV,
                                //CN_S_END_CONTROL_INV = transport.CN_S_END_CONTROL_INV,
                                //CN_S_START_AREA_TYPE = transport.CN_S_START_AREA_TYPE,
                                //CN_S_END_AREA_TYPE = transport.CN_S_END_AREA_TYPE,
                            };
                            var or = UseTransaction(trans =>
                            {
                                //增加子任务
                                CreateDapperDAL<TN_WM_TASKEntity>().Add(taskEntity, trans);
                                //更新接驳位状态
                                CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                                {
                                    CN_S_LOCATION_STATE = Constants.Location_State_OutLock
                                }, new
                                {
                                    CN_S_LOCATION_CODE = taskEntity.CN_S_END_BIT
                                }, trans);
                                // 更新主任务接驳位 状态置为执行中
                                CreateDapperDAL<TN_WM_TASKEntity>().Update(new
                                {
                                    CN_S_CONNECT_BIT = task.CN_S_CONNECT_BIT,
                                    CN_S_STATE = Constants.TaskState_Executing
                                }, new
                                {
                                    CN_S_TASK_NO = task.CN_S_TASK_NO
                                }, trans);
                                //立库任务  需要调用wcs接口
                                if (taskEntity.CN_S_TASK_FLAG == Constants.TaskFlag_LG)
                                {
                                    //to do...
                                    #region 待测试
                                    //OperateResult re = new OtherSysApi().SendWcsCreateTask(taskEntity, _bit);
                                    //if (!re.Success)
                                    //{
                                    //    throw new Exception(re.Msg);
                                    //}
                                    #endregion
                                }
                                else//agv任务
                                {
                                    //OperateResult re = new OtherSysApi().SendAmsCreateTask(taskEntity);
                                    //if (!re.Success)
                                    //{
                                    //    throw new Exception(re.Msg);
                                    //}
                                }
                            });
                            if (!or.Success) throw new Exception(or.Msg);
                        }
                        else//执行一半的任务,开始创建第二个任务
                        {
                            //string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_TransTaskNo + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
                            //string taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
                            //if (string.IsNullOrEmpty(taskNo))
                            //    throw new Exception("任务号生成失败,请检查在AUTOBOM中是否配置转运任务号生成规则!");
                            string taskNo = task.CN_S_TASK_NO + "_2";
                            var connectBit = BLLCreator.CreateDapper<TN_WM_LOCATION_EXTEntity>().GetSingleEntity(new
                            {
                                CN_S_LOCATION_CODE = task.CN_S_CONNECT_BIT
                            });
                            var _bit = connectBits.Find(f => f.tunnel == Util.ToString(connectBit.CN_S_ROADWAY).Trim());
                            if (_bit == null)
                                throw new Exception("未找到配置巷道:" + connectBit.CN_S_ROADWAY + "的接驳位");
                            //创建第二个任务
                            TN_WM_TASKEntity taskEntity = new TN_WM_TASKEntity()
                            {
                                CN_S_TASK_NO = taskNo,
                                CN_S_TRAY_CODE = task.CN_S_TRAY_CODE,
                                CN_S_START_BIT = task.CN_S_CONNECT_BIT,
                                CN_S_END_BIT = task.CN_S_END_BIT,
                                CN_S_STATE = Constants.TaskState_NoExecuted,
                                CN_S_BF_TASK_NO = "",
                                CN_S_AF_TASK_NO = "",
                                CN_S_STOCK_CODE = task.CN_S_STOCK_CODE,
                                CN_S_START_AREA = connectBit.CN_S_AREA_CODE,
                                CN_S_END_AREA = task.CN_S_END_AREA,
                                CN_N_PRIORITY = 1,
                                CN_S_CREATOR = "sys",
                                CN_S_CREATOR_BY = "sys",
                                CN_T_CREATE = DateTime.Now,
                                CN_T_MODIFY = DateTime.Now,
                                CN_S_REMARK = "",
                                //CN_C_IS_AUTO = transport.CN_C_IS_AUTO,
                                CN_S_TASK_FLAG = task.CN_S_TASK_TYPE == Constants.Out ? Constants.TaskFlag_AGV : Constants.TaskFlag_LG,
                                //CN_C_START_IS_CONTROL_QTY = transport.CN_C_START_IS_CONTROL_QTY,
                                //CN_C_END_IS_CONTROL_QTY = transport.CN_C_END_IS_CONTROL_QTY,
                                //CN_S_START_CONTROL_INV = transport.CN_S_START_CONTROL_INV,
                                //CN_S_END_CONTROL_INV = transport.CN_S_END_CONTROL_INV,
                                //CN_S_START_AREA_TYPE = transport.CN_S_START_AREA_TYPE,
                                //CN_S_END_AREA_TYPE = transport.CN_S_END_AREA_TYPE,
                            };
                            var or = UseTransaction(trans =>
                            {
                                //增加子任务
                                CreateDapperDAL<TN_WM_TASKEntity>().Add(taskEntity, trans);
                                //更新接驳位状态
                                CreateDapperDAL<TN_WM_LOCATION_EXTEntity>().Update(new
                                {
                                    CN_S_LOCATION_STATE = Constants.Location_State_InLock
                                }, new
                                {
                                    CN_S_LOCATION_CODE = taskEntity.CN_S_START_BIT
                                }, trans);
                                // 更新主任务接驳位 状态置为执行中
                                CreateDapperDAL<TN_WM_TASKEntity>().Update(new
                                {
                                    CN_S_STATE = Constants.TaskState_Executing
                                }, new
                                {
                                    CN_S_TASK_NO = task.CN_S_TASK_NO
                                }, trans);
                                //立库任务  需要调用wcs接口
                                if (taskEntity.CN_S_TASK_FLAG == Constants.TaskFlag_LG)
                                {
                                    //to do...
                                    #region 待测试
                                    //OperateResult re = new OtherSysApi().SendWcsCreateTask(taskEntity, _bit);
                                    //if (!re.Success)
                                    //{
                                    //    throw new Exception(re.Msg);
                                    //}
                                    #endregion
                                }
                                else//agv任务
                                {
                                    //OperateResult re = new OtherSysApi().SendAmsCreateTask(taskEntity);
                                    //if (!re.Success)
                                    //{
                                    //    throw new Exception(re.Msg);
                                    //}
                                }
                            });
                            if (!or.Success) throw new Exception(or.Msg);
                        }
                        ors.Add(OperateResult.Succeed("生成成功"));
                    }
                    catch (Exception ex)
                    {
                        ors.Add(OperateResult.Error(ex.Message));
                    }
                }
                Log.DomainInfo("SelfManageTask", JsonConvert.SerializeObject(ors));
            }
            catch (Exception ex)
            {
                Log.DomainInfo("SelfManageTask Error", ex.Message);
            }
        }
        /// <summary>
        /// 遍历中间表,根据业务类型创建WMS任务
        /// </summary>
        public void ExecTransferTask()
        {
            // 已接收待处理任务
            var receiveTasks = BLLCreator.CreateDapper<TN_MES_TASK>().GetList(new TN_MES_TASK
            {
                NeedTrig = "Y"
            }).OrderBy(t => t.CreateDate).ToList();
            List<OperateResult> ors = new List<OperateResult>();
            foreach (var task in receiveTasks)
            {
                try
                {
                    // 从mongo中获取货位相关的信息 - 起始货位
                    AutoBomLocationEntity start_location = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetModel(task.Location_From);
                    // 从mongo中获取货位相关的信息 - 终点货位
                    AutoBomLocationEntity end_location = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetModel(task.Location_To);
                    // 创建WMS主任务
                    TN_WM_TASKEntity taskEntity = new TN_WM_TASKEntity()
                    {
                        CN_S_TASK_NO = task.task_no,
                        CN_S_TRAY_CODE = task.TurnCardNum,
                        CN_S_STATE = Constants.TaskState_NoExecuted,
                        CN_S_BF_TASK_NO = "",
                        CN_S_AF_TASK_NO = "",
                        CN_S_STOCK_CODE = start_location.CN_S_STOCK_CODE,
                        CN_S_START_AREA = start_location.CN_S_AREA_CODE,
                        CN_S_START_BIT = start_location.CN_S_LOCATION_CODE,
                        CN_S_END_AREA = end_location.CN_S_AREA_CODE,
                        CN_S_END_BIT = end_location.CN_S_LOCATION_CODE,
                        CN_N_PRIORITY = 1,
                        CN_S_CREATOR = "sys",
                        CN_S_CREATOR_BY = "sys",
                        CN_T_CREATE = DateTime.Now,
                        CN_T_MODIFY = DateTime.Now,
                        CN_S_REMARK = "",
                        CN_S_TASK_FLAG = Constants.TaskFlag_ZG,
                    };
                    UseTransaction(trans =>
                    {
                        // 增加WMS主任务
                        OperateResult re = CreateDapperDAL<TN_WM_TASKEntity>().Add(taskEntity);
                        if (!re.Success)
                            throw new Exception(re.Msg);
                        // 更新TN_MES_TASK状态
                        CreateDapperDAL<TN_MES_TASK>().Update(new
                        {
                            NeedTrig = "N"
                        }, new { task_no = task.task_no }, trans);
                        if (!re.Success)
                            throw new Exception(re.Msg);
                    });
                    ors.Add(OperateResult.Succeed("生成成功"));
                }
                catch (Exception ex)
                {
                    ors.Add(OperateResult.Error(ex.Message));
                }
                Log.DomainInfo("ExecTransferTask", JsonConvert.SerializeObject(ors));
            }
        }
    }
}
HH.WMS.Entitys/Dto/ZCTransferDto.cs
New file
@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.Entitys.Dto
{
    public class ZCTransferDto
    {
        public ZCTransferDto()
        {
            moveStockEnableAms = moveStockEnableAms ?? "N";
            transferEnableAms = transferEnableAms ?? "N";
        }
        public string itemCode { get; set; }
        public string itemName { get; set; }
        public int transferMax { get; set; }
        public string startArea { get; set; }
        public string endArea { get; set; }
        public DateTime startTime { get; set; }
        public DateTime endTime { get; set; }
        public string workFlowCode { get; set; }
        public string workFlowName { get; set; }
        public string transType { get; set; }
        public string isTransport { get; set; }
        public string moveStockEnableAms { get; set; }
        public string transferEnableAms { get; set; }
    }
}
HH.WMS.Entitys/Entitys/Mes/TN_MES_TASK.cs
New file
@@ -0,0 +1,150 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.Entitys.Entitys.Mes
{
    /// <summary>
    /// 移送任务 Transport invitation
    /// </summary>
    [Table("TN_MES_TASK")]
    public class TN_MES_TASK
    {
        /// <summary>
        /// 任务号
        /// </summary>
        [Column("task_no")]
        public string task_no { get; set; }
        /// <summary>
        /// 任务类型1:入库;2:出库;3-空桶任务
        /// </summary>
        [Column("Task_type")]
        public int Task_type { get; set; }
        /// <summary>
        /// 周转卡号
        /// </summary>
        [Column("TurnCardNum")]
        public string TurnCardNum { get; set; }
        /// <summary>
        /// 制品编号
        /// </summary>
        [Column("PROD_NO")]
        public string PROD_NO { get; set; }
        /// <summary>
        /// 工艺编号
        /// </summary>
        [Column("PROD_TECH")]
        public string PROD_TECH { get; set; }
        /// <summary>
        /// 制品规格
        /// </summary>
        [Column("PROD_SPEC")]
        public string PROD_SPEC { get; set; }
        /// <summary>
        /// 制品类型
        /// </summary>
        [Column("PROD_BOM")]
        public string PROD_BOM { get; set; }
        /// <summary>
        /// 制品特征值
        /// </summary>
        [Column("PROD_Feature")]
        public string PROD_Feature { get; set; }
        /// <summary>
        /// 工装编号
        /// </summary>
        [Column("TOOLS_NO")]
        public string TOOLS_NO { get; set; }
        /// <summary>
        /// 载料数量
        /// </summary>
        [Column("ST_AMOUNT")]
        public float ST_AMOUNT { get; set; }
        /// <summary>
        /// 当前数量
        /// </summary>
        [Column("CURRENT_AMOUNT")]
        public float CURRENT_AMOUNT { get; set; }
        /// <summary>
        /// 起始库位编号
        /// </summary>
        [Column("Location_From")]
        public string Location_From { get; set; }
        /// <summary>
        /// 目的库位编号
        /// </summary>
        [Column("Location_To")]
        public string Location_To { get; set; }
        /// <summary>
        /// 生产时间
        /// </summary>
        [Column("PRODUCE_TIME")]
        public DateTime PRODUCE_TIME { get; set; }
        /// <summary>
        /// 生效时间
        /// </summary>
        [Column("SHELF_LIFE_TIME")]
        public DateTime SHELF_LIFE_TIME { get; set; }
        /// <summary>
        /// 失效时间
        /// </summary>
        [Column("EXPIRED_TIME")]
        public DateTime EXPIRED_TIME { get; set; }
        /// <summary>
        /// 缩短报告时间
        /// </summary>
        [Column("SHELF_REP")]
        public float SHELF_REP { get; set; }
        /// <summary>
        /// 延长报告时间
        /// </summary>
        [Column("EXPIRED_REP")]
        public float EXPIRED_REP{ get; set; }
        /// <summary>
        /// 质检状态代码
        /// </summary>
        [Column("CHECK_CODE")]
        public string CHECK_CODE { get; set; }
        /// <summary>
        /// 质检状态
        /// </summary>
        [Column("CHECK_INFO")]
        public string CHECK_INFO { get; set; }
        /// <summary>
        /// 优先级0-普通:任务生成时,均为此级别;1-加急;2-紧急
        /// </summary>
        [Column("Priority")]
        public int Priority { get; set; }
        /// <summary>
        /// 任务状态0-初始状态;1-进行中;2-完成;3-任务取消
        /// </summary>
        [Column("Data_status")]
        public int Data_status { get; set; }
        /// <summary>
        /// 是否需要触发 Y/N
        /// </summary>
        [Column("NeedTrig")]
        public string NeedTrig { get; set; }
        /// <summary>
        /// 创建时间
        /// </summary>
        [Column("CreateDate")]
        public DateTime CreateDate { get; set; }
        /// <summary>
        /// 业务类型
        /// 1    半成品满托入库
        /// 2    成型机半成品回库
        /// 3    成型机空桶回库
        /// 4    成型机满托出库
        /// 5    成型机带束回库
        /// 6    成型机带束满托出库
        /// </summary>
        [Column("BUSI_TYPE")]
        public string BUSI_TYPE { get; set; }
    }
}
HH.WMS.Entitys/External/ZCReceiveTaskEntity.cs
New file
@@ -0,0 +1,110 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.Entitys.External
{
    public class ZCReceiveTaskEntity
    {
        /// <summary>
        /// 任务号
        /// </summary>
        public string task_no { get; set; }
        /// <summary>
        /// 任务类型1:入库;2:出库;3-空桶任务
        /// </summary>
        public int Task_type { get; set; }
        /// <summary>
        /// 周转卡号
        /// </summary>
        public string TurnCardNum { get; set; }
        /// <summary>
        /// 制品编号
        /// </summary>
        public string PROD_NO { get; set; }
        /// <summary>
        /// 工艺编号
        /// </summary>
        public string PROD_TECH { get; set; }
        /// <summary>
        /// 制品规格
        /// </summary>
        public string PROD_SPEC { get; set; }
        /// <summary>
        /// 制品类型
        /// </summary>
        public string PROD_BOM { get; set; }
        /// <summary>
        /// 制品特征值
        /// </summary>
        public string PROD_Feature { get; set; }
        /// <summary>
        /// 工装编号
        /// </summary>
        public string TOOLS_NO { get; set; }
        /// <summary>
        /// 载料数量
        /// </summary>
        public float ST_AMOUNT { get; set; }
        /// <summary>
        /// 当前数量
        /// </summary>
        public float CURRENT_AMOUNT { get; set; }
        /// <summary>
        /// 起始库位编号
        /// </summary>
        public string Location_From { get; set; }
        /// <summary>
        /// 目的库位编号
        /// </summary>
        public string Location_To { get; set; }
        /// <summary>
        /// 生产时间
        /// </summary>
        public DateTime PRODUCE_TIME { get; set; }
        /// <summary>
        /// 生效时间
        /// </summary>
        public DateTime SHELF_LIFE_TIME { get; set; }
        /// <summary>
        /// 失效时间
        /// </summary>
        public DateTime EXPIRED_TIME { get; set; }
        /// <summary>
        /// 缩短报告时间
        /// </summary>
        public float SHELF_REP { get; set; }
        /// <summary>
        /// 延长报告时间
        /// </summary>
        public float EXPIRED_REP { get; set; }
        /// <summary>
        /// 质检状态代码
        /// </summary>
        public string CHECK_CODE { get; set; }
        /// <summary>
        /// 质检状态
        /// </summary>
        public string CHECK_INFO { get; set; }
        /// <summary>
        /// 优先级0-普通:任务生成时,均为此级别;1-加急;2-紧急
        /// </summary>
        public int Priority { get; set; }
        /// <summary>
        /// 任务状态0-初始状态;1-进行中;2-完成;3-任务取消
        /// </summary>
        public int Data_status { get; set; }
        /// <summary>
        /// 业务类型
        /// 1    半成品满托入库
        /// 2    成型机半成品回库
        /// 3    成型机空桶回库
        /// 4    成型机满托出库
        /// 5    成型机带束回库
        /// 6    成型机带束满托出库
        /// </summary>
        public string BUSI_TYPE { get; set; }
    }
}
HH.WMS.Entitys/HH.WMS.Entitys.csproj
@@ -66,6 +66,9 @@
    <Compile Include="Algorithm\TN_AB_B_ITEM_PRICEEntity.cs" />
    <Compile Include="Algorithm\TN_AB_B_LOCATION_LINKEntity.cs" />
    <Compile Include="Algorithm\TN_AB_STOCKEntity.cs" />
    <Compile Include="Dto\ZCTransferDto.cs" />
    <Compile Include="Entitys\Mes\TN_MES_TASK.cs" />
    <Compile Include="External\ZCReceiveTaskEntity.cs" />
    <Compile Include="Wcs\WcsResponse.cs" />
    <Compile Include="Ams\AmsAddTask.cs" />
    <Compile Include="Ams\AmsResponse.cs" />
HH.WMS.WebApi/Config.json
@@ -232,11 +232,31 @@
      "isTransport": "N"
    }
  ],
  //巷道接驳位
  //接驳位
  "connectBit": [
    {
      "tunnel": "01",
      "bit": "CK001-A2-01-01"
      "bit": "接驳位货位",
      "tasktype": "带束入库"
    },
    {
      "bit": "接驳位货位",
      "tasktype": "带束出库"
    },
    {
      "bit": "接驳位货位",
      "tasktype": "满托入库"
    },
    {
      "bit": "接驳位货位",
      "tasktype": "空托出库"
    },
    {
      "bit": "接驳位货位",
      "tasktype": "满托出库"
    },
    {
      "bit": "接驳位货位",
      "tasktype": "空托入库"
    }
  ]
}
HH.WMS.WebApi/Controllers/WmsApiController.cs
@@ -1076,7 +1076,33 @@
        #endregion
        #region 海潮中策
        /// <summary>
        /// 任务下发接口
        /// </summary>
        /// <param name="jsonData"></param>
        /// <returns></returns>
        [HttpPost]
        public object ReceiveTask(dynamic jsonData)
        {
            var logPara = LogType.LogPara("任务下发");
            Log.Detail(logPara, "HCZCSendTask:任务下发传递参数:" + jsonData.ToString());
            ZCReceiveTaskEntity sendTaskEntity = JsonConvert.DeserializeObject<ZCReceiveTaskEntity>(jsonData.ToString());
            //调用ReceiveTask方法保存至中间库
            var result = BLLCreator.Create<WmsApiBaseBLL>().ReceiveTask(sendTaskEntity);
            return new
            {
                success = result.Success,
                code = result.Success ? 0 : -1,
                lastTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                message = result.Msg
            };
        }
        #endregion
HH.WMS.WebApi/Extension/ExecSelfManageTask.cs
@@ -18,7 +18,7 @@
            {  //防止Timer重入
                lock (locko)
                {
                    BLLCreator.Create<GlBLL>().SelfManageTask();
                    BLLCreator.Create<ZCBLL>().SelfManageTask();
                }
            }
            catch (Exception ex)
HH.WMS.WebApi/Extension/ExecTransferTask.cs
@@ -28,22 +28,8 @@
            {  //防止Timer重入
                lock (locko)
                {
                    var transportReqs = BLLCreator.CreateMiddleDapper<AGV_Transport_Request>().GetList(new
                    {
                        HasBeenReceived = Constants.N
                    }).OrderBy(o => o.CreateDate).ToList();
                    var serviceExecs = BLLCreator.CreateDapper<TN_WM_SERVICE_EXECEntity>().GetList(new
                    {
                        CN_C_COMPLETE = Constants.N,
                        CN_S_TASK_TYPE = "移送"
                    });
                    transportReqs = transportReqs.FindAll(f => !serviceExecs.Exists(e => e.CN_S_TASK_NO == f.TaskNo));
                    if(transportReqs.Any())
                    {
                        BLLCreator.Create<GlBLL>().ExecTransferTask(transportReqs);
                    }
                    // 使用TN_MES_TASK临时表中接收的MES任务,创建WMS任务
                    BLLCreator.Create<ZCBLL>().ExecTransferTask();
                }
            }
            catch (Exception ex)
HH.WMS.WebApi/Web.config
@@ -6,8 +6,8 @@
<configuration>
  <connectionStrings>
    <!--<add name="wmsConnection" connectionString="Data Source=192.168.1.198\sql2008;Initial Catalog=HC2_WMS;User ID=sa;Password=sa@2015" providerName="System.Data.SqlClient" />-->
    <add name="wmsConnection" connectionString="Data Source=192.168.1.199;Initial Catalog=GL_WMS;User ID=sa;Password=test?123" providerName="System.Data.SqlClient"/>
    <add name="middleConnection" connectionString="Data Source=192.168.1.199;Initial Catalog=GL_ZJK;User ID=sa;Password=test?123" providerName="System.Data.SqlClient"/>
    <add name="wmsConnection" connectionString="Data Source=192.168.1.199;Initial Catalog=ZC_WMS;User ID=sa;Password=test?123" providerName="System.Data.SqlClient"/>
    <!--<add name="middleConnection" connectionString="Data Source=192.168.1.199;Initial Catalog=GL_ZJK;User ID=sa;Password=test?123" providerName="System.Data.SqlClient"/>-->
    <add name="DataType" connectionString="MSSQL"/>
    <add name="MIP" connectionString="192.168.1.198"/>
    <add name="MPORT" connectionString="27017"/>
@@ -17,7 +17,7 @@
  </connectionStrings>
  <appSettings>
    <add key="appCode" value="AutoWMS" />
    <add key="autobom_ipAddress" value="localhost:7198" />
    <add key="autobom_ipAddress" value="192.168.1.199:8113" />
    <add key="ams_ipAddress" value="192.168.1.199:8614" />
    <add key="wcs_ipAddress" value="wcs_ipAddress" />
    <add key="RedisPath" value="123456@192.168.1.199:6379" />
@@ -25,7 +25,7 @@
    <add key="KdEID" />
    <add key="KdEAppKey" />
    <add key="KdEReqURL" />
    <add key="AppName" value="贵州轮胎" />
    <add key="AppName" value="海潮中策" />
    <add key="AutobomApi" value="192.168.1.199:8362" />
    <add key="REDIS" value="123456@192.168.1.199:6379" />
    <add key="REDIS_DB" value="1" />
HH.WMS.WebUI/Web.config
@@ -12,10 +12,10 @@
    <section name="ActiveReports12" type="GrapeCity.ActiveReports.Web.ActiveReportsSettingsSection"/>
  </configSections>
  <appSettings> 
    <add key="WmsApp" value="贵州轮胎"/>
    <add key="WmsApp" value="海潮中策"/>
    <add key="appCode" value="AutoWMS"/>
    <add key="RedisPath" value="123456@36.33.24.94:6379"/>
    <add key="autobom_ipAddress" value="36.33.24.94:8362" />
    <add key="autobom_ipAddress" value="192.168.1.199:8113" />
    <add key="projectCode" value="qzhk"/>
    <add key="DefaultDb" value="1"/>
    <add key="DisplayLocationBtnUserCode" value="hh"/>