hwh
2024-09-11 2b8a51779ff7107c9423e21935c169d6bb877d64
Merge branch 'master' of http://47.95.120.53:8083/r/WCSNet6
12个文件已修改
168 ■■■■ 已修改文件
Admin.NET/WCS.Application/Entity/WcsCheckTask.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Entity/WcsTask.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Enum/TaskEnum.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskInput.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskInput.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/device/sortPallet/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/device/wcsOderTask/component/editDialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Web/src/views/wcs/wcsTask/component/editDialog.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Entity/WcsCheckTask.cs
@@ -15,11 +15,23 @@
public class WcsCheckTask  : EntityBaseData
{
    /// <summary>
    /// 任务号
    /// </summary>
    [SugarColumn(ColumnName = "TaskNo", ColumnDescription = "任务号", Length = 20)]
    public string? TaskNo { get; set; }
    /// <summary>
    /// WMS下发单号
    /// </summary>
    [SugarColumn(ColumnName = "OrderNo", ColumnDescription = "WMS下发单号", Length = 20)]
    public string? OrderNo { get; set; }
    /// <summary>
    /// 机器人类型
    /// </summary>
    [SugarColumn(ColumnName = "RoboatType", ColumnDescription = "机器人类型", Length = 5)]
    public string? RoboatType { get; set; }
    /// <summary>
    /// 机器人编号
    /// </summary>
@@ -29,8 +41,8 @@
    /// <summary>
    /// 分拣线编号
    /// </summary>
    [SugarColumn(ColumnName = "LineNO", ColumnDescription = "分拣线编号", Length = 5)]
    public string? LineNO { get; set; }
    [SugarColumn(ColumnName = "LineNo", ColumnDescription = "分拣线编号", Length = 5)]
    public string? LineNo { get; set; }
    
    /// <summary>
    /// 码盘工位号
Admin.NET/WCS.Application/Entity/WcsTask.cs
@@ -113,7 +113,7 @@
    /// 拣货方式
    /// </summary>
    [SugarColumn(ColumnName = "UnstackingMode", ColumnDescription = "拣货方式", Length = 10)]
    public string? UnstackingMode { get; set; }
    public UnstackingModeEnum? UnstackingMode { get; set; }
    
    /// <summary>
    /// 取消时间
Admin.NET/WCS.Application/Enum/TaskEnum.cs
@@ -85,4 +85,22 @@
    /// </summary>
    [Description("回传失败")]
    Fail = 1
}
/// <summary>
/// 拣货方式
/// </summary>
[Description("拣货方式")]
public enum UnstackingModeEnum
{
    /// <summary>
    /// 机器拆托出
    /// </summary>
    [Description("机器拆托出")]
    Machine = 0,
    /// <summary>
    /// 人工拣货出
    /// </summary>
    [Description("人工拣货出")]
    Artificial = 1,
}
Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskInput.cs
@@ -169,7 +169,7 @@
        /// <summary>
        /// 分拣线编号
        /// </summary>
        public string? LineNO { get; set; }
        public string? LineNo { get; set; }
        
        /// <summary>
        /// 码盘工位号
Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
@@ -45,7 +45,7 @@
            .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
                u.OrderNo.Contains(input.SearchKey)
                || u.RoboatNo.Contains(input.SearchKey)
                || u.LineNO.Contains(input.SearchKey)
                || u.LineNo.Contains(input.SearchKey)
                || u.Port.Contains(input.SearchKey)
                || u.LotNo.Contains(input.SearchKey)
                || u.SkuNo.Contains(input.SearchKey)
@@ -57,7 +57,7 @@
            )
            .WhereIF(!string.IsNullOrWhiteSpace(input.OrderNo), u => u.OrderNo.Contains(input.OrderNo.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.RoboatNo), u => u.RoboatNo.Contains(input.RoboatNo.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.LineNO), u => u.LineNO.Contains(input.LineNO.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.LineNo), u => u.LineNo.Contains(input.LineNo.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.Port), u => u.Port.Contains(input.Port.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.LotNo), u => u.LotNo.Contains(input.LotNo.Trim()))
            .WhereIF(!string.IsNullOrWhiteSpace(input.SkuNo), u => u.SkuNo.Contains(input.SkuNo.Trim()))
@@ -196,6 +196,10 @@
        checkTaskInfo.PZNo = skuInfo.PZNo;
        //更新分拣任务
        await _wcsCheckTaskRep.AsUpdateable(checkTaskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
        #region#给PLC写数据
        #endregion
    }
    [HttpPost]
@@ -203,18 +207,21 @@
    [DisplayName("任务结批")]
    public async Task CloseTaskForPLC(BindTaskPLCInput input)
    {
        #region 请求PLC接口
        #region 请求PLC接口(这个方法实际是预结批,给PLC发送预结批信息,然后PLC再给WCS发送结批信号再将分拣信息清空)
        #endregion
        //分拣任务信息
        var checkTaskList = _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.LotNo == input.lotNo && w.Status == "1").ToList();
        foreach (var item in checkTaskList)
        {
            item.OrderNo = "";
            item.TaskNo = "";
            item.LotNo = "";
            item.SkuNo = "";
            item.SkuName = "";
            item.BoxType = "";
            item.Qty = 0;
            item.PZNo = "";
            item.Status = "0";//未绑定           
        }
        //更新分拣任务
Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs
@@ -9,6 +9,7 @@
{
    public long Id { get; set; }
    public string Text { get; set; }
    public string? TaskNo { get; set; }
    public string? OrderNo { get; set; }
    public string? LotNo { get; set; }
    public string? SkuNo { get; set; }
@@ -18,6 +19,6 @@
    /// 总箱数/计划箱数/预估箱数
    /// </summary>
    public int? Qty { get; set; }
    public string? LineNO { get; set; }
    public string? LineNo { get; set; }
    public string? PZNo { get; set; }
}
Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
@@ -405,11 +405,12 @@
                {
                    Id=device.Id,
                    Text=device.Text,
                    TaskNo=task.TaskNo,
                    OrderNo=task.OrderNo,
                    LotNo=task.LotNo,
                    SkuNo=task.SkuNo,
                    SkuName=task.SkuName,
                    LineNO=task.LineNO,
                    LineNo=task.LineNo,
                    Status =task.Status,
                    PZNo=task.PZNo,
                    Qty=task.Qty
Admin.NET/WCS.Application/Service/WcsTask/Dto/WcsTaskInput.cs
@@ -102,7 +102,7 @@
        /// <summary>
        /// 拣货方式
        /// </summary>
        public virtual string? UnstackingMode { get; set; }
        public virtual UnstackingModeEnum? UnstackingMode { get; set; }
        
        /// <summary>
        /// 取消时间
Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs
@@ -1,7 +1,9 @@

using AngleSharp.Dom;
using Elastic.Clients.Elasticsearch.Tasks;
using Furion.DatabaseAccessor;
using Microsoft.AspNetCore.SignalR;
using WCS.Application.Entity;
namespace WCS.Application;
@@ -13,11 +15,15 @@
{
    private readonly SqlSugarRepository<WcsTask> _wcsTaskRep;
    private readonly IHubContext<TaskLogHub, ITaskLogHub> _taskLogHubContext;
    private readonly SqlSugarRepository<WcsCheckTask> _wcsCheckTaskRep;
    private readonly SqlSugarRepository<WcsMateialPzInfo> _wcsMateialPzInfoRep;
    public WcsTaskService(SqlSugarRepository<WcsTask> wcsTaskRep, IHubContext<TaskLogHub, ITaskLogHub> taskLogHubContext)
    public WcsTaskService(SqlSugarRepository<WcsTask> wcsTaskRep, IHubContext<TaskLogHub, ITaskLogHub> taskLogHubContext, SqlSugarRepository<WcsCheckTask> wcsCheckTaskRep, SqlSugarRepository<WcsMateialPzInfo> wcsMateialPzInfoRep)
    {
        _wcsTaskRep = wcsTaskRep;
        _taskLogHubContext = taskLogHubContext;
        _wcsCheckTaskRep = wcsCheckTaskRep;
        _wcsMateialPzInfoRep = wcsMateialPzInfoRep;
    }
    /// <summary>
@@ -56,9 +62,48 @@
        {
            throw Oops.Bah("任务号重复");
        }
        if (input.UnstackingMode == UnstackingModeEnum.Machine)
        {
            if (string.IsNullOrEmpty(input.SkuNo) || string.IsNullOrEmpty(input.SkuName))
            {
                throw Oops.Bah("机器人拣货,物料和批次信息不能为空");
            }
        }
        var entity = input.Adapt<WcsTask>();
        entity.Origin = "WCS";
        await _wcsTaskRep.InsertAsync(entity);
        #region 绑定垛机
        //物料品种信息
        var skuInfo = await _wcsMateialPzInfoRep.Context.Queryable<WcsMateialPzInfo>().Where(w => w.SkuNo == input.SkuNo).FirstAsync();
        if (skuInfo == null)
        {
            throw Oops.Oh("物料品种信息不存在");
        }
        //分拣任务信息
        var checkTaskInfo = await _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.Status == "0" && w.RoboatType == "0").OrderBy(o => o.LineNo).FirstAsync();
        if (checkTaskInfo == null)
        {
            throw Oops.Oh("分拣任务信息不存在");
        }
        if (checkTaskInfo.Status != "0")
        {
            throw Oops.Oh("该工位已绑定任务,请勿再次绑定");
        }
        checkTaskInfo.OrderNo = "";
        checkTaskInfo.TaskNo = entity.TaskNo;
        checkTaskInfo.LotNo = entity.LotNo;
        checkTaskInfo.SkuNo = entity.SkuNo;
        checkTaskInfo.SkuName = entity.SkuName;
        checkTaskInfo.BoxType = "";
        checkTaskInfo.Qty = entity.Qty;
        checkTaskInfo.Status = "1";//已绑定
        checkTaskInfo.PZNo = skuInfo.PZNo;
        //更新分拣任务
        await _wcsCheckTaskRep.AsUpdateable(checkTaskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
        #endregion
        return entity.Id;
    }
@@ -155,6 +200,25 @@
            await _wcsTaskRep.Context.Insertable(modTaskMonitor).ExecuteCommandAsync();
            //await _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>());
            //await _taskLogHubContext.Clients.All.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
            #region
            //分拣任务信息
            var checkTaskList = _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.TaskNo == modTask.TaskNo && w.Status == "1").ToList();
            foreach (var item in checkTaskList)
            {
                item.OrderNo = "";
                item.TaskNo = "";
                item.LotNo = "";
                item.SkuNo = "";
                item.SkuName = "";
                item.BoxType = "";
                item.Qty = 0;
                item.PZNo = "";
                item.Status = "0";//未绑定
            }
            //更新分拣任务
            await _wcsCheckTaskRep.AsUpdateable(checkTaskList).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
            #endregion
        }
        else
        {
Web/src/views/device/sortPallet/index.vue
@@ -27,9 +27,9 @@
                                <el-form-item label="WMS明细单号">
                                    <el-input v-model="deviceInfo.orderNo" readonly></el-input>
                                </el-form-item>
                                <!-- <el-form-item label="任务号">
                                    <el-input v-model=""></el-input>
                                </el-form-item> -->
                                <el-form-item label="任务号">
                                    <el-input v-model="deviceInfo.taskNo"></el-input>
                                </el-form-item>
                                <el-form-item label="批次号">
                                    <el-input v-model="deviceInfo.lotNo" readonly></el-input>
                                </el-form-item>
@@ -40,7 +40,7 @@
                                    <el-input v-model="deviceInfo.skuName" readonly></el-input>
                                </el-form-item>
                                <el-form-item label="分拣线编号">
                                    <el-input v-model="deviceInfo.lineNO" readonly></el-input>
                                    <el-input v-model="deviceInfo.lineNo" readonly></el-input>
                                </el-form-item>
                                <el-form-item label="绑定状态">
                                    <el-input :value="deviceInfo.status === '0' ? '未绑定' : '已绑定'" readonly></el-input>
Web/src/views/device/wcsOderTask/component/editDialog.vue
@@ -115,7 +115,7 @@
            </template>
        </el-dialog>
        <!-- 绑定任务弹框 -->
        <!-- 选择物料弹框 -->
        <el-dialog v-model="bindDialogVisible" title="选择数据">
            <el-table
                :data="bindBoxData" 
Web/src/views/wcs/wcsTask/component/editDialog.vue
@@ -64,6 +64,37 @@
                        </el-form-item>
                        
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="拣货方式" prop="unstackingMode">
                            <el-select clearable v-model="ruleForm.unstackingMode" placeholder="请选择拣货方式">
                                <el-option v-for="(item,index) in dl('UnstackingModeEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} (${item.code}) [${item.value}]`"></el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="物料编码" prop="skuNo">
                            <el-input v-model="ruleForm.skuNo" placeholder="请输入物料编码" maxlength="20" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="物料名称" prop="skuName">
                            <el-input v-model="ruleForm.skuName" placeholder="请输入物料名称" maxlength="50" show-word-limit clearable/>
                        </el-form-item>
                    </el-col>
                    <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
                        <el-form-item label="批次号" prop="lotNo">
                            <el-input v-model="ruleForm.lotNo" placeholder="请输入批次号" maxlength="50" show-word-limit clearable />
                        </el-form-item>
                    </el-col>
                </el-row>
            </el-form>
            <template #footer>