智云SRM-WEBAPI(目前客户通用API)
1
yusijie
2024-06-07 6d333439f8abe3f39de1ab393007009d570c6256
WebAPI/Controllers/POInStockController.cs
@@ -359,41 +359,41 @@
                int i = 0;
                foreach (Model.ClsCg_POInStockBillSub oItemSub in ls)
                {
                    if (FCusName.Contains("凯贝奈特")) //系统参数  客户定制化名称     空白为通用
                    {
                        if (oItemSub.HBatChNo.Length != 8 || Regex.IsMatch(oItemSub.HBatChNo, @"^[0-9]+$") == false)
                        {
                            objJsonResult.code = "0";
                            objJsonResult.count = 0;
                            objJsonResult.Message = "保存失败!第" + i.ToString() + "行 生产日期D/C 格式错误无法保存!正确格式为8位数的纯数字日期";
                            objJsonResult.data = 1;
                            return objJsonResult;
                        }
                        //获取年月日
                        string year = oItemSub.HBatChNo.Substring(0, 4);
                        string month = oItemSub.HBatChNo.Substring(4, 2);
                        string day = oItemSub.HBatChNo.Substring(6, 2);
                    //if (FCusName.Contains("凯贝奈特")) //系统参数  客户定制化名称     空白为通用
                    //{
                    //    if (oItemSub.HBatChNo.Length != 8 || Regex.IsMatch(oItemSub.HBatChNo, @"^[0-9]+$") == false)
                    //    {
                    //        objJsonResult.code = "0";
                    //        objJsonResult.count = 0;
                    //        objJsonResult.Message = "保存失败!第" + i.ToString() + "行 生产日期D/C 格式错误无法保存!正确格式为8位数的纯数字日期";
                    //        objJsonResult.data = 1;
                    //        return objJsonResult;
                    //    }
                        //验证合法性
                        if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
                        {
                            objJsonResult.code = "0";
                            objJsonResult.count = 0;
                            objJsonResult.Message = "保存失败!第" + i.ToString() + "行 生产日期D/C 日期不合法无法保存!正确格式为8位数的纯数字日期";
                            objJsonResult.data = 1;
                            return objJsonResult;
                        }
                        if (Convert.ToInt32(month) > 12 || Convert.ToInt32(day) > 31)
                        {
                            objJsonResult.code = "0";
                            objJsonResult.count = 0;
                            objJsonResult.Message = "保存失败!第" + i.ToString() + "行 生产日期D/C 日期不合法无法保存!";
                            objJsonResult.data = 1;
                            return objJsonResult;
                        }
                    //    //获取年月日
                    //    string year = oItemSub.HBatChNo.Substring(0, 4);
                    //    string month = oItemSub.HBatChNo.Substring(4, 2);
                    //    string day = oItemSub.HBatChNo.Substring(6, 2);
                }
                    //    //验证合法性
                    //    if (Convert.ToInt32(year) < 1900 || Convert.ToInt32(year) > 2100)
                    //    {
                    //        objJsonResult.code = "0";
                    //        objJsonResult.count = 0;
                    //        objJsonResult.Message = "保存失败!第" + i.ToString() + "行 生产日期D/C 日期不合法无法保存!正确格式为8位数的纯数字日期";
                    //        objJsonResult.data = 1;
                    //        return objJsonResult;
                    //    }
                    //    if (Convert.ToInt32(month) > 12 || Convert.ToInt32(day) > 31)
                    //    {
                    //        objJsonResult.code = "0";
                    //        objJsonResult.count = 0;
                    //        objJsonResult.Message = "保存失败!第" + i.ToString() + "行 生产日期D/C 日期不合法无法保存!";
                    //        objJsonResult.data = 1;
                    //        return objJsonResult;
                    //    }
                    //}
                //判断采购订单状态 
                objJsonResult = TestPOOrder(oItemSub.HPOOrderEntryID.ToString());
                    if (objJsonResult.code == "0")
@@ -639,9 +639,9 @@
        public object AuditPOInStockBill(string HInterID, string CurUserName, string HBillNo)
        {
            json objjson = new json();
            SQLHelper.ClsCNSRM oCn = new SQLHelper.ClsCNSRM();
            try
            {
                SQLHelper.ClsCNSRM oCn = new SQLHelper.ClsCNSRM();
            {
                //采购订单 生成送货单列表
                if (!String.IsNullOrEmpty(HBillNo))
                    HInterID = GetHinterIDByBillNo(HBillNo, "Aduit").ToString();
@@ -662,10 +662,42 @@
                //var HValue = oCn.RunProcReturn(parameterSql, "dt").Tables[0].Rows[0][0].ToString();
                string HValue = "Y";
                string CustomFields = "";//自定义字段
                oCn.BeginTran(); //开始事物
                if (HValue == "Y")
                {
                    if (FCusName == "夏宝电器")
                    //==================================== Begin 送货单审核前控制 Begin ====================================
                    DataSet ds;
                    string[] sArray = HInterID.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 0; i < sArray.Length; i++)
                    {
                        ds = oCn.RunProcReturn("exec h_p_SRM_Cg_POInStockBill_BeforeCheckCtrl " + sArray[i] + ",'" + HBillNo + "','" + CurUserName + "'", "h_p_SRM_Cg_POInStockBill_BeforeCheckCtrl");
                        if (ds == null)
                        {
                            oCn.RollBack(); //回滚事物
                            objjson.code = "0";
                            objjson.count = 0;
                            objjson.Message = "审核前判断失败!无数据返回";
                            objjson.data = null;
                            return objjson;
                        }
                        if (DBUtility.ClsPub.isStrNull(ds.Tables[0].Rows[0]["HBack"]) != "0")
                        {
                            oCn.RollBack(); //回滚事物
                            objjson.code = "0";
                            objjson.count = 0;
                            objjson.Message = "审核失败!" + DBUtility.ClsPub.isStrNull(ds.Tables[0].Rows[0]["HRemarkBack"]);
                            objjson.data = null;
                            return objjson;
                        }
                    }
                    //====================================== End 送货单审核前控制 End ======================================
                    if (FCusName == "夏宝电器")
                    {
                        sql = string.Format(@"
SELECT T3.FNAME AS FTYPENAME,M.HBILLNO,B.HINTERID,B.HENTRYID,C.FID,C.FENTRYID, D.FBILLNO,B.HQTY,CD.FRECEIVEORGID,CDOO.FNUMBER AS FRECEIVENUMBER
,D.FSUPPLIERID,DS.FNUMBER AS FSUPPLIERNUMBER,D.FPURCHASEORGID,DOO.FNUMBER AS FPURCHASEORGNUMBER,CROO.FNUMBER  AS FSETTLEORGNUMBER,
@@ -828,7 +860,8 @@
E.FPRICETIMEPOINT,E.FSETTLECURRID,EC.FNUMBER AS FSETTLECURRNUMBER,C.FMATERIALID,CM.FNUMBER AS FMATERIALNUMBER ,C.FUNITID 
,CU.FNUMBER AS FUNITNUMBER,CR.FPRICE,CR.FTAXPRICE,CR.FTAXRATE,D.FPURCHASERID,isnull(T4.FNUMBER,'') AS FPURCHASERNUMBER
,B.HExpressNumberSub,B.HExpressSupplierSub,B.HRemark,B.HPlanArrivalDate,B.HBoxNumber,B.HBatChNo,D.FBILLTYPEID 
,isnull(VW.FNUMBER,'') AS FReceiverNUMBER
,isnull(VW.FNUMBER,'') AS FReceiverNUMBER,isnull(B.HKFDate,'') As FProduceDate,B.HTAXPRICE_T AS F_AAAA_PRICE1
,C.FGiveAway AS FGiveAway
FROM CG_POINSTOCKBILLSUB B  
JOIN CG_POINSTOCKBILLMAIN M ON B.HINTERID = M.HINTERID
JOIN {0}..T_PUR_POORDERENTRY C ON B.HSOURCEINTERID = C.FID AND B.HSOURCEENTRYID = C.FENTRYID
@@ -895,6 +928,11 @@
                                    //3厂
                                    if (dr["FBILLTYPEID"].ToString() == "83d822ca3e374b4ab01e5dd46a0062bd")
                                    {
                                        fTypeName = "SLD10_SYS";
                                    }
                                    //标准采购订单
                                    if (dr["FBILLTYPEID"].ToString() == "65a5124e3be263")
                                    {
                                        fTypeName = "SLD01_SYS";
                                    }
                                    model.Add("FReceiverId", new JObject() { ["Fnumber"] = dr["FReceiverNUMBER"].ToString() }); //收料员
@@ -928,18 +966,20 @@
                                    FentityModel.Add("FSRCENTRYID", item["FENTRYID"].ToString());//源单分录内码
                                    FentityModel.Add("FORDERBILLNO", item["FBILLNO"].ToString());//源单单号
                                    FentityModel.Add("FPOORDERENTRYID", item["FENTRYID"].ToString());//源单分录内码
                                    FentityModel.Add("FSRMENTRYID", item["HENTRYID"].ToString());//SRM hentryid
                                    FentityModel.Add("FPrice", item["FPRICE"].ToString());//单价
                                    FentityModel.Add("FTaxPrice", item["FTAXPRICE"].ToString());//含税单价
                                    FentityModel.Add("FEntryTaxRate", item["FTAXRATE"].ToString());//税率
                                    FentityModel.Add("FSRMENTRYID", item["HENTRYID"].ToString());//SRM hentryid
                                    FentityModel.Add("FLot", new JObject() { ["Fnumber"] = item["HBatChNo"].ToString() }); // 批号   
                                    FentityModel.Add("FProduceDate", item["FProduceDate"].ToString());//生产日期
                                    FentityModel.Add("F_aaaa_Price1", item["F_aaaa_Price1"].ToString());//含税重量单价/吨
                                    FentityModel.Add("F_bsv_Text1", item["HExpressSupplierSub"].ToString());//物流单位 (瑞琪)
                                    FentityModel.Add("F_bsv_Text2", item["HExpressNumberSub"].ToString());//物流单号 (瑞琪)
                                    FentityModel.Add("FDescription", item["HRemark"].ToString());//表体备注 (瑞琪)
                                    FentityModel.Add("F_bsv_dhrq", item["HPlanArrivalDate"].ToString());//到货日期 (瑞琪)
                                    FentityModel.Add("F_bsv_xh", item["HBoxNumber"].ToString());//箱号 (瑞琪)
                                    FentityModel.Add("FPrice", item["FPRICE"].ToString());//单价
                                    FentityModel.Add("FTaxPrice", item["FTAXPRICE"].ToString());//含税单价
                                    FentityModel.Add("FEntryTaxRate", item["FTAXRATE"].ToString());//税率
                                    FentityModel.Add("FGiveAway", item["FGiveAway"].ToString());//是否赠品
                                    JArray Fentity2 = new JArray();
                                    JObject FentityModel2 = new JObject();
                                    FentityModel2.Add("FDetailEntity_Link_FRULEID", "PUR_PurchaseOrder-PUR_ReceiveBill");
@@ -1186,7 +1226,30 @@
                            LogService.Write("收料通知单审核无数据:" + sql);
                        }
                    }
                    //==================================== Begin 送货单审核后控制 Begin ====================================
                    for (int i = 0; i < sArray.Length; i++)
                    {
                        ds = oCn.RunProcReturn("exec h_p_SRM_Cg_POInStockBill_AfterCheckCtrl " + sArray[i] + ",'" + HBillNo + "','" + CurUserName + "'", "h_p_SRM_Cg_POInStockBill_AfterCheckCtrl");
                        if (ds == null)
                        {
                            oCn.RollBack(); //回滚事物
                            objjson.code = "0";
                            objjson.count = 0;
                            objjson.Message = "审核后判断失败!无数据返回";
                            objjson.data = null;
                            return objjson;
                        }
                        if (DBUtility.ClsPub.isStrNull(ds.Tables[0].Rows[0]["HBack"]) != "0")
                        {
                            oCn.RollBack(); //回滚事物
                            objjson.code = "0";
                            objjson.count = 0;
                            objjson.Message = "审核失败!" + DBUtility.ClsPub.isStrNull(ds.Tables[0].Rows[0]["HRemarkBack"]);
                            objjson.data = null;
                            return objjson;
                        }
                    }
                    //====================================== End 送货单审核后控制 End ======================================
                }
                ////更新物流字段 (瑞与琪)
@@ -1199,6 +1262,9 @@
HCheckDate   = getdate()
where HInterID in ({1})", CurUserName, HInterID);
                oCn.RunProc(sql);
                oCn.Commit(); //提交事物
                objjson.code = "1";
                objjson.count = 1;
                objjson.Message = "操作成功";
@@ -1207,7 +1273,7 @@
            }
            catch (Exception ex)
            {
                oCn.RollBack(); //回滚事物
                objjson.code = "0";
                objjson.count = 0;
                objjson.Message = "操作失败" + ex.Message.ToString();
@@ -1255,8 +1321,43 @@
            try
            {
                DAL.ClsCg_POInStockBill oBill = new DAL.ClsCg_POInStockBill();
                //先删除 金蝶数据
                objjson = DeleteKingDee(HInterID);
                SQLHelper.ClsCNSRM oCn = new SQLHelper.ClsCNSRM();
                //获取客户名称
                string FCusName = oSystemParameter.GetSingleSystemParameter("WMS_CampanyName", ref DBUtility.ClsPub.sExeReturnInfo);
                //夏宝需要先在金蝶删除收料通知单后才能在供应商协同平台删除送货单
                if (FCusName == "夏宝电器")
                {
                    string sqlBeforeDel = $"exec h_p_SRM_POInStockBeforeDelCtrl " + HInterID;
                    DataSet ds = oCn.RunProcReturn(sqlBeforeDel, "h_p_SRM_POInStockBeforeDelCtrl");
                    if (ds == null || ds.Tables[0].Rows.Count <= 0)
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "删除送货单发生异常,没有任何返回记录!";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    else
                    {
                        if (ds.Tables[0].Rows[0]["HBackCount"].ToString() == "1")
                        {
                            objJsonResult.code = "0";
                            objJsonResult.count = 0;
                            objJsonResult.Message = ds.Tables[0].Rows[0]["HRemarkBack"].ToString();
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                    }
                }
                else
                {
                    //先删除 金蝶数据
                    objjson = DeleteKingDee(HInterID);
                }
                //LogService.Write(objjson.ToString());
                if (objjson.code == "0")
                    return objjson;
@@ -1423,8 +1524,8 @@
        /// <returns></returns>
        public object TestSaverPOInStock(string ids, string entryids)
        {
            List<string> mylist = new List<string>(ids.Split(',').Distinct());
            List<string> entryList = new List<string>(entryids.Split(',').Distinct());
            List<string> mylist = new List<string>(ids.Split(','));//.Distinct()
            List<string> entryList = new List<string>(entryids.Split(','));//.Distinct()
            SQLHelper.ClsCNSRM oCn = new SQLHelper.ClsCNSRM();
            string FCusName = oSystemParameter.GetSingleSystemParameter("WMS_CampanyName", ref DBUtility.ClsPub.sExeReturnInfo);
            if (FCusName == "夏宝电器" && mylist.Count > 1)
@@ -1437,11 +1538,39 @@
            }
            try
            {
                DataSet ds2;
                oCn.BeginTran(); //开始事物
                //采购订单下推生成送货单 时候 判断是否有生成采购订单变更单 如果有且变更单状态不为已审核 限制下推
                objJsonResult = TestPOOrder(entryids);
                if (objJsonResult.code == "0")
                    return objJsonResult;
                if (mylist.Count != entryList.Count)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "主内码与子内码数量不一致!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                for (int i = 0;i < mylist.Count;i++)
                {
                    //采购订单下推生成送货单前控制
                    string sql = "exec h_p_SRM_POOrderBill_BeforePushDownCtrl " + mylist[i] + "," + entryList[i];
                    ds2 = oCn.RunProcReturn(sql, "h_p_SRM_POOrderBill_BeforePushDownCtrl");
                    if (DBUtility.ClsPub.isStrNull(ds2.Tables[0].Rows[0]["HBack"]) != "0")
                    {
                        oCn.RollBack(); //回滚事物
                        objjson.code = "0";
                        objjson.count = 0;
                        objjson.Message = "审核前判断失败!" + DBUtility.ClsPub.isStrNull(ds2.Tables[0].Rows[0]["HRemarkBack"]);
                        objjson.data = null;
                        return objjson;
                    }
                }
                for (int i = 0; i < mylist.Count; i++)
                {
                    //更新关联数量
@@ -1452,7 +1581,7 @@
                //判断未关联数量是否为0
                //安瑞:AIS20220914133941   瑞与琪:AIS20220308151944  本地:AIS20210811135644  夏宝:AIS20211130140219  凯贝:AIS20210820164804
                DataSet ds = oCn.RunProcReturn($"select T1.hqty-T1.hrelationqty+q.FMRBQTY as hqty,单据号,物料编码 from H_v_SRM_POOrderBillList t1 left join AIS20220308151944..T_PUR_POORDERENTRY_R q on q.FENTRYID=t1.HEntryID  where hentryid in ({string.Join(", ", entryList)}) ", "H_v_SRM_POOrderBillList");
                DataSet ds = oCn.RunProcReturn($"select T1.hqty-T1.hrelationqty+q.FMRBQTY as hqty,q.FRemainReceiveQty as 剩余收料数量,T1.hrelationqty as 已发货数量,T1.hqty as 订单数量,单据号,物料编码 from H_v_SRM_POOrderBillList t1 left join AIS20210820164804..T_PUR_POORDERENTRY_R q on q.FENTRYID=t1.HEntryID  where hentryid in ({string.Join(", ", entryList)})", "H_v_SRM_POOrderBillList");
                DataTable dt = ds.Tables[0];
                if (dt.Rows.Count > 0)
                {
@@ -1461,11 +1590,14 @@
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = $"请检查数据,单据号:{dr[0]["单据号"]},物料编码:{dr[0]["物料编码"]},可以发货数量为0,已全部生成送货单!";
                        objJsonResult.Message = $"请检查数据,单据号:{dr[0]["单据号"]},物料编码:{dr[0]["物料编码"]},可以发货数量为0,已全部生成送货单!,订单数量:{Convert.ToDouble(dr[0]["订单数量"]).ToString("f2")},已发货数量:{Convert.ToDouble(dr[0]["已发货数量"]).ToString("f2")},剩余收料数量:{Convert.ToDouble(dr[0]["剩余收料数量"]).ToString("f2")}";
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                }
                oCn.Commit(); //提交事物
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "操作成功!";