WebAPI/Controllers/SCGL/Sc_ComplementGoodsController.cs
@@ -32,6 +32,7 @@
            public string HDeptName { get; set; }//部门
            public string HJLStatus { get; set; }//拣料状态
            public string user { get; set; }//制单人
            public string Arbitrarily { get; set; }//任意参数
        }
        [Route("Sc_ComplementGoods/ComplementGoodsList")]
@@ -60,11 +61,8 @@
                //反序列化传递的值
                ComplementGoods com = JsonConvert.DeserializeObject<ComplementGoods>(sWhere.ToString());
                ds = oCN.RunProcReturn($"exec h_p_JIT_ComplementGoodsBillList_Query '{com.MaterialNumber}','{com.MaterialName}','{com.MaterialModel}','{com.HGD}'," +
                    $"'{com.HWHName}','{com.HDeptName}','{com.Organization}','{com.user}','{com.HJLStatus}','{com.HBeginDate}','{com.HEndDate}'", "h_p_JIT_ComplementGoodsBillList_Query");
                //bool a = AddSendGoodsBillSynChronizAtion("PLD00000112", ref DBUtility.ClsPub.sExeReturnInfo);
                       $"'{com.HWHName}','{com.HDeptName}','{com.Organization}','{com.user}','{com.HJLStatus}','{com.HBeginDate}','{com.HEndDate}'", "h_p_JIT_ComplementGoodsBillList_Query");
                objJsonResult.code = "1";
                objJsonResult.count = 1;
@@ -257,15 +255,15 @@
                    }
                }
                bool flag = false;
                flag = AddSendGoodsBill(listCa, SourceInterID, SourceBillNo, user, ref DBUtility.ClsPub.sExeReturnInfo);
                objJsonResult = AddSendGoodsBill(listCa, SourceInterID, SourceBillNo, user);
                if (flag)
                if (objJsonResult.count==1)
                {
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "配送成功!";
                    objJsonResult.Message = "调拨单生成成功!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
@@ -273,7 +271,7 @@
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "配送失败!";
                    objJsonResult.Message = objJsonResult.Message;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
@@ -288,35 +286,17 @@
            }
        }
        //新增
        public bool AddSendGoodsBill(List<SendGoodsBill> listCa, string SourceInterID, string SourceBillNo, string user, ref string sReturn)
        public json AddSendGoodsBill(List<SendGoodsBill> listCa, string SourceInterID, string SourceBillNo, string user)
        {
            try
            {
                oCN.BeginTran();
                //oCN.RunProc($"delete from JIT_SendGoodsBillMain where HMainSourceInterID={SourceInterID} and HMainSourceBillNo='{SourceBillNo}' and HBillStatus=1");
                //oCN.RunProc($"delete from JIT_SendGoodsBillSub where HInterID in (select HInterID from JIT_SendGoodsBillMain where HMainSourceInterID={SourceInterID} and HMainSourceBillNo='{SourceBillNo}' and HBillStatus=1)");
                ds = oCN.RunProcReturn($"select a.HMainSourceEntryID,b.HMaterID  from JIT_SendGoodsBillMain a  with(nolock) inner join JIT_SendGoodsBillSub b with(nolock) on a.HInterID = b.HInterID where a.HMainSourceInterID={SourceInterID} and a.HBillStatus=1", "JIT_SendGoodsBillMain");
                long InterID = 0;
                string HBillNo = "";
                for (int i = 0; i < listCa.Count; i++)
                {
                    //int a = -1;
                    //for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
                    //{
                    //    if (ds.Tables[0].Rows[j]["HMaterID"].ToString() == listCa[i].HMaterID.ToString() && ds.Tables[0].Rows[j]["HMainSourceEntryID"].ToString() == listCa[i].HEntryID.ToString())
                    //    {
                    //        a = j;
                    //        break;
                    //    }
                    //}
                    // 则代表配送单没有数据  需要添加数据
                    if (ds.Tables[0].Rows.Count == 0)
                    {
                        if (i == 0)
                        {
                            InterID = DBUtility.ClsPub.CreateBillID_Prod("460201", ref DBUtility.ClsPub.sExeReturnInfo);
@@ -335,111 +315,183 @@
                            ",HMaterID,HQty,HWHID,HSPID,HISCheck,HCheckSubMan,HCheckSubDate,HStockOutOrgID,HStockInOrgID,HSCWHID)" +
                            $"values({InterID},'{HBillNo}',{i + 1}, {listCa[i].HMaterID},{listCa[i].本次拣料数量}," +
                            $" {listCa[i].HWHID},{listCa[i].HSPID},0,'{user}', GETDATE(),{listCa[i].HStockOutOrgID},{listCa[i].HStockInOrgID},{listCa[i].HSCWHID})");
                        //同步金蝶直接调拨单
                        if (AddSendGoodsBillSynChronizAtion(HBillNo, ref DBUtility.ClsPub.sExeReturnInfo))
                        {
                        }
                    }
                    else
                    {
                        //修改配送单的配送数量
                        oCN.RunProc($"update b  set b.HQty=b.HQty+{listCa[i].本次拣料数量} from JIT_SendGoodsBillMain a  with(nolock) inner join JIT_SendGoodsBillSub b with(nolock) on a.HInterID = b.HInterID  " +
                            $"where  HMainSourceInterID ={SourceInterID} and b.HMaterID ={listCa[i].HMaterID} and a.HBillStatus =1 ");
                    }
                    DataSet dsTable = new DataSet();
                    //查询JIT_ComplementGoodsBillSub_LK
                    dsTable = oCN.RunProcReturn($"select  * from JIT_ComplementGoodsBillSub_LK where HMaterID={listCa[i].HMaterID}  and HInterID={SourceInterID} order by HSourceInterID ", "JIT_ComplementGoodsBillSub_LK");
                    dsTable = oCN.RunProcReturn($"select  * from JIT_ComplementGoodsBillSub_LK where HMaterID={listCa[i].HMaterID}  and HInterID={SourceInterID} and HCallQTY<>HSendQTY  order by HSourceInterID ", "JIT_ComplementGoodsBillSub_LK");
                    var HqtyCount = double.Parse(listCa[i].本次拣料数量.ToString());
                    for (int j = 0; j < dsTable.Tables[0].Rows.Count; j++)
                    {
                        if (double.Parse(dsTable.Tables[0].Rows[j]["HCallQTY"].ToString()) != double.Parse(dsTable.Tables[0].Rows[j]["HSendQTY"].ToString()))
                        {
                            if (double.Parse(dsTable.Tables[0].Rows[j]["HSendQTY"].ToString()) + listCa[i].本次拣料数量 > double.Parse(dsTable.Tables[0].Rows[j]["HCallQTY"].ToString()))
                            {
                                var HCallQTY = double.Parse(dsTable.Tables[0].Rows[j]["HCallQTY"].ToString()) - double.Parse(dsTable.Tables[0].Rows[j]["HSendQTY"].ToString());
                                //修改调拨数量 超出部分给予下一列数据
                                oCN.RunProc($"update JIT_ComplementGoodsBillSub_LK set HSendQTY=HSendQTY+{HCallQTY} where HMaterID={listCa[i].HMaterID} " +
                                    $" and HSourceInterID={double.Parse(dsTable.Tables[0].Rows[j]["HSourceInterID"].ToString())} and HInterID={SourceInterID} ");
                        var HCallQTY = double.Parse(dsTable.Tables[0].Rows[j]["HCallQTY"].ToString()) - double.Parse(dsTable.Tables[0].Rows[j]["HSendQTY"].ToString());
                                oCN.RunProc($"update JIT_ComplementGoodsBillSub_LK set HSendQTY=HSendQTY+{(listCa[i].本次拣料数量 - HCallQTY)} where HMaterID={listCa[i].HMaterID} " +
                                   $" and HSourceInterID={dsTable.Tables[0].Rows[j + 1]["HSourceInterID"].ToString()} and HInterID={SourceInterID} ");
                                break;
                            }
                            else
                            {
                                //修改调拨数量
                                oCN.RunProc($"update JIT_ComplementGoodsBillSub_LK set HSendQTY=HSendQTY+{listCa[i].本次拣料数量} where HMaterID={listCa[i].HMaterID} " +
                                    $" and HSourceInterID={dsTable.Tables[0].Rows[j]["HSourceInterID"].ToString()} and HInterID={SourceInterID} ");
                                break;
                            }
                        //修改调拨数量
                        oCN.RunProc($"update JIT_ComplementGoodsBillSub_LK set HSendQTY=HSendQTY+{(HCallQTY < HqtyCount ? HCallQTY : HqtyCount)} where HMaterID={listCa[i].HMaterID} " +
                            $" and HSourceInterID={double.Parse(dsTable.Tables[0].Rows[j]["HSourceInterID"].ToString())} and HInterID={SourceInterID} ");
                        HqtyCount -= HCallQTY;
                        if (HqtyCount <= 0)
                        {
                            break;
                        }
                    }
                }
                sReturn = "新增单据成功!";
                //同步金蝶直接调拨单
                objJsonResult = AddSendGoodsBillSynChronizAtion(HBillNo);
                oCN.Commit();
                return true;
                if (objJsonResult.count == 1)
                {
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    objJsonResult.Message = null;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                else
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = objJsonResult.Message;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
            }
            catch (Exception e)
            {
                oCN.RollBack();
                sReturn = e.Message;
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = objJsonResult.Message;
                return objJsonResult;
                throw (e);
            }
        }
        //同步金蝶直接调拨单
        public bool AddSendGoodsBillSynChronizAtion(string HBillNo, ref string sReturn)
        public json AddSendGoodsBillSynChronizAtion(string HBillNo)
        {
            ds = oCN.RunProcReturn("exec JIT_SendGoodsBillSynChronizAtion '" + HBillNo + "'", "JIT_SendGoodsBillSynChronizAtion");
            foreach (DataRow dr in ds.Tables[0].Rows)
            if (ds.Tables[0].Rows.Count != 0)
            {
                JObject model = new JObject();
                model.Add("FBillTypeID", new JObject() { ["Fnumber"] = dr["FBillTypeID"].ToString() }); //单据类型
                model.Add("FDate", dr["FDate"].ToString());
                model.Add("FBILLNO", dr["FBILLNO"].ToString());
                model.Add("FStockOrgId", new JObject() { ["Fnumber"] = dr["FStockOrgId"].ToString() });
                model.Add("FOwnerTypeIdHead", dr["FOwnerTypeIdHead"].ToString());
                model.Add("FTransferBizType", dr["FTransferBizType"].ToString());
                model.Add("FOwnerTypeOutIdHead", dr["FOwnerTypeOutIdHead"].ToString());
                model.Add("FTransferDirect", dr["FTransferDirect"].ToString());
                model.Add("FStockOutOrgId", new JObject() { ["Fnumber"] = dr["FStockOutOrgId"].ToString() });
                JArray Fentity = new JArray();
                JObject FentityModel = new JObject();
                FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = dr["FMaterialId"].ToString() });
                FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = dr["FUnitID"].ToString() });
                FentityModel.Add("FBaseUnitId", new JObject() { ["Fnumber"] = dr["FBaseUnitId"].ToString() });
                FentityModel.Add("FOwnerTypeId", dr["FOwnerTypeId"].ToString());
                FentityModel.Add("FOwnerId", new JObject() { ["Fnumber"] = dr["FOwnerId"].ToString() });
                FentityModel.Add("FOwnerTypeOutId", dr["FOwnerTypeOutId"].ToString());
                FentityModel.Add("FOwnerOutId", new JObject() { ["Fnumber"] = dr["FOwnerOutId"].ToString() });
                FentityModel.Add("FKeeperTypeId", dr["FKeeperTypeId"].ToString());
                FentityModel.Add("FKeeperId", new JObject() { ["Fnumber"] = dr["FKeeperId"].ToString() });
                FentityModel.Add("FKeeperTypeOutId", dr["FKeeperTypeOutId"].ToString());
                FentityModel.Add("FKeeperOutId", new JObject() { ["Fnumber"] = dr["FKeeperOutId"].ToString() });
                FentityModel.Add("FQty", dr["FQty"].ToString());
                Fentity.Add(FentityModel);
                model.Add("FBillEntry", Fentity);
                JObject jsonRoot = new JObject()
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    ["Creator"] = "",
                    ["NeedUpDateFields"] = new JArray(),
                    ["NeedReturnFields"] = new JArray(),
                    ["IsDeleteEntry"] = "false",
                    ["SubSystemId"] = "",
                    ["IsVerifyBaseDataField"] = "false",
                    ["Model"] = model
                };
                    JObject model = new JObject();
                    model.Add("FBillTypeID", new JObject() { ["Fnumber"] = dr["FBillTypeID"].ToString() }); //单据类型
                    model.Add("FDate", dr["FDate"].ToString());
                    model.Add("FBILLNO", dr["FBILLNO"].ToString());
                    model.Add("FStockOrgId", new JObject() { ["Fnumber"] = ds.Tables[1].Rows[0]["FStockOrgId"].ToString() });
                    model.Add("FOwnerTypeIdHead", dr["FOwnerTypeIdHead"].ToString());
                    model.Add("FTransferBizType", ds.Tables[1].Rows[0]["FTransferBizType"].ToString());
                    model.Add("FOwnerTypeOutIdHead", dr["FOwnerTypeOutIdHead"].ToString());
                    model.Add("FTransferDirect", dr["FTransferDirect"].ToString());
                    model.Add("FStockOutOrgId", new JObject() { ["Fnumber"] = ds.Tables[1].Rows[0]["FStockOutOrgId"].ToString() });
                    JArray Fentity = new JArray();
                    foreach (DataRow item in ds.Tables[1].Rows)
                    {
                        JObject FentityModel = new JObject();
                        FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = item["FMaterialId"].ToString() });
                        FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = item["FUnitID"].ToString() });
                        FentityModel.Add("FBaseUnitId", new JObject() { ["Fnumber"] = item["FBaseUnitId"].ToString() });
                        FentityModel.Add("FOwnerTypeId", item["FOwnerTypeId"].ToString());
                        FentityModel.Add("FOwnerId", new JObject() { ["Fnumber"] = item["FOwnerId"].ToString() });
                        FentityModel.Add("FOwnerTypeOutId", item["FOwnerTypeOutId"].ToString());
                        FentityModel.Add("FOwnerOutId", new JObject() { ["Fnumber"] = item["FOwnerOutId"].ToString() });
                        FentityModel.Add("FKeeperTypeId", item["FKeeperTypeId"].ToString());
                        FentityModel.Add("FKeeperId", new JObject() { ["Fnumber"] = item["FKeeperId"].ToString() });
                        FentityModel.Add("FKeeperTypeOutId", item["FKeeperTypeOutId"].ToString());
                        FentityModel.Add("FKeeperOutId", new JObject() { ["Fnumber"] = item["FKeeperOutId"].ToString() });
                        FentityModel.Add("FDestStockId", new JObject() { ["Fnumber"] = item["FDestStockId"].ToString() });
                        FentityModel.Add("FSrcStockId", new JObject() { ["Fnumber"] = item["FSrcStockId"].ToString() });
                        FentityModel.Add("FQty", item["FQty"].ToString());
                        Fentity.Add(FentityModel);
                    }
                    model.Add("FBillEntry", Fentity);
                    JObject jsonRoot = new JObject()
                    {
                        ["Creator"] = "",
                        ["NeedUpDateFields"] = new JArray(),
                        ["NeedReturnFields"] = new JArray(),
                        ["IsDeleteEntry"] = "false",
                        ["SubSystemId"] = "",
                        ["IsVerifyBaseDataField"] = "false",
                        ["Model"] = model
                    };
                    var loginRet = InvokeHelper.Login();
                    var isSuccess = JObject.Parse(loginRet)["LoginResultType"].Value<int>();
                    if (isSuccess < 0)
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = loginRet;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    var result = InvokeHelper.Save("STK_TransferDirect", jsonRoot.ToString());
                    if (JObject.Parse(result)["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() != "TRUE")
                    {
                        oCN.RollBack();
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = result;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    var json = new
                    {
                        Numbers = HBillNo,
                    };
                    //提交
                    var _result = InvokeHelper.Submit("STK_TransferDirect", JsonConvert.SerializeObject(json));
                    var _saveObj = JObject.Parse(_result);
                    if (_saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() != "TRUE")
                    {
                        LogService.Write("收料通知单提交失败jsonRoot:" + jsonRoot.ToString());
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "金蝶收料通知单提交失败" + _result;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    //审核
                    _result = InvokeHelper.Audit("STK_TransferDirect", JsonConvert.SerializeObject(json));
                    _saveObj = JObject.Parse(_result);
                    if (_saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() != "TRUE")
                    {
                        LogService.Write("收料通知单审核失败jsonRoot:" + jsonRoot.ToString());
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = "金蝶收料通知单审核失败jsonRoot" + _result;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "操作成功!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
            }
            return true;
            else
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "调拨单已经存在,无法生成!";
                objJsonResult.data = null;
                return objJsonResult;
            }
            objJsonResult.code = "0";
            objJsonResult.count = 0;
            objJsonResult.Message = null;
            objJsonResult.data = null;
            return objJsonResult;
        }
        #endregion