/// <summary>
        /// Create PcsPullOrderDetailInfo
        /// </summary>
        /// <param name="loginUser"></param>
        /// <returns>PcsPullOrderDetailInfo</returns>
        public static PcsPullOrderDetailInfo CreatePcsPullOrderDetailInfo(string loginUser)
        {
            PcsPullOrderDetailInfo info = new PcsPullOrderDetailInfo();

            ///FID,
            info.Fid = Guid.NewGuid();
            ///VALID_FLAG,逻辑删除标记
            info.ValidFlag = true;
            ///CREATE_DATE,创建时间
            info.CreateDate = DateTime.Now;
            ///CREATE_USER,创建用户
            info.CreateUser = loginUser;

            ///PART_VERSION,物料版本
            info.PartVersion = null;

            return(info);
        }
 public long InsertInfo(PcsPullOrderDetailInfo info)
 {
     return(dal.Add(info));
 }
Esempio n. 3
0
        /// <summary>
        /// 生成拉动单
        /// </summary>
        /// <param name="twdPartBoxInfo"></param>
        /// <param name="twdWindowTimeInfo"></param>
        /// <param name="supplierInfo"></param>
        /// <param name="twdCounterInfos"></param>
        /// <param name="maintainInhouseLogisticStandardInfos"></param>
        /// <returns></returns>
        private string CreateTwdPullOrder(List <TwdCounterInfo> twdCounterInfos, TwdPartBoxInfo twdPartBoxInfo, List <SupplierInfo> supplierInfos, TwdWindowTimeInfo twdWindowTimeInfo,
                                          List <MaintainInhouseLogisticStandardInfo> maintainInhouseLogisticStandardInfos)
        {
            ///
            StringBuilder @string = new StringBuilder();
            ///Create TwdPullOrderInfo
            TwdPullOrderInfo twdPullOrderInfo = null;
            ///Create PcsPullOrderInfo
            PcsPullOrderInfo pcsPullOrderInfo = null;
            ///仓储衔接主表
            MaterialPullingOrderInfo materialPulling = MaterialPullingCommonBLL.CreateMaterialPullingOrderInfo();

            if (twdPartBoxInfo.TwdPullMode.GetValueOrDefault() == (int)TwdPullModeConstants.Pcs)
            {
                pcsPullOrderInfo = PcsPullOrderBLL.CreatePcsPullOrderInfo(loginUser);
                ///TwdWindowTimeInfo -> PcsPullOrderInfo
                PcsPullOrderBLL.GetPcsPullOrderInfo(twdWindowTimeInfo, ref pcsPullOrderInfo);
                ///TwdPartBoxInfo -> PcsPullOrderInfo
                PcsPullOrderBLL.GetPcsPullOrderInfo(twdPartBoxInfo, ref pcsPullOrderInfo);
                ///SupplierInfo -> PcsPullOrderInfo
                SupplierInfo supplierInfo = supplierInfos.FirstOrDefault(d => d.SupplierNum == twdPartBoxInfo.SupplierNum);
                PcsPullOrderBLL.GetPcsPullOrderInfo(supplierInfo, ref pcsPullOrderInfo);
                ///
                @string.AppendLine(PcsPullOrderDAL.GetInsertSql(pcsPullOrderInfo));
                ///PcsPullOrderInfo -> MaterialPullingOrderInfo
                MaterialPullingCommonBLL.GetMaterialPullingOrderInfo(pcsPullOrderInfo, ref materialPulling);
            }
            else
            {
                twdPullOrderInfo = TwdPullOrderBLL.CreateTwdPullOrderInfo(loginUser);
                ///TwdWindowTimeInfo -> TwdPullOrderInfo
                TwdPullOrderBLL.GetTwdPullOrderInfo(twdWindowTimeInfo, ref twdPullOrderInfo);
                ///TwdPartBoxInfo -> TwdPullOrderInfo
                TwdPullOrderBLL.GetTwdPullOrderInfo(twdPartBoxInfo, ref twdPullOrderInfo);
                ///SupplierInfo -> TwdPullOrderInfo
                SupplierInfo supplierInfo = supplierInfos.FirstOrDefault(d => d.SupplierNum == twdPartBoxInfo.SupplierNum);
                TwdPullOrderBLL.GetTwdPullOrderInfo(supplierInfo, ref twdPullOrderInfo);
                ///
                @string.AppendLine(TwdPullOrderDAL.GetInsertSql(twdPullOrderInfo));
                ///TwdPullOrderInfo -> MaterialPullingOrderInfo
                MaterialPullingCommonBLL.GetMaterialPullingOrderInfo(twdPullOrderInfo, ref materialPulling);
            }
            ///行号
            int rowNo = 0;

            ///循环计数器
            foreach (TwdCounterInfo twdCounterInfo in twdCounterInfos)
            {
                ///物料需求数量
                decimal requiredPartQty = 0;
                ///物料需求箱数
                int packageQty = 0;

                #region 圆整方式
                ///向上圆整
                if (twdCounterInfo.RoundnessMode == (int)RoundnessModeConstants.Upward)
                {
                    if (twdCounterInfo.Package.GetValueOrDefault() > 0)
                    {
                        ///根据计数器中的圆整方式⑨,当圆整方式⑨为20.向上时以Math.Ceiling(当前计数⑮/箱内数量⑯)*箱内数量⑯作为本次的物料需求数量
                        requiredPartQty = Math.Ceiling(twdCounterInfo.CurrentQty.GetValueOrDefault() / twdCounterInfo.Package.GetValueOrDefault()) * twdCounterInfo.Package.GetValueOrDefault();
                        packageQty      = Convert.ToInt32(Math.Ceiling(requiredPartQty / twdCounterInfo.Package.GetValueOrDefault()));
                    }
                }
                ///向下圆整
                if (twdCounterInfo.RoundnessMode == (int)RoundnessModeConstants.Downward)
                {
                    if (twdCounterInfo.Package.GetValueOrDefault() > 0)
                    {
                        ///根据计数器中的圆整方式⑨,当圆整方式⑨为20.向上时以Math.Ceiling(当前计数⑮/箱内数量⑯)*箱内数量⑯作为本次的物料需求数量
                        requiredPartQty = Math.Floor(twdCounterInfo.CurrentQty.GetValueOrDefault() / twdCounterInfo.Package.GetValueOrDefault()) * twdCounterInfo.Package.GetValueOrDefault();
                        packageQty      = Convert.ToInt32(Math.Ceiling(requiredPartQty / twdCounterInfo.Package.GetValueOrDefault()));
                    }
                }
                ///按需求数量
                if (twdCounterInfo.RoundnessMode == (int)RoundnessModeConstants.Ondemand)
                {
                    ///当圆整方式⑨为按需时则当前计数⑮直接作为本次的物料需求数量
                    requiredPartQty = twdCounterInfo.CurrentQty.GetValueOrDefault();
                    packageQty      = Convert.ToInt32(Math.Ceiling(requiredPartQty / twdCounterInfo.Package.GetValueOrDefault()));
                }
                #endregion

                ///获取物料拉动信息
                MaintainInhouseLogisticStandardInfo logisticStandardInfo = maintainInhouseLogisticStandardInfos.FirstOrDefault(d => d.Fid == twdCounterInfo.PartPullFid.GetValueOrDefault());
                if (logisticStandardInfo == null)
                {
                    continue;
                }
                ///若计数器对应的物料拉动信息中最小起订包装数为一个大于零的数字,则需要在此处比对物料需求箱数是否大于等于最小起订包装数,若不满足则不产生拉动
                if (logisticStandardInfo.MinPullBox.GetValueOrDefault() > 0 && packageQty < logisticStandardInfo.MinPullBox.GetValueOrDefault())
                {
                    continue;
                }
                ///若计数器对应的物料拉动信息中批量包装数为一个大于零的数字,则需要Math.Floor(物料需求箱数 / 批量包装数) * 批量包装数,作为新的物料需求箱数,同时* 箱内数量⑯获得新的物料需求数量
                if (logisticStandardInfo.BatchPullBox.GetValueOrDefault() > 0 && twdCounterInfo.Package.GetValueOrDefault() > 0)
                {
                    packageQty      = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(packageQty) / logisticStandardInfo.BatchPullBox.GetValueOrDefault())) * logisticStandardInfo.BatchPullBox.GetValueOrDefault();
                    requiredPartQty = packageQty * twdCounterInfo.Package.GetValueOrDefault();
                }

                ///仓储衔接明细表
                MaterialPullingOrderDetailInfo detailInfo = MaterialPullingCommonBLL.CreateMaterialPullingOrderDetailInfo();
                if (twdPartBoxInfo.TwdPullMode.GetValueOrDefault() == (int)TwdPullModeConstants.Pcs)
                {
                    ///
                    PcsPullOrderDetailInfo pullOrderDetailInfo = PcsPullOrderDetailBLL.CreatePcsPullOrderDetailInfo(loginUser);
                    ///MaintainInhouseLogisticStandardInfo -> TwdPullOrderDetailInfo
                    PcsPullOrderDetailBLL.GetPcsPullOrderDetailInfo(logisticStandardInfo, ref pullOrderDetailInfo);
                    ///TwdPullOrderInfo -> TwdPullOrderDetailInfo
                    PcsPullOrderDetailBLL.GetPcsPullOrderDetailInfo(pcsPullOrderInfo, ref pullOrderDetailInfo);
                    ///ROW_NO,行号
                    pullOrderDetailInfo.RowNo = ++rowNo;
                    ///REQUIRED_PACKAGE_QTY,需求包装数
                    pullOrderDetailInfo.RequiredPackageQty = packageQty;
                    ///REQUIRED_PART_QTY,需求物料数量
                    pullOrderDetailInfo.RequiredPartQty = requiredPartQty;
                    ///
                    @string.AppendLine(PcsPullOrderDetailDAL.GetInsertSql(pullOrderDetailInfo));
                    ///TwdPullOrderDetailInfo -> MaterialPullingOrderDetailInfo
                    MaterialPullingCommonBLL.GetMaterialPullingOrderDetailInfo(pullOrderDetailInfo, ref detailInfo);
                }
                else
                {
                    ///
                    TwdPullOrderDetailInfo pullOrderDetailInfo = TwdPullOrderDetailBLL.CreateTwdPullOrderDetailInfo(loginUser);
                    ///MaintainInhouseLogisticStandardInfo -> TwdPullOrderDetailInfo
                    TwdPullOrderDetailBLL.GetTwdPullOrderDetailInfo(logisticStandardInfo, ref pullOrderDetailInfo);
                    ///TwdPullOrderInfo -> TwdPullOrderDetailInfo
                    TwdPullOrderDetailBLL.GetTwdPullOrderDetailInfo(twdPullOrderInfo, ref pullOrderDetailInfo);
                    ///ROW_NO,行号
                    pullOrderDetailInfo.RowNo = ++rowNo;
                    ///REQUIRED_PACKAGE_QTY,需求包装数
                    pullOrderDetailInfo.RequiredPackageQty = packageQty;
                    ///REQUIRED_PART_QTY,需求物料数量
                    pullOrderDetailInfo.RequiredPartQty = requiredPartQty;
                    ///
                    @string.AppendLine(TwdPullOrderDetailDAL.GetInsertSql(pullOrderDetailInfo));
                    ///TwdPullOrderDetailInfo -> MaterialPullingOrderDetailInfo
                    MaterialPullingCommonBLL.GetMaterialPullingOrderDetailInfo(pullOrderDetailInfo, ref detailInfo);
                }
                ///
                materialPulling.MaterialPullingOrderDetailInfos.Add(detailInfo);

                #region 扣减计数器
                ///最后根据物料需求数量扣减对应的计数器的当前计数⑮
                @string.AppendLine("update [LES].[TT_MPM_TWD_COUNTER] " +
                                   "set [CURRENT_QTY] = isnull([CURRENT_QTY],0) - " + requiredPartQty + "," +
                                   "[MODIFY_DATE] = GETDATE()," +
                                   "[MODIFY_USER] = N'" + loginUser + "' " +
                                   "where [ID]= " + twdCounterInfo.Id + ";");
                ///
                TwdCounterLogInfo twdCounterLogInfo = TwdCounterLogBLL.CreateTwdCounterLogInfo(twdCounterInfo.Fid.GetValueOrDefault(), loginUser);
                ///TwdCounterInfo -> TwdCounterLogInfo
                TwdCounterLogBLL.GetTwdCounterLogInfo(twdCounterInfo, ref twdCounterLogInfo);
                ///PART_QTY,物料数量
                twdCounterLogInfo.PartQty = 0 - requiredPartQty;
                ///SOURCE_DATA,目视来源数据
                twdCounterLogInfo.SourceData = twdPullOrderInfo.OrderCode;
                ///SOURCE_DATA_FID,数据来源外键
                twdCounterLogInfo.SourceDataFid = twdPullOrderInfo.Fid;
                ///SOURCE_DATA_TYPE,数据来源类型
                twdCounterLogInfo.SourceDataType = (int)TwdCounterSourceDataTypeConstants.CreateRunsheet;
                ///
                @string.AppendLine(TwdCounterLogDAL.GetInsertSql(twdCounterLogInfo));
                #endregion
            }
            ///更新时间窗窗口时间为已发单状态
            @string.AppendLine("update [LES].[TT_MPM_TWD_WINDOW_TIME] " +
                               "set [SEND_TIME_STATUS]= " + (int)SendTimeStatusConstants.Sent + "," +
                               "[MODIFY_DATE] = GETDATE()," +
                               "[MODIFY_USER] = N'" + loginUser + "' " +
                               "where [ID]= " + twdWindowTimeInfo.Id + ";");
            ///拉动单生成后需要调用拉动仓储衔接函数获取语句
            @string.AppendLine(MaterialPullingCommonBLL.Handler(materialPulling, loginUser));
            return(@string.ToString());
        }
 /// <summary>
 /// MaintainInhouseLogisticStandardInfo -> PcsPullOrderDetailInfo
 /// </summary>
 /// <param name="logisticStandardInfo"></param>
 /// <param name="info"></param>
 public static void GetPcsPullOrderDetailInfo(MaintainInhouseLogisticStandardInfo logisticStandardInfo, ref PcsPullOrderDetailInfo info)
 {
     if (logisticStandardInfo == null)
     {
         return;
     }
     ///SUPPLIER_NUM,供应商代码
     info.SupplierNum = logisticStandardInfo.SupplierNum;
     ///WORKSHOP_SECTION,工段
     info.WorkshopSection = logisticStandardInfo.WorkshopSection;
     ///LOCATION,工位
     info.Location = logisticStandardInfo.Location;
     ///PART_NO,物料号
     info.PartNo = logisticStandardInfo.PartNo;
     ///PART_CNAME,物料中文描述
     info.PartCname = logisticStandardInfo.PartCname;
     ///PART_ENAME,物料英文描述
     info.PartEname = logisticStandardInfo.PartEname;
     /////MEASURING_UNIT_NO,单位
     //info.MeasuringUnitNo = logisticStandardInfo.PartUnits;
     ///PACKAGE,单包装数量
     info.Package = logisticStandardInfo.InboundPackage;
     ///PACKAGE_MODEL,包装编号
     info.PackageModel = logisticStandardInfo.InboundPackageModel;
 }
 /// <summary>
 /// PcsPullOrderInfo -> PcsPullOrderDetailInfo
 /// </summary>
 /// <param name="pcsPullOrderInfo"></param>
 /// <param name="info"></param>
 public static void GetPcsPullOrderDetailInfo(PcsPullOrderInfo pcsPullOrderInfo, ref PcsPullOrderDetailInfo info)
 {
     if (pcsPullOrderInfo == null)
     {
         return;
     }
     ///ORDER_FID,拉动单外键
     info.OrderFid = pcsPullOrderInfo.Fid;
     ///ORDER_CODE,拉动单号
     info.OrderCode = pcsPullOrderInfo.OrderCode;
 }