服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-10-18 1ab448972aed699a5665876316972cc07b879e95
包装行为支持生成包装条码
已修改6个文件
135 ■■■■■ 文件已修改
Tiger.Business.MES/Common/WoContext.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/Position.cs 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/WorkAction/PackingAction.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness.MES/Transaction/IPosition.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/BAS/BAS_PKG_DTL.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Common/WoContext.cs
@@ -35,7 +35,7 @@
        {
            if (ExistsBatch(workorder, lineCode, batchNo))
            {
                return WoBatchDic.FirstOrDefault(q => q.Value.Batch.ORDER_NO == workorder && q.Value.Batch.ACT_LINE == lineCode && (batchNo.IsNullOrEmpty() || q.Value.Batch.BATCH_NO == batchNo)).Value;
                return WoBatchDic.FirstOrDefault(q => !q.Value.Batch.IsNullOrEmpty() && q.Value.Batch.ORDER_NO == workorder && q.Value.Batch.ACT_LINE == lineCode && (batchNo.IsNullOrEmpty() || q.Value.Batch.BATCH_NO == batchNo)).Value;
            }
            return null;
        }
Tiger.Business.MES/Transaction/Position.cs
@@ -538,7 +538,7 @@
        /// <param name="labelPVs">过程变量列表</param>
        /// <param name="lv">标签模板变量</param>
        /// <returns></returns>
        public string GetPrintProcessValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv, List<BAS_LABEL_VAR> lvars, IWorkAction action)
        public string GetPrintProcessValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv, List<BAS_LABEL_VAR> lvars, IWorkAction curAction)
        {
            var pv = labelPVs.FirstOrDefault(q => q.VAR_CODE == lv.VAR_VALUE);
            if (!pv.IsNullOrEmpty())
@@ -562,12 +562,12 @@
                                case "GetPackNumber":
                                    return GetLabelVarWo(lv, WorkBatch.WO.ORDER_NO);
                                case "GetBoxQR":
                                    return action is PackingAction ? GetBoxCode(lvars, action as PackingAction) : "";
                                    return curAction is PackingAction ? GetBoxCode(lvars, curAction as PackingAction) : "";
                                case "GetCardQR":
                                    return action is PackingAction ? GetCardOrBoxQR(GetCardCode(lvars), lvars, action as PackingAction) : "";
                                    return curAction is PackingAction ? GetCardOrBoxQR(GetCardCode(lvars), lvars, curAction as PackingAction) : "";
                                case "GetCardSN":
                                    List<string> minPkgList = new List<string>();
                                    var _pkaction = action is PackingAction ? action as PackingAction : null;
                                    var _pkaction = curAction is PackingAction ? curAction as PackingAction : null;
                                    if (_pkaction != null)
                                    {
                                        minPkgList = GetMinPkgList(_pkaction);
@@ -583,7 +583,7 @@
                                    return GetLabelVarWo(lv, WorkBatch.WO.Customer?.CUST_NAME_CN);
                                case "GetHWDate":
                                    List<string> list = new List<string>();
                                    var _action = action is PackingAction ? action as PackingAction : null;
                                    var _action = curAction is PackingAction ? curAction as PackingAction : null;
                                    if (_action != null)
                                    {
                                        list = GetMinPkgList(_action);
@@ -591,7 +591,7 @@
                                    return GetHuaWeiWeek(WorkBatch.Batch.ORDER_NO, list);
                                case "GetQty":
                                    List<string> qtylist = new List<string>();
                                    var _qtyAction = action is PackingAction ? action as PackingAction : null;
                                    var _qtyAction = curAction is PackingAction ? curAction as PackingAction : null;
                                    if (_qtyAction != null)
                                    {
                                        qtylist = GetMinPkgList(_qtyAction);
@@ -611,7 +611,7 @@
                                    return GetLabelVarWo(lv, "");
                                case "GetLOTNO":
                                    string _lotnos = "";
                                    var _orderAction = action is PackingAction ? action as PackingAction : null;
                                    var _orderAction = curAction is PackingAction ? curAction as PackingAction : null;
                                    if (_orderAction != null)
                                    {
                                        var snList = _orderAction.GetMinPackageList(_orderAction.CurPkg.Item).Select(q => q.FLOW_SN).ToList();
@@ -816,6 +816,31 @@
            }
        }
        #endregion
        #region 条码规则方法
        /// <summary>
        /// 获取根据条码规则生成条码
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="curAction"></param>
        /// <returns></returns>
        public string GenerateSN(string ruleCode, IWorkAction curAction)
        {
            var rule = Biz.CodeRule[ruleCode ?? ""];
            if (!rule.IsNullOrEmpty())
            {
                switch (rule.RULE_CODE)
                {
                    case "WhiteBoxNo":
                        return rule.Generate("W", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
                    case "CartonNo":
                        return rule.Generate("B", $"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString() ?? "";
                    default:
                        return rule.Generate().Data.ToString() ?? "";
                }
            }
            return "";
        }
        #endregion
        #region 包装专用方法
        /// <summary>
        /// 根据传入的包装对象返回所有的包装实体列表
Tiger.Business.MES/WorkAction/PackingAction.cs
@@ -84,6 +84,7 @@
                        PKG_LEVEL = max.PKG_LEVEL,
                        PKG_QTY = max.PKG_QTY,
                        LABEL_CODE = LabelDic.Count > max.PKG_LEVEL ? LabelDic[max.PKG_LEVEL]?.LABEL_CODE : null,
                        SN = CurPosition.GenerateSN(max.SN_RULE, this),
                    }
                };
                WipPkgItem child = null;
@@ -99,6 +100,7 @@
                            PKG_LEVEL = dtl.PKG_LEVEL,
                            PKG_QTY = dtl.PKG_QTY,
                            LABEL_CODE = LabelDic.Count > dtl.PKG_LEVEL ? LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE : null,
                            SN = CurPosition.GenerateSN(dtl.SN_RULE, this),
                        };
                        if (!child.IsNullOrEmpty())
                        {
@@ -533,14 +535,15 @@
                        PKG_LEVEL = dtl.PKG_LEVEL,
                        PKG_QTY = dtl.PKG_QTY,
                        LABEL_CODE = LabelDic[dtl.PKG_LEVEL]?.LABEL_CODE,
                        SN = CurPosition.GenerateSN(dtl.SN_RULE, this).IsNullOrEmpty(pInput.PkgSN),
                        IsFinished = true,
                    };
                    CurPkgItem.Package = Biz.Db.Queryable<MES_WIP_PKG>().Where(q => q.SN == pInput.PkgSN && q.AUTH_ORG == CurPosition.WorkBatch.WO.AUTH_ORG).First() ?? new()
                    CurPkgItem.Package = Biz.Db.Queryable<MES_WIP_PKG>().Where(q => q.SN == CurPkgItem.SN && q.AUTH_ORG == CurPosition.WorkBatch.WO.AUTH_ORG).First() ?? new()
                    {
                        AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                        AUTH_PROD = CurPosition.CurLine.LINE_CODE,
                        SN = pInput.PkgSN,
                        SN = CurPkgItem.SN,
                    };
                    CurPkgItem.Package.WIP_ID = CurPosition.CurWipSNs.Count == 1 ? CurPosition.CurWipSNs.First().ID : null;
                    CurPkgItem.Package.PKG_TYPE = dtl.PkgType.PKG_NAME;
@@ -585,7 +588,7 @@
                        {
                            AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                            AUTH_PROD = CurPosition.CurLine.LINE_CODE,
                            SN = pInput.PkgSN,
                            SN = CurPkgItem.SN.IsNullOrEmpty(pInput.PkgSN),
                            PKG_TYPE = dtl.PkgType.PKG_NAME,
                            ITEM_CODE = CurPkgItem.Items.First().Package.ITEM_CODE,
                            QTY = CurPkgItem.Items.Sum(q => q.Package.QTY),
@@ -605,7 +608,7 @@
                        {
                            AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
                            AUTH_PROD = CurPosition.CurLine.LINE_CODE,
                            SN = pInput.PkgSN,
                            SN = CurPkgItem.SN.IsNullOrEmpty(pInput.PkgSN),
                            PKG_TYPE = dtl.PkgType.PKG_NAME,
                            ITEM_CODE = CurPosition.CurWipSNs.First().ITEM_CODE,
                            QTY = CurPkgItem.Items.Sum(q => q.Package.QTY),
@@ -656,6 +659,7 @@
                                    PKG_LEVEL = nextDtl.PKG_LEVEL,
                                    PKG_QTY = nextDtl.PKG_QTY,
                                    LABEL_CODE = LabelDic[nextDtl.PKG_LEVEL]?.LABEL_CODE,
                                    SN = CurPosition.GenerateSN(nextDtl.SN_RULE, this),
                                };
                                curItem.Items.Add(next);
                            }
Tiger.IBusiness.MES/Transaction/IPosition.cs
@@ -78,6 +78,13 @@
        /// <param name="parent"></param>
        /// <returns></returns>
        public List<MES_WIP_PKG> GetPackageList(WipPkgItem parent);
        /// <summary>
        /// 获取根据条码规则生成条码
        /// </summary>
        /// <param name="ruleCode"></param>
        /// <param name="curAction"></param>
        /// <returns></returns>
        public string GenerateSN(string ruleCode, IWorkAction curAction);
        #endregion Functions
    }
}
Tiger.Model.Net/Entitys/BAS/BAS_PKG_DTL.cs
@@ -6,45 +6,57 @@
namespace Tiger.Model
{
    /// <summary>
    /// 实体:包装数量明细
    /// </summary>
    [Description("Primary:ID")]
    [Serializable]
    [SugarTable("BAS_PKG_DTL")]
    public class BAS_PKG_DTL : DbEntityWithAuth
    {
        #region 构造函数
        /// <summary>
        /// 实体:包装数量明细
        /// </summary>
        public BAS_PKG_DTL() {}
        #endregion
    /// <summary>
    /// 实体:包装数量明细
    /// </summary>
    [Description("Primary:ID")]
    [DisplayName("包装数量明细")]
    [Serializable]
    [SugarTable("BAS_PKG_DTL")]
    public class BAS_PKG_DTL : DbEntityWithAuth
    {
        #region 构造函数
        /// <summary>
        /// 实体:包装数量明细
        /// </summary>
        public BAS_PKG_DTL() { }
        #endregion
        #region 公共属性
        /// <summary>
        /// 包装规则ID
        /// </summary>
        public string PKG_RULE_ID { get; set; }
        /// <summary>
        /// 包装/载具编码
        /// </summary>
        public string PKG_CODE { get; set; }
        /// <summary>
        /// 包装层级
        /// </summary>
        public int PKG_LEVEL { get; set; }
        /// <summary>
        /// 包装数量
        /// </summary>
        public int PKG_QTY { get; set; }
        #region 公共属性
        /// <summary>
        /// 包装规则ID
        /// </summary>
        [DisplayName("包装规则ID")]
        public string PKG_RULE_ID { get; set; }
        /// <summary>
        /// 包装/载具编码
        /// </summary>
        [DisplayName("包装/载具编码")]
        public string PKG_CODE { get; set; }
        /// <summary>
        /// 包装层级
        /// </summary>
        [DisplayName("包装层级")]
        public int PKG_LEVEL { get; set; }
        /// <summary>
        /// 包装数量
        /// </summary>
        [DisplayName("包装数量")]
        public int PKG_QTY { get; set; }
        /// <summary>
        /// 标签模板编码
        /// </summary>
        [DisplayName("标签模板编码")]
        public string LABEL_CODE { get; set; }
        /// <summary>
        /// 包装条码规则编码
        /// </summary>
        [DisplayName("包装条码规则编码")]
        public string SN_RULE { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        [DisplayName("备注")]
        public string REMARK { get; set; }
        #endregion
Tiger.Model.Net/Entitys/MES/ParameterEntity/PositionParameter.cs
@@ -182,6 +182,7 @@
        public int PKG_LEVEL { get; set; }
        public int PKG_QTY { get; set; }
        public string LABEL_CODE { get; set; }
        public string SN { get; set; }
        public MES_WIP_PKG Package { get; set; }
        public bool IsFinished { get; set; } = false;
        public List<WipPkgItem> Items { get; set; } = new List<WipPkgItem>();