public ActionResult BokBozBllGds(String wmsno, /* String stkouno,*/ String rcvdptid, String gdsid, double qty /*, int? rcdidx*/)
        {
            /*
             * 1、得到wmsno、rcvdptid对应的所有单据
             * 2、得到wmsno、rcvdptid和gdsid对应的所有明细
             * 3、判断这些主单是否已经有一张以上的单据已经审核
             * 4、判断该商品是否是本人播种
             * 5、判断这些单据的所有明细是否都已经播种完毕,播种完毕后就修改单据的审核标记,包括修改无货商品的数量
             */
            using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required, options))          // 事务逻辑开始
            {
                // 得到货号
                gdsid = GetGdsidByGdsidOrBcd(gdsid);
                ////正在生成拣货单,请稍候重试
                //string quRetrv = GetQuByGdsid(gdsid, LoginInfo.DefStoreid).FirstOrDefault();
                //if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
                //{
                //    return RInfo( "I0375" );
                //}
                if (gdsid == null) //货号为空,表示未找到该商品
                {
                    return(RInfo("I0376"));
                }
                String Dat = GetCurrentDay(); //得到当前日期


                try
                {
                    #region 1、得到wmsno、rcvdptid、gdsid对应的所有单据

                    //得到wmsno、rcvdptid、gdsid对应的所有单据
                    stkot[] stkots = GetStkots(wmsno, rcvdptid, gdsid);

                    //未找到单据
                    if (stkots.Length == 0)
                    {
                        return(RNoData("N0177"));
                    }
                    #endregion 1、得到wmsno、rcvdptid对应的所有单据

                    #region 2、得到wmsno、rcvdptid和gdsid对应的所有明细
                    string[] stkounos = stkots.Select(e => e.stkouno.Trim()).ToArray();
                    //得到相关单据号和商品编码对应的明细
                    stkotdtl[] stkotdtls = GetStkdtlsByStkounos(wmsno, gdsid, stkounos).OrderByDescending(e => e.preqty).ToArray();

                    //未找到对应的明细信息
                    if (stkotdtls.Length == 0)
                    {
                        return(RNoData("N0178"));
                    }
                    //判断preqty是否为null,为null就填qty
                    foreach (stkotdtl dtl in stkotdtls)
                    {
                        if (dtl.preqty == null)
                        {
                            dtl.preqty = dtl.qty;
                        }
                    }
                    WmsDc.SubmitChanges();
                    #endregion 2、得到wmsno、rcvdptid和gdsid对应的所有明细

                    #region 3、判断这些主单是否已经有一张以上的单据已经审核
                    foreach (stkot s in stkots)
                    {
                        if (s.chkflg == GetY())
                        {
                            return(RInfo("I0377", s.stkouno));
                        }
                    }
                    #endregion 3、判断这些主单是否已经有一张以上的单据已经审核

                    #region 4、判断该商品是否是本人播种
                    //查看该商品是否已经被非本人确认
                    foreach (stkotdtl stkdtl in stkotdtls)
                    {
                        if (stkdtl.bzflg == GetY() && stkdtl.bzr != LoginInfo.Usrid)
                        {
                            return(RInfo("I0378", stkdtl.bzr));
                        }
                    }
                    #endregion 4、判断该商品是否是本人播种

                    #region 修改这些明细的播种标记
                    //计算这些单据的应该播种数量是否大于实播种数量
                    #region 计算这些单据的应该播种数量是否大于实播种数量
                    double?preqty = stkotdtls.Sum(e => e.preqty);
                    if (preqty < qty)
                    { //如果实际播种数量大于应播数量就退出,不能继续
                        return(RInfo("I0379", qty, preqty));
                    }
                    else if (preqty > qty)
                    {                                       //如果实际播种数量小于应播数量,就修改实际的播种数量
                        double difQty = preqty.Value - qty; //得到差异数量
                        foreach (stkotdtl dtl in stkotdtls)
                        {
                            if (difQty > 0)
                            {
                                if (dtl.preqty >= difQty)
                                {
                                    /*
                                     * preqty = preqty==null ? qty : preqty
                                     *
                                     * 公式:taxamt = qty*prc*taxrto
                                     * amt = qty*prc
                                     * salamt = qty*salprc
                                     * patamt = qty*taxprc
                                     * stotcstamt = qty*stotcstprc
                                     *
                                     */
                                    double qty1 = dtl.preqty.Value - difQty;
                                    dtl.qty        = Math.Round(qty1, 4, MidpointRounding.AwayFromZero);
                                    dtl.pkgqty     = Math.Round(qty1, 4, MidpointRounding.AwayFromZero);
                                    dtl.taxamt     = Math.Round(qty * dtl.prc * dtl.taxrto, 4);
                                    dtl.amt        = Math.Round(qty * dtl.prc, 4);
                                    dtl.salamt     = qty * dtl.salprc;
                                    dtl.patamt     = Math.Round(qty * dtl.taxprc, 4);
                                    dtl.stotcstamt = Math.Round(qty * dtl.stotcstprc.Value, 4);
                                    difQty         = 0;

                                    //记录差异
                                    GetRealteQuResult qu = GetRealteQu(dtl.stkot.dptid, LoginInfo.DefSavdptid);
                                    Log.i(LoginInfo.Usrid, Mdlid, dtl.stkot.stkouno, dtl.stkot.bllid, "播种审核",
                                          gdsid.Trim() + ":应播:" + dtl.preqty.Value + ";实播:" + qty1,
                                          qu.qu, qu.savdptid);
                                }
                                else if (dtl.preqty < difQty)
                                {
                                    dtl.qty        = 0;
                                    dtl.pkgqty     = 0;
                                    dtl.taxamt     = 0;
                                    dtl.amt        = 0;
                                    dtl.salamt     = 0;
                                    dtl.patamt     = 0;
                                    dtl.stotcstamt = 0;
                                    difQty        -= dtl.preqty.Value;

                                    //记录差异
                                    GetRealteQuResult qu = GetRealteQu(dtl.stkot.dptid, LoginInfo.DefSavdptid);
                                    Log.i(LoginInfo.Usrid, Mdlid, dtl.stkot.stkouno, dtl.stkot.bllid, "播种审核",
                                          gdsid.Trim() + ":应播:" + dtl.preqty.Value + ";实播:" + 0,
                                          qu.qu, qu.savdptid);
                                }
                            }
                        }

                        WmsDc.SubmitChanges();
                    }
                    #endregion 计算这些单据的应该播种数量是否大于实播种数量

                    //修改稿明细的播种标记
                    #region 修改稿明细的播种标记
                    foreach (stkotdtl dtl in stkotdtls)
                    {
                        dtl.bzdat = GetCurrentDate();
                        dtl.bzr   = LoginInfo.Usrid;
                        dtl.bzflg = GetY();
                    }
                    WmsDc.SubmitChanges();
                    #endregion 修改稿明细的播种标记
                    #endregion 修改这些明细的播种标记

                    #region 5、判断这些单据的所有明细是否都已经播种完毕,播种完毕后就修改单据的审核标记,包括修改无货商品的数量
                    //判断这些单据的所有明细是否都已经播种完毕
                    foreach (stkot s in stkots)
                    {
                        WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, s);
                        if (s.chkflg == GetN())
                        {
                            bool hasAllBz = !(from e1 in WmsDc.stkotdtl
                                              where e1.stkouno == s.stkouno && e1.bzflg == GetN() && e1.qty > 0
                                              select 1).Any();
                            if (hasAllBz)       //如果都已经播种完了
                            {
                                CkBzFlg(s);
                                i(s.stkouno, s.bllid, "stkouno:" + s.stkouno + ", chkflg:" + s.chkflg + ", bzflg:" + s.bzflg, "", "", "");
                            }
                        }
                    }
                    WmsDc.SubmitChanges();
                    scop.Complete();
                    return(RSucc("成功", null, "S0163"));

                    #endregion 5、判断这些单据的所有明细是否都已经播种完毕,播种完毕后就修改单据的审核标记,包括修改无货商品的数量
                }
                catch (Exception ex)
                {
                    return(RErr(ex.Message, "E0050"));
                }
            }                                                           // 事务逻辑结束

            #region 老的播种逻辑
            //using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required, options))
            //{
            //    gdsid = GetGdsidByGdsidOrBcd(gdsid);
            //    if (gdsid == null)
            //    {
            //        return RInfo( "I0380" );
            //    }

            //    String Dat = GetCurrentDay();

            //    var qry = from e in WmsDc.stkot
            //              where e.stkouno == stkouno
            //              && e.bllid == WMSConst.BLL_TYPE_DISPATCH
            //              && dpts.Contains(e.dptid.Trim())
            //              && e.savdptid == LoginInfo.DefSavdptid
            //              && e.rcvdptid == rcvdptid
            //              select e;
            //    var arrqry = qry.ToArray();
            //    if (arrqry.Length <= 0)
            //    {
            //        return RNoData("N0179");
            //    }
            //    var stkotgds = arrqry[0];
            //    if (wmsno == null)
            //    {
            //        wmsno = stkotgds.wmsno;
            //    }
            //    if (stkotgds.chkflg == GetY())
            //    {
            //        return RInfo( "I0381" );
            //    }
            //    /*if (stkotgds.bzflg == GetY())
            //    {
            //        return RInfo( "I0382" );
            //    }*/
            //    var qrydtl = from e in stkotgds.stkotdtl
            //                 where e.gdsid.Trim() == gdsid.Trim() && e.rcdidx == rcdidx
            //                 select e;
            //    var arrqrydtl = qrydtl.ToArray();
            //    if (arrqrydtl.Length <= 0)
            //    {
            //        return RNoData("N0180");
            //    }
            //    stkotdtl stkdtl = arrqrydtl[0];
            //    double? preqty = stkdtl.preqty;
            //    if (stkdtl.preqty == null)              ///如果应收数量为空,就把qty中的数量填入其中
            //    {
            //        stkdtl.preqty = stkdtl.qty;
            //        preqty = stkdtl.qty;
            //    }
            //    if (preqty < qty)       //如果实收数量大于应收数量就退出
            //    {
            //        return RInfo( "I0383" );
            //    }
            //    if (preqty != qty)
            //    {
            //        GetRealteQuResult qu = GetRealteQu(stkotgds.dptid, LoginInfo.DefSavdptid);
            //        Log.i(LoginInfo.Usrid, Mdlid, stkotgds.stkouno, stkotgds.bllid, "播种审核",
            //            gdsid.Trim() + ":应播:" + preqty + ";实播:" + qty,
            //                qu.qu, qu.savdptid);
            //    }

            //    //查看该商品是否已经被非本人确认
            //    if (stkdtl.bzflg == GetY() && stkdtl.bzr != LoginInfo.Usrid)
            //    {
            //        return RInfo( "I0384",stkdtl.bzr  );
            //    }

            //    #region 检查参数有效性
            //    if (arrqry == null)
            //    {
            //        return RInfo( "I0385" );
            //    }
            //    if (stkdtl == null)
            //    {

            //        return RInfo( "I0386" );
            //    }

            //    #endregion

            //    //修改审核标记
            //    try
            //    {
            //        /*
            //            * preqty = preqty==null ? qty : preqty
            //            *
            //            * 公式:taxamt = qty*prc*taxrto
            //            * amt = qty*prc
            //            * salamt = qty*salprc
            //            * patamt = qty*taxprc
            //            * stotcstamt = qty*stotcstprc
            //            *
            //        */
            //        stkdtl.qty = Math.Round(qty, 4, MidpointRounding.AwayFromZero);
            //        stkdtl.pkgqty = Math.Round(qty, 4, MidpointRounding.AwayFromZero);
            //        stkdtl.bzdat = GetCurrentDate();
            //        stkdtl.bzr = LoginInfo.Usrid;
            //        stkdtl.bzflg = GetY();
            //        stkdtl.taxamt = Math.Round(qty * stkdtl.prc * stkdtl.taxrto, 4);
            //        stkdtl.amt = Math.Round(qty * stkdtl.prc, 4);
            //        stkdtl.salamt = qty * stkdtl.salprc;
            //        stkdtl.patamt = Math.Round(qty * stkdtl.taxprc, 4);
            //        stkdtl.stotcstamt = Math.Round(qty * stkdtl.stotcstprc.Value, 4);

            //        //判断改单据是否已经全部商品已经确认,全部确认后的,实收商品总数和应收商品总数相同就直接修改主单的审核标记
            //        /*double? sqty = stkotgds
            //                        .stkotdtl
            //                        .Where(e=>e.bzflg==GetY())
            //                        .Sum(e=>e.qty==null?0:e.qty);
            //        double? spreqty = stkotgds.stkotdtl.Sum(e=>e.preqty==null?e.qty:e.preqty);
            //        if(sqty==spreqty){
            //            stkotgds.chkflg = GetY();
            //            stkotgds.chkdat = Dat;
            //            stkotgds.ckr = LoginInfo.Usrid;
            //            stklst astklst = new stklst();
            //            astklst.stkouno = stkotgds.stkouno;
            //            WmsDc.stklst.InsertOnSubmit(astklst);
            //        }*/

            //        WmsDc.SubmitChanges();

            //        ///如果明细全部播种完
            //        ///就修改审核标记
            //        ///和播种标记
            //        double sqtycnt = stkotgds
            //                         .stkotdtl
            //                         .Where(e => e.bzflg == GetY() && Math.Round(e.qty, 2, MidpointRounding.AwayFromZero) != 0)
            //                         .Count();
            //        double spreqtycnt = stkotgds
            //                            .stkotdtl
            //                            .Where(e => Math.Round(e.qty, 2, MidpointRounding.AwayFromZero) != 0)
            //                            .Count();
            //        d(wmsno, WMSConst.BLL_TYPE_UPBLL, "审核播种商品", "sqtycnt=" + sqtycnt + "&spreqtycnt=" + spreqtycnt, "", LoginInfo.DefSavdptid);
            //        if (sqtycnt == spreqtycnt)
            //        {
            //            CkBzFlg(stkotgds);

            //            //查看有没有明细为空的单据,直接修改播种标记
            //            var qryZeroBz = from e in WmsDc.stkotdtl
            //                            where e.stkot.wmsno == wmsno && e.stkot.wmsbllid == WMSConst.BLL_TYPE_RETRIEVE
            //                            group e by e.stkouno into g
            //                            select new
            //                            {
            //                                stkouno = g.Key,
            //                                sqty = g.Sum(e => e.qty)
            //                            };
            //            qryZeroBz = qryZeroBz.Where(e => e.sqty == 0);
            //            var qryZeroBzmst = from e in WmsDc.stkot
            //                               join e1 in qryZeroBz on e.stkouno equals e1.stkouno
            //                               where e.chkflg != GetY()
            //                               select e;
            //            foreach (var q in qryZeroBzmst)
            //            {
            //                CkBzFlg(q);
            //                foreach (var dl in q.stkotdtl)
            //                {
            //                    dl.bzflg = GetY();
            //                    dl.bzdat = GetCurrentDate();
            //                    dl.bzr = LoginInfo.Usrid;
            //                }
            //            }

            //        }

            //        WmsDc.SubmitChanges();
            //        scop.Complete();
            //        return RSucc("成功", null, "S0164");
            //    }
            //    catch (Exception ex)
            //    {
            //        return RErr(ex.Message, "E0051");
            //    }
            //}
            #endregion 老的播种逻辑
        }
示例#2
0
        public ActionResult AdPrftOLss(String wmsno, String barcode, String gdsid, String gdstype, String bthno, String vlddat, double qty, String rsn)
        {
            //检查单号是否存在
            var qrymst = from e in WmsDc.wms_cang_111
                         where e.wmsno == wmsno &&
                         e.bllid == WMSConst.BLL_TYPE_PROFITORLOSS &&
                         qus.Contains(e.qu.Trim())
                         select e;
            var arrqrymst = qrymst.ToArray();
            var qrydtl    = from e in WmsDc.wms_cangdtl_111
                            where e.wmsno == wmsno &&
                            e.bllid == WMSConst.BLL_TYPE_PROFITORLOSS
                            orderby e.rcdidx descending
                            select e;
            var arrqrydtl = qrydtl.ToArray();

            //单据是否找到
            if (arrqrymst.Length <= 0)
            {
                return(RNoData("N0118"));
            }
            //判断分区是否有效
            if (!IsExistBarcode(barcode))
            {
                return(RInfo("I0204", barcode.Trim()));
            }

            //检查是否有数据权限
            wms_cang_111 mst = arrqrymst[0];


            wms_cangdtl_111 dtl = new wms_cangdtl_111();

            dtl.wmsno   = wmsno;
            dtl.bllid   = WMSConst.BLL_TYPE_PROFITORLOSS;
            dtl.rcdidx  = arrqrydtl[0].rcdidx + 1;
            dtl.barcode = barcode;
            dtl.gdsid   = gdsid;
            dtl.gdstype = gdstype;
            dtl.pkgid   = "01";
            double fQty = Math.Round(qty, 4, MidpointRounding.AwayFromZero);

            dtl.qty     = fQty;
            dtl.preqty  = fQty;
            dtl.pkgqty  = fQty;
            dtl.gdstype = gdstype;
            dtl.bthno   = string.IsNullOrEmpty(bthno) ? "1" : bthno;
            dtl.vlddat  = string.IsNullOrEmpty(vlddat) ? GetCurrentDay() : vlddat;
            JsonResult    jr = (JsonResult)GetBcdByGdsid(gdsid);
            ResultMessage rm = (ResultMessage)jr.Data;

            if (rm.ResultCode != ResultMessage.RESULTMESSAGE_SUCCESS)
            {
                return(RInfo("I0214", gdsid));
            }
            bcd[] b = (bcd[])rm.ResultObject;
            dtl.bcd    = b[0].bcd1;
            dtl.bkr    = "";
            dtl.bokflg = GetN();
            dtl.bokdat = GetCurrentDate();
            dtl.brfdtl = rsn.ToString();

            WmsDc.wms_cangdtl_111.InsertOnSubmit(dtl);

            //正在生成拣货单,请稍候重试
            if (mst.times.Trim() == "-")
            {
                string quRetrv = mst.qu;
                if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
                {
                    return(RInfo("I0205"));
                }
            }

            if (!qus.Contains(mst.qu))
            {
                return(RInfo("I0206"));
            }

            //检查单号是否已经审核
            if (mst != null && mst.chkflg == GetY())
            {
                return(RInfo("I0207"));
            }
            //是否是本人制单
            if (!IsSameLogin(mst.mkr))
            {
                return(RInfo("I0208"));
            }
            //判断商品是否已经再单据里面
            int iHasIn = qrydtl.Where(e => e.gdsid == gdsid && e.gdstype == gdstype && e.barcode == barcode && e.bthno == dtl.bthno.Trim() && e.vlddat == dtl.vlddat.Trim()).Count();

            if (iHasIn > 0)
            {
                return(RInfo("I0209", gdsid));
            }
            //如果是报损,判断是否有库存
            if (mst.times.Trim() == "-")
            {
                if (rsn.Trim() == "")
                {
                    return(RInfo("I0210", gdsid));
                }

                //如果是报损,判断是否有库存
                //得到一个商品的库存数量
                GdsInBarcode[] gb = GetAGdsQtyInBarcode(barcode, gdsid, gdstype)
                                    .Where(e => e.vlddat == vlddat.Trim() && e.bthno == bthno.Trim())
                                    .ToArray();
                double bqty  = (gb == null || gb.Length <= 0) ? 0 : gb[0].sqty;
                double ktqty = bqty;      //可调数量 = 库存数量
                //如果 需调整数量 > 可调数量
                if (Math.Abs(qty) > Math.Abs(ktqty))
                {
                    return(RInfo("I0211", qty, ktqty));
                }
                //return RInfo( "I0212",gdsid ,barcode  );
            }



            //判断gdsid和barcode是不是在一个区
            String[] qu = GetQuByGdsid(gdsid, LoginInfo.DefStoreid);
            if (!qu.Contains(barcode.Substring(0, 2)))
            {
                return(RInfo("I0213", gdsid, String.Join(",", qu)));
            }



            try
            {
                WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, mst);
                //检查单号是否已经审核
                if (mst != null && mst.chkflg == GetY())
                {
                    return(RInfo("I0207"));
                }
                WmsDc.SubmitChanges();

                //修改主单时间戳
                string sql  = @"update wms_cang_111 set bllid='111' where wmsno='" + mst.wmsno + "' and bllid='111' and udtdtm={0}";
                int    iEff = WmsDc.ExecuteCommand(sql, mst.udtdtm);
                if (iEff == 0)
                {
                    return(RInfo("I0207"));
                }

                return(RSucc("成功", dtl, "S0103"));
            }
            catch (Exception ex)
            {
                return(RErr(ex.Message, "E0026"));
            }
        }
示例#3
0
        public ActionResult MdPrftOLssBll(String wmsno, String barcodes, String gdsids, String gdstypes, String bthnos, String vlddats, String qtys, String rsns)
        {
            using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //拆分参数
                //检查并创建明细
                JsonResult    jr = (JsonResult)_MakeParam(wmsno, barcodes, gdsids, gdstypes, bthnos, vlddats, qtys, rsns);
                ResultMessage rm = (ResultMessage)jr.Data;
                if (rm.ResultCode != ResultMessage.RESULTMESSAGE_SUCCESS)
                {
                    return(jr);
                }

                //检查单号是否存在
                var qrymst = from e in WmsDc.wms_cang_111
                             where e.wmsno == wmsno &&
                             e.bllid == WMSConst.BLL_TYPE_PROFITORLOSS &&
                             qus.Contains(e.qu.Trim())
                             select e;
                var arrqrymst = qrymst.ToArray();
                var qrydtl    = from e in WmsDc.wms_cangdtl_111
                                where e.wmsno == wmsno &&
                                e.bllid == WMSConst.BLL_TYPE_PROFITORLOSS
                                select e;
                var arrqrydtl = qrydtl.ToArray();
                //单据是否找到
                if (arrqrymst.Length <= 0)
                {
                    return(RNoData("N0119"));
                }
                //检查是否有数据权限
                wms_cang_111 mst = arrqrymst[0];
                //正在生成拣货单,请稍候重试
                if (mst.times.Trim() == "-")
                {
                    string quRetrv = mst.qu;
                    if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
                    {
                        return(RInfo("I0215"));
                    }
                }

                if (!qus.Contains(mst.qu.Trim()))
                {
                    return(RInfo("I0216"));
                }
                //检查单号是否已经审核
                if (mst != null && mst.chkflg == GetY())
                {
                    return(RInfo("I0217"));
                }

                //是否是本人制单
                if (!IsSameLogin(mst.mkr))
                {
                    return(RInfo("I0218"));
                }

                wms_cangdtl_111[] newdtl = (wms_cangdtl_111[])rm.ResultObject;
                int i = 0;

                if (mst.times.Trim() == "-")
                {
                    //如果是报损,判断是否有库存
                    foreach (wms_cangdtl_111 d in newdtl)
                    {
                        if (d.brfdtl.Trim() == "")
                        {
                            return(RInfo("I0219", d.gdsid));
                        }

                        //得到一个商品的库存数量
                        GdsInBarcode[] gb = GetAGdsQtyInBarcode(arrqrydtl[i].barcode, arrqrydtl[i].gdsid, arrqrydtl[i].gdstype)
                                            .Where(e => e.vlddat == arrqrydtl[i].vlddat.Trim() && e.bthno == arrqrydtl[i].bthno.Trim())
                                            .ToArray();
                        double bqty  = (gb == null || gb.Length <= 0) ? 0 : gb[0].sqty;
                        double ktqty = Math.Abs(bqty) + Math.Abs(arrqrydtl[i].qty);  //可调数量 = 库存数量+本单该商品的数量
                        //如果 需调整数量 > 可调数量
                        if (Math.Abs(d.qty) > Math.Abs(ktqty))
                        {
                            return(RInfo("I0220", d.qty, ktqty));
                        }
                        i++;
                    }
                }


                //删除单据明细
                WmsDc.wms_cangdtl_111.DeleteAllOnSubmit(arrqrydtl);
                iDelCangDtl111(arrqrydtl, mst);
                //增加单据明细
                WmsDc.wms_cangdtl_111.InsertAllOnSubmit(newdtl);
                try
                {
                    WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, mst);
                    //检查单号是否已经审核
                    if (mst != null && mst.chkflg == GetY())
                    {
                        return(RInfo("I0207"));
                    }

                    WmsDc.SubmitChanges();

                    //修改主单时间戳
                    string sql  = @"update wms_cang_111 set bllid='111' where wmsno='" + mst.wmsno + "' and bllid='111' and udtdtm={0}";
                    int    iEff = WmsDc.ExecuteCommand(sql, mst.udtdtm);
                    if (iEff == 0)
                    {
                        return(RInfo("I0207"));
                    }


                    scop.Complete();
                    return(RSucc("成功", newdtl, "S0104"));
                }
                catch (Exception ex)
                {
                    return(RErr(ex.Message, "E0027"));
                }
            }
        }
        public ActionResult DlPrftOLssBll(String wmsno)
        {
            using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //检查单号是否存在
                var qrymst = from e in WmsDc.wms_cang_111
                             where e.wmsno == wmsno &&
                             e.bllid == WMSConst.BLL_TYPE_PROFITORLOSS &&
                             qus.Contains(e.qu.Trim())
                             select e;
                var arrqrymst = qrymst.ToArray();
                var qrydtl    = from e in WmsDc.wms_cangdtl_111
                                where e.wmsno == wmsno &&
                                e.bllid == WMSConst.BLL_TYPE_PROFITORLOSS
                                select e;
                var arrqrydtl = qrydtl.ToArray();
                int iDtlCount = arrqrydtl.Length;
                //单据是否找到
                if (arrqrymst.Length <= 0)
                {
                    return(RNoData("N0115"));
                }
                //检查是否有数据权限
                wms_cang_111 mst = arrqrymst[0];
                //正在生成拣货单,请稍候重试
                string quRetrv = mst.qu;
                if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
                {
                    return(RInfo("I0187"));
                }

                if (!qus.Contains(mst.qu.Trim()))
                {
                    return(RInfo("I0188"));
                }
                //是否是本人制单
                if (!IsSameLogin(mst.mkr))
                {
                    return(RInfo("I0189"));
                }
                //检查单号是否已经审核
                if (mst != null && mst.chkflg == GetY())
                {
                    return(RInfo("I0190"));
                }


                //删除单据明细
                WmsDc.wms_cangdtl_111.DeleteAllOnSubmit(arrqrydtl);
                WmsDc.wms_cang_111.DeleteAllOnSubmit(arrqrymst);
                iDelCangDtl111(arrqrydtl, mst);
                iDelCangMst111(mst);
                //删除主单据
                try
                {
                    //检查单号是否已经审核
                    if (mst != null && mst.chkflg == GetY())
                    {
                        return(RInfo("I0207"));
                    }

                    WmsDc.SubmitChanges();

                    if (iDtlCount > 1)
                    {
                        //修改主单时间戳
                        WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, mst);
                        string sql  = @"update wms_cang_111 set bllid='111' where wmsno='" + mst.wmsno + "' and bllid='111' and udtdtm={0}";
                        int    iEff = WmsDc.ExecuteCommand(sql, mst.udtdtm);
                        if (iEff == 0)
                        {
                            return(RInfo("I0207"));
                        }
                    }

                    scop.Complete();
                    return(RSucc("成功", null, "S0100"));
                }
                catch (Exception ex)
                {
                    return(RErr(ex.Message, "E0024"));
                }
            }
        }
示例#5
0
        /// <summary>
        /// 修改损溢单
        /// </summary>
        /// <param name="wmsno"></param>
        /// <param name="gdsid"></param>
        /// <param name="gdstype"></param>
        /// <param name="newbarcode">新仓位码</param>
        /// <param name="rcdidx"></param>
        /// <param name="qty"></param>
        /// <returns></returns>
        public ActionResult MdAPrftOLss(String wmsno, String gdsid, String newbarcode, String gdstype, int rcdidx, double qty, String rsn)
        {
            using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //检查单号是否存在
                var qrymst = from e in WmsDc.wms_cang_111
                             where e.wmsno == wmsno &&
                             e.bllid == WMSConst.BLL_TYPE_PROFITORLOSS &&
                             qus.Contains(e.qu.Trim())
                             select e;
                var arrqrymst = qrymst.ToArray();
                var qrydtl    = from e in WmsDc.wms_cangdtl_111
                                where e.wmsno == wmsno &&
                                e.bllid == WMSConst.BLL_TYPE_PROFITORLOSS &&
                                e.gdsid == gdsid && e.rcdidx == rcdidx
                                orderby e.rcdidx descending
                                select e;
                var arrqrydtl = qrydtl.ToArray();

                //检查barcode是否有效
                if (!IsExistBarcode(newbarcode))
                {
                    return(RInfo("I0191", newbarcode));
                }

                //单据是否找到
                if (arrqrymst.Length <= 0)
                {
                    return(RNoData("N0116"));
                }
                //检查是否有数据权限
                wms_cang_111 mst = arrqrymst[0];
                //正在生成拣货单,请稍候重试 ,如果是报损
                if (mst.times.Trim() == "-")
                {
                    string quRetrv = mst.qu;
                    if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
                    {
                        return(RInfo("I0192"));
                    }
                }

                if (!qus.Contains(mst.qu.Trim()))
                {
                    return(RInfo("I0193"));
                }
                //检查单号是否已经审核
                if (mst != null && mst.chkflg == GetY())
                {
                    return(RInfo("I0194"));
                }
                //未找到该商品
                if (arrqrydtl.Length <= 0)
                {
                    return(RNoData("N0117"));
                }
                //是否是本人制单
                if (!IsSameLogin(mst.mkr))
                {
                    return(RInfo("I0195"));
                }

                //判断QTY应该为正为负数
                if (mst.times.Trim() == "+" && qty < 0)
                {
                    return(RInfo("I0196"));
                }
                if (mst.times.Trim() == "-" && qty > 0)
                {
                    return(RInfo("I0197"));
                }
                if (mst.times.Trim() == "-" && rsn.Trim() == "")
                {
                    return(RInfo("I0198", gdsid));
                }

                //判断新仓位码是否和主单是一个区
                if (mst.qu.Trim() != newbarcode.Substring(0, 2))
                {
                    return(RInfo("I0199"));
                }

                //修改数量
                arrqrydtl[0].barcode = newbarcode;
                arrqrydtl[0].qty     = Math.Round(qty, 4, MidpointRounding.AwayFromZero);
                arrqrydtl[0].pkgqty  = Math.Round(qty, 4, MidpointRounding.AwayFromZero);
                arrqrydtl[0].preqty  = Math.Round(qty, 4, MidpointRounding.AwayFromZero);
                if (!String.IsNullOrEmpty(gdstype))
                {
                    arrqrydtl[0].gdstype = gdstype;
                }



                //如果是报损,判断是否有库存
                if (mst.times.Trim() == "-")
                {
                    //修改数量
                    wms_cangdtl_111 dtl = arrqrydtl[0];

                    //得到一个商品的库存数量
                    GdsInBarcode[] gb = GetAGdsQtyInBarcode(dtl.barcode, gdsid, dtl.gdstype)
                                        .Where(e => e.vlddat == dtl.vlddat.Trim() && e.bthno == dtl.bthno.Trim())
                                        .ToArray();
                    double bqty  = (gb == null || gb.Length <= 0) ? 0 : gb[0].sqty;
                    double ktqty = Math.Abs(bqty) + Math.Abs(dtl.qty);  //可调数量 = 库存数量+本单该商品的数量
                    //如果 需调整数量 > 可调数量
                    if (Math.Abs(qty) > Math.Abs(ktqty))
                    {
                        return(RInfo("I0200", qty, ktqty));
                    }

                    dtl.brfdtl = rsn.ToString();
                    //return RInfo( "I0201",gdsid ,arrqrydtl[0].barcode  );
                }

                try
                {
                    WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, mst);
                    //检查单号是否已经审核
                    if (mst != null && mst.chkflg == GetY())
                    {
                        return(RInfo("I0207"));
                    }

                    WmsDc.SubmitChanges();

                    //修改主单时间戳
                    string sql  = @"update wms_cang_111 set bllid='111' where wmsno='" + mst.wmsno + "' and bllid='111' and udtdtm={0}";
                    int    iEff = WmsDc.ExecuteCommand(sql, mst.udtdtm);
                    if (iEff == 0)
                    {
                        return(RInfo("I0207"));
                    }


                    scop.Complete();
                    return(RSucc("成功", arrqrydtl[0], "S0101"));
                }
                catch (Exception ex)
                {
                    return(RErr(ex.Message, "E0025"));
                }
            }
        }
        public ActionResult BokRetrieveGds(String wmsno, String barcode, String gdsid, String gdstype, String bthno, String vlddat, double qty)
        {
            //检索主表、明细表
            var qrymst = from e in WmsDc.wms_cang
                         where e.bllid == WMSConst.BLL_TYPE_RETRIEVE &&
                         e.wmsno == wmsno
                         select e;
            var arrmst = qrymst.ToArray();
            var qrydtl = from e in WmsDc.wms_cangdtl
                         where e.bllid == WMSConst.BLL_TYPE_RETRIEVE &&
                         e.gdsid == gdsid.Trim() &&
                         e.gdstype == gdstype.Trim() &&
                         e.bthno == bthno.Trim() &&
                         e.vlddat == vlddat.Trim() &&
                         e.barcode == barcode.Trim() &&
                         e.wmsno == wmsno
                         select e;
            var arrdtl = qrydtl.ToArray();

            #region 检查输入参数
            if (arrmst.Length <= 0)
            {
                return(RNoData("N0248"));
            }
            if (arrdtl.Length <= 0)
            {
                return(RNoData("N0249"));
            }
            wms_cang mst = arrmst[0];
            ////正在生成拣货单,请稍候重试
            //string quRetrv = mst.qu;
            //if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
            //{
            //    return RInfo( "I0391" );
            //}
            wms_cangdtl dtl = arrdtl[0];
            //是否捡货单已经审核
            if (mst != null && mst.chkflg == GetY())
            {
                return(RInfo("I0460"));
            }
            #endregion

            #region 商品登帐
            //判断是否已经被审核
            WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, dtl);
            if (dtl.bokflg == GetY())
            {
                //看看是哪个审核的
                string[] whoAdt = (from e in WmsDc.emp
                                   where e.empid == dtl.bkr
                                   select e.empdes).ToArray();
                if (whoAdt.Count() > 0)
                {
                    return(RInfo("I0125", string.Join(",", whoAdt)));
                }
            }

            if (dtl.bokflg == GetY() && dtl.bkr.Trim() != LoginInfo.Usrid)
            {
                return(RInfo("I0461", dtl.bkr));
            }

            if (dtl.bokflg == GetN() && dtl.qty != null)
            {
                dtl.preqty = dtl.qty;
            }
            // 确认数量大于应拣数量
            if (qty > dtl.preqty)
            {
                return(RInfo("i0473"));
            }
            dtl.qty    = Math.Round(qty, 4);
            dtl.pkgqty = Math.Round(qty, 4);

            dtl.bokflg = GetY();
            dtl.bokdat = DateTime.Now.ToString("yyyyMMddHHmmss");
            dtl.bkr    = LoginInfo.Usrid;
            #endregion

            try
            {
                try
                {
                    WmsDc.SubmitChanges();
                }
                catch (Exception ex)
                {
                    if (ex.Message.IndexOf("牺牲品") > 0)
                    {
                        return(RInfo("E0075"));
                    }
                    else
                    {
                        return(RInfo("E0076", ex.Message));
                    }
                }
                return(RSucc("成功", null, "S0224"));
            }
            catch (Exception ex)
            {
                return(RErr(ex.Message, "E0072"));
            }
        }
示例#7
0
        public ActionResult AdRetBll(String bllno, String dptid, String hndno, String gdsids, String qtys, String rsns)
        {
            using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required, options))
            {
                ////正在生成拣货单,请稍候重试
                //string quRetrv = GetQuByDptid(dptid, LoginInfo.DefStoreid);
                //if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
                //{
                //    return RInfo("I0297");
                //}

                //检查是否有残损库权限
                if (String.IsNullOrEmpty(LoginInfo.DefCsSavdptid))
                {
                    return(RInfo("I0298"));
                }

                var qrymst = WmsDc.ExecuteQuery <wms_cang_109>("select * from wms_cang_109 with(updlock) where bllid={0} and wmsno={1} and mkr={2}",
                                                               WMSConst.BLL_TYPE_RETCANG, bllno, LoginInfo.Usrid);

                /*var qrymst = from e in WmsDc.wms_cang_109
                 *           where e.wmsno == bllno && e.bllid == WMSConst.BLL_TYPE_RETCANG
                 *           && e.mkr == LoginInfo.Usrid
                 *           && qus.Contains(e.qu.Trim())
                 *           select e;*/
                var arrqrymst = qrymst.Where(e => qus.Contains(e.qu.Trim())).ToArray();
                var qrydtl    = from e in WmsDc.wms_cangdtl_109
                                where e.wmsno == bllno && e.bllid == WMSConst.BLL_TYPE_RETCANG
                                select e;
                var arrqrydtl = qrydtl.ToArray();

                if (arrqrymst.Length <= 0)
                {
                    return(RNoData("N0152"));
                }
                wms_cang_109 mst = arrqrymst[0];
                if (mst != null && mst.chkflg == GetY())
                {
                    return(RInfo("I0299"));
                }
                //是否是本人制单
                if (!IsSameLogin(mst.mkr))
                {
                    return(RInfo("I0300"));
                }


                //拆分货号,数量
                JsonResult    jr = (JsonResult)_MkParam(gdsids, qtys, rsns);
                ResultMessage rm = (ResultMessage)jr.Data;
                if (rm.ResultCode != ResultMessage.RESULTMESSAGE_SUCCESS)
                {
                    return(jr);
                }
                List <ParamRetBll> param = null;
                param = (List <ParamRetBll>)rm.ResultObject;

                //检查录入的商品有没有相同记录
                var qrySameGds = from e in param
                                 group e by e.Gdsid into g
                                 where g.Count() > 1
                                 select g.Key;
                var arrQrySameGds = qrySameGds.ToArray();
                if (arrQrySameGds.Length > 0)
                {
                    return(RInfo("I0301", arrQrySameGds[0]));
                }


                //得到分区
                //GetRealteQuResult rq = GetRealteQu("all", LoginInfo.DefCsSavdptid);
                var gdsqus = (from e in WmsDc.gds
                              join e1 in WmsDc.wms_set on new { setid = "001", e.dptid } equals new { e1.setid, dptid = e1.val2.Trim() }
                              join e2 in WmsDc.wms_set on new { setid = "008", storeid = "2", savdptid = e1.val3 }     //残损库对应的区
                              equals new { e2.setid, storeid = e2.val2.Trim(), savdptid = e2.val1.Trim() }
                              where param.Select(ee => ee.Gdsid.Trim()).Contains(e.gdsid) &&
                              e2.val3 == LoginInfo.DefStoreid &&
                              e1.isvld == GetY() && e2.isvld == GetY() &&
                              thqus.Contains(e1.val1.Trim())
                              select new { qu = e1.val1.Trim() }
                              ).Distinct().ToArray();
                if (gdsqus.Length == 0 || gdsqus.Length > 1)
                {
                    return(RInfo("I0302"));
                }
                if (gdsqus[0].qu != mst.qu.Trim())
                {
                    return(RInfo("I0303", gdsqus[0].qu, mst.qu.Trim()));
                }



                //开始制单

                //生成明细单
                int i     = 0;
                var qrymx = from e in arrqrydtl
                            where e.wmsno == bllno && e.bllid == WMSConst.BLL_TYPE_RETCANG
                            orderby e.rcdidx descending
                            select e;
                var arrqrymx = qrymx.ToArray();
                if (arrqrymx.Length > 0)
                {
                    i = arrqrymx[0].rcdidx;
                }
                List <wms_cangdtl_109> lstDtl = new List <wms_cangdtl_109>();
                foreach (ParamRetBll r in param)
                {
                    wms_cangdtl_109 dtl = new wms_cangdtl_109();
                    dtl.wmsno      = bllno;
                    dtl.bllid      = WMSConst.BLL_TYPE_RETCANG;
                    dtl.rcdidx     = i + 1;
                    dtl.oldbarcode = "";
                    wms_cangwei cw = GetBarcodeByGdsid(LoginInfo.DefCsSavdptid, r.Gdsid);
                    if (cw == null)
                    {
                        return(RInfo(r.Gdsid + ",推荐仓位为空", "I0304"));
                    }
                    dtl.barcode = cw.barcode;
                    dtl.gdsid   = r.Gdsid;
                    dtl.pkgid   = "01";
                    dtl.pkgqty  = Math.Round(r.Qty, 4, MidpointRounding.AwayFromZero);
                    dtl.qty     = Math.Round(r.Qty, 4, MidpointRounding.AwayFromZero);
                    dtl.gdstype = "95";
                    dtl.bthno   = "1";
                    dtl.vlddat  = GetCurrentDay();
                    dtl.bcd     = r.Bcd;
                    dtl.tpcode  = "";
                    dtl.bkr     = "";
                    dtl.bokflg  = GetN();
                    dtl.bokdat  = GetCurrentDate();
                    dtl.preqty  = null;
                    dtl.brfdtl  = r.Rsn.ToString();

                    //看看数据库有没有已加的商品
                    if (arrqrydtl.Length > 0)
                    {
                        var qryhasgds = from e in arrqrydtl
                                        where e.wmsno == bllno && e.bllid == WMSConst.BLL_TYPE_RETCANG &&
                                        e.gdsid == dtl.gdsid
                                        select e;
                        foreach (var q in qryhasgds)
                        {
                            return(RInfo("I0305", q.gdsid));
                        }
                    }

                    lstDtl.Add(dtl);
                    //修改推荐仓位标志
                    i++;
                }

                WmsDc.wms_cangdtl_109.InsertAllOnSubmit(lstDtl);


                try
                {
                    WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, mst);
                    //检查单号是否已经审核
                    if (mst != null && mst.chkflg == GetY())
                    {
                        return(RInfo("I0207"));
                    }

                    //修改主单时间戳
                    string sql  = @"update wms_cang_109 set bllid='109' where wmsno='" + mst.wmsno + "' and bllid='109' and udtdtm={0}";
                    int    iEff = WmsDc.ExecuteCommand(sql, mst.udtdtm);
                    if (iEff == 0)
                    {
                        return(RInfo("I0207"));
                    }

                    WmsDc.SubmitChanges();
                    scop.Complete();
                    return(RSucc("成功", null, "S0142"));
                }
                catch (Exception ex)
                {
                    return(RErr(ex.Message, "E0041"));
                }
            }
        }
示例#8
0
        public ActionResult DlRetBlls(String wmsnos)
        {
            using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required, options))
            {
                String[] wmsno = wmsnos.Split(',');
                String   sInfo = "";
                if (wmsno.Length > 0)
                {
                    foreach (String s in wmsno)
                    {
                        var qrydtl = from e in WmsDc.wms_cangdtl_109
                                     where e.wmsno == s &&
                                     e.bllid == WMSConst.BLL_TYPE_RETCANG
                                     select e;
                        var arrqrydtl = qrydtl.ToArray();
                        int iDtlCount = arrqrydtl.Count();

                        var qrymst = WmsDc.ExecuteQuery <wms_cang_109>("select * from wms_cang_109 with(updlock) where bllid={0} and wmsno={1} and mkr={2}",
                                                                       WMSConst.BLL_TYPE_RETCANG, s, LoginInfo.Usrid);

                        /*var qrymst = from e in WmsDc.wms_cang_109
                         *           where e.wmsno == bllno && e.bllid == WMSConst.BLL_TYPE_RETCANG
                         *           && e.mkr == LoginInfo.Usrid
                         *           && qus.Contains(e.qu.Trim())
                         *           select e;*/
                        var arrqrymst = qrymst.Where(e => qus.Contains(e.qu.Trim())).ToArray();

                        /*
                         * var qrymst = from e in WmsDc.wms_cang_109
                         *           where e.wmsno == s && e.bllid == WMSConst.BLL_TYPE_RETCANG
                         *           && qus.Contains(e.qu.Trim())
                         *           && e.mkr == LoginInfo.Usrid
                         *           select e;
                         * var arrqrymst = qrymst.ToArray();*/
                        wms_cang_109 mst = arrqrymst.FirstOrDefault();
                        if (mst != null)
                        {
                            ////正在生成拣货单,请稍候重试
                            //string quRetrv = mst.qu;
                            //if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
                            //{
                            //    return RInfo("I0295");
                            //}

                            if (mst != null && mst.chkflg == GetY())
                            {
                                sInfo += mst.wmsno + "单据已经审核,不能删除\r\n";
                            }
                            else if (!IsSameLogin(mst.mkr)) //是否是本人制单
                            {
                                return(RInfo("I0296"));
                            }
                            else
                            {
                                WmsDc.wms_cangdtl_109.DeleteAllOnSubmit(arrqrydtl);
                                WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, mst);
                                //检查单号是否已经审核
                                if (mst != null && mst.chkflg == GetY())
                                {
                                    return(RInfo("I0207"));
                                }
                                WmsDc.SubmitChanges();
                                WmsDc.wms_cang_109.DeleteOnSubmit(mst);
                                WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, mst);
                                //检查单号是否已经审核
                                if (mst != null && mst.chkflg == GetY())
                                {
                                    return(RInfo("I0207"));
                                }
                                WmsDc.SubmitChanges();

                                /*if (iDtlCount > 1)
                                 * {
                                 *  //修改主单时间戳
                                 *  string sql = @"update wms_cang_109 set bllid='109' where wmsno='" + mst.wmsno + "' and bllid='109' and udtdtm={0}";
                                 *  int iEff = WmsDc.ExecuteCommand(sql, mst.udtdtm);
                                 *  if (iEff == 0)
                                 *  {
                                 *      return RInfo("I0207");
                                 *  }
                                 * }*/

                                iDelCangDtl109(arrqrydtl, mst);
                                iDelCangMst109(mst);
                            }
                        }
                    }
                }

                if (!String.IsNullOrEmpty(sInfo))
                {
                    return(RSucc(sInfo, null, "S0140"));
                }

                try
                {
                    WmsDc.SubmitChanges();
                    scop.Complete();
                    return(RSucc("成功", null, "S0141"));
                }
                catch (Exception ex)
                {
                    return(RErr(ex.Message, "E0040"));
                }
            }
        }
示例#9
0
        public ActionResult MdRetBll(String bllno, String gdsids, String qtys, String rsns)
        {
            using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //拆分货号,数量
                JsonResult    jr = (JsonResult)_MkParam(gdsids, qtys, rsns);
                ResultMessage rm = (ResultMessage)jr.Data;
                if (rm.ResultCode != ResultMessage.RESULTMESSAGE_SUCCESS)
                {
                    return(jr);
                }
                List <ParamRetBll> param = null;
                param = (List <ParamRetBll>)rm.ResultObject;

                //查询返仓单
                //查询返仓单主表
                var qrymst = WmsDc.ExecuteQuery <wms_cang_109>("select * from wms_cang_109 with(updlock) where bllid={0} and wmsno={1} and mkr={2}",
                                                               WMSConst.BLL_TYPE_RETCANG, bllno, LoginInfo.Usrid);

                /*var qrymst = from e in WmsDc.wms_cang_109
                 *           where e.wmsno == bllno && e.bllid == WMSConst.BLL_TYPE_RETCANG
                 *           && e.mkr == LoginInfo.Usrid
                 *           && qus.Contains(e.qu.Trim())
                 *           select e;*/
                var arrqrymst = qrymst.Where(e => qus.Contains(e.qu.Trim())).ToArray();

                /*
                 * var qrymst = from e in WmsDc.wms_cang_109
                 *           where e.bllid == WMSConst.BLL_TYPE_RETCANG
                 *           && e.wmsno == bllno
                 *           && qus.Contains(e.qu.Trim())
                 *           select e;
                 * var arrqrymst = qrymst.ToArray();*/
                if (arrqrymst.Length <= 0)
                {
                    return(RNoData("N0155"));
                }
                wms_cang_109 mst = arrqrymst[0];
                ////正在生成拣货单,请稍候重试
                //string quRetrv = mst.qu;
                //if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
                //{
                //    return RInfo("I0318");
                //}

                //查询返仓单明细
                var qrydtl = from e in WmsDc.wms_cangdtl_109
                             join e1 in qrymst on new { e.wmsno, e.bllid } equals new { e1.wmsno, e1.bllid }
                select e;
                var    arrqrydtl = qrydtl.ToArray();
                if (arrqrydtl.Length <= 0)
                {
                    return(RNoData("N0156"));
                }

                //查询是不是本人操作
                if (mst.mkr.Trim() != LoginInfo.Usrid)
                {
                    return(RInfo("I0319"));
                }

                //查询是否有残损库权限
                if (mst.savdptid.Trim() != LoginInfo.DefCsSavdptid.Trim())
                {
                    return(RInfo("I0320"));
                }

                //返仓单是否已经审核,审核不允许修改
                if (mst != null && mst.chkflg == GetY())
                {
                    return(RInfo("I0321"));
                }

                //插入单据明细
                //生成明细单
                int _i = 0;
                List <wms_cangdtl_109> lstDtl = new List <wms_cangdtl_109>();
                foreach (ParamRetBll r in param)
                {
                    wms_cangdtl_109 dtl = new wms_cangdtl_109();
                    dtl.wmsno      = bllno;
                    dtl.bllid      = WMSConst.BLL_TYPE_RETCANG;
                    dtl.rcdidx     = _i + 1;
                    dtl.oldbarcode = "";
                    wms_cangwei cw = GetBarcodeByGdsid(LoginInfo.DefCsSavdptid, r.Gdsid);
                    if (cw == null)
                    {
                        return(RInfo(r.Gdsid + ",推荐仓位为空", "I0322"));
                    }
                    dtl.barcode = cw.barcode;
                    dtl.gdsid   = r.Gdsid;
                    dtl.pkgid   = "01";
                    dtl.pkgqty  = Math.Round(r.Qty, 4, MidpointRounding.AwayFromZero);
                    dtl.qty     = Math.Round(r.Qty, 4, MidpointRounding.AwayFromZero);
                    dtl.gdstype = "95";
                    dtl.bthno   = "1";
                    dtl.vlddat  = GetCurrentDay();
                    dtl.bcd     = r.Bcd;
                    dtl.tpcode  = "";
                    dtl.bkr     = "";
                    dtl.bokflg  = GetN();
                    dtl.bokdat  = GetCurrentDate();
                    dtl.preqty  = null;
                    dtl.brfdtl  = r.Rsn.ToString();

                    lstDtl.Add(dtl);
                    _i++;
                }
                WmsDc.wms_cangdtl_109.DeleteAllOnSubmit(arrqrydtl);
                iDelCangDtl109(arrqrydtl, mst);

                if (lstDtl.Count > 0)
                {
                    WmsDc.wms_cangdtl_109.InsertAllOnSubmit(lstDtl);
                }
                else
                {
                    WmsDc.wms_cang_109.DeleteOnSubmit(mst);
                    iDelCangMst109(mst);
                }

                try
                {
                    WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, mst);
                    //检查单号是否已经审核
                    if (mst != null && mst.chkflg == GetY())
                    {
                        return(RInfo("I0207"));
                    }

                    WmsDc.SubmitChanges();

                    //修改主单时间戳
                    string sql  = @"update wms_cang_109 set bllid='109' where wmsno='" + mst.wmsno + "' and bllid='109' and udtdtm={0}";
                    int    iEff = WmsDc.ExecuteCommand(sql, mst.udtdtm);
                    if (iEff == 0)
                    {
                        return(RInfo("I0207"));
                    }


                    scop.Complete();
                    return(RSucc("修改成功", null, "S0146"));
                }
                catch (Exception ex)
                {
                    return(RErr(ex.Message, "E0043"));
                }
            }
        }
示例#10
0
        public ActionResult BokRetrieveGds(String wmsno, String barcode, String gdsid, String gdstype, double qty)
        {
            using (TransactionScope scop = new TransactionScope(TransactionScopeOption.Required, options))
            {
                //检索主表、明细表
                var qrymst = from e in WmsDc.wms_cang
                             where e.bllid == WMSConst.BLL_TYPE_RETRIEVE &&
                             e.wmsno == wmsno
                             select e;
                var arrmst = qrymst.ToArray();
                var qrydtl = from e in WmsDc.wms_cangdtl
                             where e.bllid == WMSConst.BLL_TYPE_RETRIEVE &&
                             e.gdsid == gdsid &&
                             e.gdstype == gdstype &&
                             e.barcode == barcode &&
                             e.wmsno == wmsno &&
                             e.tpcode == "y"
                             select e;
                var arrdtl = qrydtl.ToArray();

                #region 检查输入参数
                if (arrmst.Length <= 0)
                {
                    return(RNoData("N0228"));
                }
                if (arrdtl.Length <= 0)
                {
                    return(RNoData("N0229"));
                }
                wms_cang mst = arrmst[0];
                //正在生成拣货单,请稍候重试
                //string quRetrv = mst.qu;
                //if (DoingRetrieve(LoginInfo.DefStoreid, quRetrv))
                //{
                //    return RInfo( "I0117" );
                //}

                wms_cangdtl dtl = arrdtl[0];
                //是否捡货单已经审核
                if (mst != null && mst.chkflg == GetY())
                {
                    return(RInfo("I0430"));
                }
                #endregion

                #region 商品登帐
                //判断是否已经被审核
                WmsDc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, dtl);
                if (dtl.bokflg == GetY())
                {
                    //看看是哪个审核的
                    string[] whoAdt = (from e in WmsDc.emp
                                       where e.empid == dtl.bkr
                                       select e.empdes).ToArray();
                    if (whoAdt.Count() > 0)
                    {
                        return(RInfo("I0125", string.Join(",", whoAdt)));
                    }
                }

                if (dtl.bokflg == GetY() && dtl.bkr.Trim() != LoginInfo.Usrid)
                {
                    return(RInfo("I0431", dtl.bkr));
                }

                if (dtl.bokflg == GetN() && dtl.qty != null)
                {
                    //dtl.preqty = dtl.qty;
                }
                if (dtl.tpcode == "n")
                {
                    return(RInfo("I0118"));
                }
                if (dtl.preqty < qty && dtl.tpcode == "y")
                {
                    return(RInfo("I0119"));
                }
                dtl.qty    = Math.Round(qty, 4);
                dtl.pkgqty = Math.Round(qty, 4);

                //如果是206的单据,同一个商品的最后一条确认完后就不能再修改
                var qryallbygdsidN1 = from e in WmsDc.wms_cangdtl
                                      where e.bllid == WMSConst.BLL_TYPE_RETRIEVE &&
                                      e.gdsid == gdsid
                                      //&& e.gdstype == gdstype
                                      && e.wmsno == wmsno &&
                                      e.bokflg == GetN() && e.tpcode == "y"
                                      select e;
                int iCnt = qryallbygdsidN1.Count();
                if (mst.lnkbllid.Trim() == "206" && iCnt == 0)
                {
                    return(RInfo("I0120"));
                }

                dtl.bokflg = GetY();
                dtl.bokdat = DateTime.Now.ToString("yyyyMMddHHmmss");
                dtl.bkr    = LoginInfo.Usrid;
                try
                {
                    WmsDc.SubmitChanges();
                }
                catch (Exception ex)
                {
                    if (ex.Message.IndexOf("牺牲品") > 0)
                    {
                        return(RInfo("E0075"));
                    }
                    else
                    {
                        return(RInfo("E0076", ex.Message));
                    }
                }
                if (dtl.preqty != dtl.qty)
                {
                    i(wmsno, WMSConst.BLL_TYPE_RETRIEVE, "拣货商品明细确认", "应拣数量:" + dtl.preqty + ",实拣数量:" + dtl.qty, mst.qu, mst.savdptid);
                }
                #endregion

                #region 如果是206配送拣货的单据,在同一个拣货单里面同一商品确认完后,写入分货表
                if (mst.lnkbllid.Trim() == "206")
                {
                    var qryallbygdsidN = from e in WmsDc.wms_cangdtl
                                         where e.bllid == WMSConst.BLL_TYPE_RETRIEVE &&
                                         e.gdsid == gdsid
                                         //&& e.gdstype == gdstype
                                         && e.wmsno == wmsno &&
                                         e.bokflg == GetN() && e.tpcode == "y"
                                         select e;
                    iCnt = qryallbygdsidN.Count();
                    if (iCnt == 0)
                    {
                        var qryAllByGdsidCang = from e in WmsDc.wms_cangdtl
                                                join e1 in WmsDc.wms_cang on new { e.wmsno, e.bllid } equals new { e1.wmsno, e1.bllid }
                        where e.bllid == WMSConst.BLL_TYPE_RETRIEVE &&
                        e.tpcode == "y" &&
                        e.gdsid == gdsid &&
                        e.wmsno == wmsno
                        group e by new
                        {
                            e1.savdptid,
                            e1.rcvdptid,
                            e1.wmsno,
                            e1.bllid,
                            e1.lnkbocino,
                            e1.lnkbocidat,
                            e1.times,
                            e.gdsid
                        } into g
                            select new
                        {
                            savdptid = g.Key.savdptid,
                            wmsno    = g.Key.wmsno,
                            bllid    = g.Key.bllid,
                            bocino   = g.Key.lnkbocino,
                            bocidat  = g.Key.lnkbocidat,
                            clsid    = g.Key.times,

                            /*checi = (from e2 in WmsDc.psSndGds_dpt_dtl
                             *       where e2.dptid == g.Key.rcvdptid && e2.dh == g.Key.lnkbocino
                             *       select e2.busid.Substring(e2.busid.Trim().Length - 1, 1)).FirstOrDefault(),*/
                            gdsid  = g.Key.gdsid,
                            qty    = g.Sum(e => e.qty),
                            preqty = g.Sum(e => e.qty),
                            ckr    = "",
                            chkflg = GetN(),
                            chkdat = ""
                        };
                        var cutgds = qryAllByGdsidCang.FirstOrDefault();

                        #region 如果拣货的数量不够的话,要去修改配送单的数量和金额
                        var qrystkdtl = from e in WmsDc.stkotdtl
                                        where e.stkot.wmsbllid == cutgds.bllid &&
                                        e.stkot.wmsno == cutgds.wmsno &&
                                        e.gdsid == cutgds.gdsid
                                        orderby Convert.ToInt32(e.stkot.rcvdptid) descending, e.qty descending
                        select e;

                        double q = qrystkdtl.Sum(e => e.qty) - cutgds.qty;

                        if (q > 0)
                        {
                            double diff     = q;
                            var    stkotdtl = qrystkdtl;

                            //扣减stkotdtl里面的库存
                            RedcStkotQty(stkotdtl.ToArray(), diff);
                        }
                        try
                        {
                            WmsDc.SubmitChanges();
                        }
                        catch (Exception ex)
                        {
                            if (ex.Message.IndexOf("牺牲品") > 0)
                            {
                                return(RInfo("E0075"));
                            }
                            else
                            {
                                return(RInfo("E0076", ex.Message));
                            }
                        }
                        #endregion

                        // 写入分货表
                        #region 写入分货表
                        //var qryAllByGdsid = from e in WmsDc.stkotdtl
                        //                    join e1 in WmsDc.wms_cang on new { e.stkot.wmsno, e.stkot.wmsbllid } equals new { e1.wmsno, wmsbllid = e1.bllid }
                        //                    where e.stkot.wmsbllid == cutgds.bllid
                        //                    && e.stkot.wmsno == cutgds.wmsno
                        //                    && e.gdsid == cutgds.gdsid
                        //                    && e.qty != 0
                        //                    group e by new
                        //                    {
                        //                        e1.savdptid,
                        //                        e.stkot.rcvdptid,
                        //                        e1.wmsno,
                        //                        e1.bllid,
                        //                        e1.lnkbocino,
                        //                        e1.lnkbocidat,
                        //                        e1.times,
                        //                        e.gdsid
                        //                    } into g
                        //                    select new
                        //                    {
                        //                        savdptid = g.Key.savdptid,
                        //                        wmsno = g.Key.wmsno,
                        //                        bllid = g.Key.bllid,
                        //                        bocino = g.Key.lnkbocino,
                        //                        bocidat = g.Key.lnkbocidat,
                        //                        clsid = g.Key.times,
                        //                        checi = (from e2 in WmsDc.psSndGds_dpt_dtl
                        //                                 where e2.dptid == g.Key.rcvdptid && e2.dh == g.Key.lnkbocino
                        //                                 select e2.busid.Substring(e2.busid.Trim().Length - 1, 1)).FirstOrDefault(),
                        //                        gdsid = g.Key.gdsid,
                        //                        qty = g.Sum(e => e.qty),
                        //                        preqty = g.Sum(e => e.qty),
                        //                        ckr = "",
                        //                        chkflg = GetN(),
                        //                        chkdat = ""
                        //                    };
                        ////i(wmsno, "", "拣货确认", qryAllByGdsid.ToString(), "", LoginInfo.DefSavdptid);
                        //var arrQryAllByGdsid = qryAllByGdsid.ToArray();
                        //foreach (var a in arrQryAllByGdsid)
                        //{
                        //    if (a.checi == null)
                        //    {
                        //        iFile(cutgds.bllid + "    " + cutgds.wmsno + "  " + cutgds.gdsid + "  ");
                        //    }
                        //}

                        //var qryAllByGdsidSum = from e in arrQryAllByGdsid
                        //                       group e by new
                        //                       {
                        //                           e.savdptid,
                        //                           e.wmsno,
                        //                           e.bllid,
                        //                           e.bocino,
                        //                           e.bocidat,
                        //                           e.clsid,
                        //                           e.checi,
                        //                           e.gdsid,
                        //                           e.ckr,
                        //                           e.chkflg,
                        //                           e.chkdat
                        //                       } into g
                        //                       select new
                        //                       {
                        //                           g.Key.savdptid,
                        //                           g.Key.wmsno,
                        //                           g.Key.bllid,
                        //                           g.Key.bocino,
                        //                           g.Key.bocidat,
                        //                           g.Key.clsid,
                        //                           g.Key.checi,
                        //                           g.Key.gdsid,
                        //                           g.Key.ckr,
                        //                           g.Key.chkflg,
                        //                           g.Key.chkdat,
                        //                           qty = g.Sum(e => e.qty),
                        //                           preqty = g.Sum(e => e.preqty)
                        //                       };
                        //List<wms_cutgds> lstCg = new List<wms_cutgds>();
                        //foreach (var tcg in qryAllByGdsidSum)
                        //{
                        //    wms_cutgds cg = new wms_cutgds();
                        //    cg.bllid = tcg.bllid;
                        //    cg.bocidat = tcg.bocidat;
                        //    cg.bocino = tcg.bocino;
                        //    cg.checi = tcg.checi;
                        //    cg.chkdat = tcg.chkdat;
                        //    cg.chkflg = tcg.chkflg;
                        //    cg.ckr = tcg.ckr;
                        //    cg.clsid = tcg.clsid;
                        //    cg.gdsid = tcg.gdsid;
                        //    cg.preqty = tcg.preqty;
                        //    cg.qty = tcg.qty;
                        //    cg.savdptid = tcg.savdptid;
                        //    cg.wmsno = tcg.wmsno;
                        //    lstCg.Add(cg);
                        //}
                        //WmsDc.wms_cutgds.InsertAllOnSubmit(lstCg);
                        #endregion 写入分货表
                    }
                }
                #endregion

                try
                {
                    try
                    {
                        WmsDc.SubmitChanges();
                    }
                    catch (Exception ex)
                    {
                        if (ex.Message.IndexOf("牺牲品") > 0)
                        {
                            return(RInfo("E0075"));
                        }
                        else
                        {
                            return(RInfo("E0076", ex.Message));
                        }
                    }
                    scop.Complete();

                    return(RSucc("成功", null, "S0212"));
                }
                catch (Exception ex)
                {
                    return(RErr(ex.Message, "E0059"));
                }
            }
        }