服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2025-04-15 080741e0b917dc382ecba31c4b19fca1aa772bfd
Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs
@@ -21,6 +21,7 @@
    /// </summary>
    public class In_BIZ_U9_RECEIPT : WmsTask, IIn_BIZ_U9_RECEIPT
    {
        public IIn_BIZ_U9_RECEIPT Init(string id, string userCode, string apiHost, string orgCode)
        {
            base.Init(id, userCode, apiHost, orgCode);
@@ -29,7 +30,7 @@
        }
        #region Propertys & Variables
        public string CurOrderNo { get; set; }
        #endregion
        #region Functions
@@ -106,6 +107,14 @@
                        action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemCodeNotExistsOrNotActive", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode));
                        return SetOutPutMqttMsg(action, input.Locale);
                    }
                    //默认储位验证
                    if (!inv.ItemInfo.DEFAULT_LOCATION.IsNullOrEmpty() && inv.ItemInfo.DEFAULT_LOCATION != CurScanShelf.LocationCode)
                    {
                       action.IsSuccessed = false;
                       //action.LocaleMsg = Biz.L("物料[{0}]只允许上架到储位[{0}],请重新扫描储位");
                       action.LocaleMsg = Biz.L("WMS.Default.ScanItem.DefaultLocationError", inv.ItemInfo.ITEM_CODE, inv.ItemInfo.DEFAULT_LOCATION);
                       return SetOutPutMqttMsg(action, input.Locale);
                    }
                    CurInvItem = inv;
                }
@@ -135,11 +144,21 @@
                }
                //从U9获取收货单行信息
                var u9Dtl = Biz.DataSource["YadaU9C"].Client.Queryable<mes_ReturnedDocInfo>().Where(x => x.RcvId == receipt.ID.ToDouble() && x.DocLineNo == receiptDtl.LINE_NO.ToDouble() && x.SplitFlag != 1).First();
                //收货单的状态判断是否已提交IQC审核,未通过IQC不能上架
                if (!u9Dtl.IsNullOrEmpty() && u9Dtl.Status != 3)
                {
                    action.IsSuccessed = false;
                    //action.LocaleMsg = Biz.L("收货单行状态[{0}]异常,请先提交IQC检验结果");
                    action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RECEIPT.ScanItem.U9StatusException", u9Dtl.StatusName);
                    return SetOutPutMqttMsg(action, input.Locale);
                }
                if (!u9Dtl.IsNullOrEmpty() && u9Dtl.RcvQtyTU != receiptDtl.QTY_OK)
                {
                    receiptDtl.ID = u9Dtl.RcvLineId.ToString();
                    receiptDtl.QTY_OK = u9Dtl.RcvQtyTU;
                    receiptDtl.QTY_NG = receiptDtl.QTY - receiptDtl.QTY_OK;
                    receiptDtl.ERP_STATUS_CODE = u9Dtl.Status.ToString();
                    receiptDtl.ERP_STATUS_NAME = u9Dtl.StatusName;
                }
                var nLocation = new WMS_LOCATION();
@@ -171,6 +190,7 @@
                        action.LocaleMsg = Biz.L($"WMS.Default.ScanShelf.ItemAlreadyExistsInLocation", nLocation.LOCATION_CODE, locationData.SN);
                        return SetOutPutMqttMsg(action, input.Locale);
                    }
                    CurScanShelf.Location = nLocation;
                    CurScanShelf.LocationCode = nLocation.LOCATION_CODE;
                }
                else
@@ -195,6 +215,8 @@
                    ResetTrans();
                    return SetOutPutMqttMsg(action, input.Locale);
                }
                CurOrderNo = receipt.ORDER_NO;
                //执行上架数据处理
                foreach (var item in CurInvItem.Items)
@@ -289,12 +311,23 @@
                    var db = GetCommitDB();
                    //数据保存逻辑
                    db.Updateable(receipt, UserCode).UpdateColumns(q => new { q.STATUS, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand();
                    db.Updateable(receiptDtl, UserCode).UpdateColumns(q => new { q.ID, q.STATUS, q.QTY_IN, q.QTY_OK, q.QTY_NG, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand();
                    db.Updateable(receiptDtl, UserCode).UpdateColumns(q => new { q.ID, q.STATUS, q.QTY_IN, q.QTY_OK, q.QTY_NG, q.ERP_STATUS_CODE, q.ERP_STATUS_NAME, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand();
                    db.Updateable(receiptSn, UserCode).UpdateColumns(q => new { q.STATUS, q.IS_IN, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand();
                });
                //完成所有处理后使用事务保存数据
                action = DoIfFinish(action, input.Locale);
                action = DoIfFinish(action, input.Locale, () =>
                {
                    //设置当前物料的默认储位
                    if (CurInvItem.ItemInfo.DEFAULT_LOCATION.IsNullOrEmpty())
                    {
                        SetDefaultLocation(MainDB, CurInvItem.ItemInfo, nLocation);
                    }
                });
                //if (!action.Data.Data.IsNullOrEmpty() && action.Data.Data is DefaultInStoreOutput)
                //{
                //    (action.Data.Data as DefaultInStoreOutput).OrderInfo = receipt;
                //}
            }
            catch (Exception ex)
            {
@@ -435,6 +468,38 @@
            return SetOutPutMqttMsg(action, locale);
        }
        /// <summary>
        ///  获取需要上架的收货单列表(带分页)
        /// </summary>
        /// <returns></returns>
        public async Task<ApiAction<PageAble<BIZ_U9_RECEIPT>>> GetOrderList(BaseInputWithPage input)
        {
            var action = new ApiAction<PageAble<BIZ_U9_RECEIPT>>();
            var query = Biz.DataSource["YadaU9C"].Client.Queryable<mes_ReturnedDocInfo>().Where(q => q.Status == 3)
                                    .WhereIF(!input.OrderNo.IsNullOrEmpty(), q => q.DocNo.Contains(input.OrderNo))
                                    .OrderBy(q => q.DocNo).ToPage(input.pageIndex, input.pageSize);
            action.Data = await MainDB.Queryable<BIZ_U9_RECEIPT>().Where(q => query.data.Select(o => o.DocNo).Contains(q.ORDER_NO)).ToPageAsync(input.pageIndex, input.pageSize);
            foreach (var order in action.Data.data)
            {
                order.ERP_STATUS_CODE = query.data.FirstOrDefault(q => q.DocNo == order.ORDER_NO)?.Status.ToString();
                order.ERP_STATUS_NAME = query.data.FirstOrDefault(q => q.DocNo == order.ORDER_NO)?.StatusName;
            }
            MainDB.Updateable(action.Data.data, UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.ERP_STATUS_CODE, q.ERP_STATUS_NAME }).ExecuteCommand();
            return action;
        }
        /// <summary>
        ///  获取当前收货单信息
        /// </summary>
        /// <returns></returns>
        public async Task<ApiAction<BIZ_U9_RECEIPT>> GetCurOrder()
        {
            var action = new ApiAction<BIZ_U9_RECEIPT>();
            action.Data = MainDB.Queryable<BIZ_U9_RECEIPT>().Where(q => q.ORDER_NO == CurOrderNo).IncludesAllFirstLayer().First();
            return action;
        }
        #endregion
        /// <summary>