using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Data; using System.Web.Http; using WebAPI.Models; namespace WebAPI.Controllers { public class Kf_MoveStockBillController : ApiController { public DBUtility.ClsPub.Enum_BillStatus BillStatus; public const string ModName = "1207"; //单据类型 public const string ModCaption = "直接调拨单"; //单据名称 public const string ModRightName = "Kf_MoveStockBill"; public const string ModRightNameList = ModRightName + "List"; //列表 public const string ModRightNameEdit = ModRightName + "_Edit"; //编辑 public const string ModRightNameCheck = ModRightName + "_Check"; //审核 public const string ModRightNameClose = ModRightName + "_Close"; //关闭 public const string ModRightNameDelete = ModRightName + "_Delete"; //作废 public const string ModRightNameDrop = ModRightName + "_Drop"; //删除 public const string ModRightNameMoney = ModRightName + "_Money"; //金额 public const string ModRightNameQty = ModRightName + "_Qty"; //数量 public DataSet ds = new DataSet(); private json objJsonResult = new json(); SQLHelper.ClsCN oCn = new SQLHelper.ClsCN(); Pub_Class.ClsXt_SystemParameter oSystemParameter = new Pub_Class.ClsXt_SystemParameter(); public DAL.ClsKf_MoveStockBill oBill = new DAL.ClsKf_MoveStockBill(); #region 根据单据号,同步直接调拨单 [Route("Kf_MoveStockBillController/GetKf_MoveStockBill_Sync_Json")] [HttpGet] public json GetKf_MoveStockBill_Sync_Json(string HBillNo, string HBillType) { try { //获取系统参数 string sql = string.Empty; string sErrMsg = ""; if (oSystemParameter.ShowBill(ref sErrMsg) == true) { //系统参数是否为私有云模式,N为公有云模式,Y为私有云模式 //私有云模式,通过调用存储过程进行同步 if (oSystemParameter.omodel.WMS_CloudMode.ToUpper() == "Y") { ds = oCn.RunProcReturn("exec h_p_IFCLD_ERPSourceBillToLocal_MoveStock '" + HBillNo + "'", "h_p_IFCLD_ERPSourceBillToLocal_MoveStock"); if (ds == null || ds.Tables[0].Rows.Count == 0) { objJsonResult.code = "0"; objJsonResult.count = 0; objJsonResult.Message = "单据同步发生错误!"; objJsonResult.data = null; return objJsonResult; } else { if (DBUtility.ClsPub.isLong(ds.Tables[0].Rows[0]["HBack"]) == 2) { objJsonResult.code = "0"; objJsonResult.count = 0; objJsonResult.Message = DBUtility.ClsPub.isStrNull(ds.Tables[0].Rows[0]["HBackRemark"]); objJsonResult.data = null; return objJsonResult; } else { objJsonResult.code = "0"; objJsonResult.count = 1; objJsonResult.Message = "单据同步成功!"; objJsonResult.data = null; return objJsonResult; } } } //公有云模式,通过调用WEBAPI方式进行同步 else if (oSystemParameter.omodel.WMS_CloudMode.ToUpper() == "N") { //判断金蝶云是否登录成功 var loginRet = InvokeHelper.Login(); var isSuccess = JObject.Parse(loginRet)["LoginResultType"].Value(); //判断是否登录成功 if (isSuccess <= 0) { objJsonResult.code = "0"; objJsonResult.count = 0; objJsonResult.Message = "同步失败,金蝶云登入不成功,请确认C盘配置文件所设置金蝶云对应网址、账套、登录用户、登录密码是否正确!"; objJsonResult.data = null; return objJsonResult; } var json = new { CreateOrgId = 0, Number = HBillNo, Id = "" }; //查看 获取数据 var _result = InvokeHelper.View("STK_TransferDirect", JsonConvert.SerializeObject(json)); var _saveObj = JObject.Parse(_result); //判断金蝶云数据是否获取成功 if (_saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() != "TRUE") { objJsonResult.code = "0"; objJsonResult.count = 0; objJsonResult.Message = "金蝶云直接调拨单获取失败:" + _result; objJsonResult.data = null; return objJsonResult; } oCn.BeginTran(); //查找本地直接调拨单表中是否存在该单据,存在获取本单单据ID,不存在则获取最大单据ID Int64 HNewInterID = 0; ds = oCn.RunProcReturn("select HInterID from Kf_ICStockBillMain with(nolock) where HBillNo = '" + HBillNo + "' and HBillType='1207'", "Kf_ICStockBillMain"); if (ds == null || ds.Tables[0].Rows.Count == 0) { HNewInterID = DBUtility.ClsPub.CreateBillID_Prod(HBillType, ref sErrMsg); } else { HNewInterID = DBUtility.ClsPub.isLong(ds.Tables[0].Rows[0]["HInterID"]); } //根据单据号删除本地直接调拨单中对应单据 oCn.RunProc("Delete b from Kf_ICStockBillMain a inner join Kf_ICStockBillSub b on a.HInterID=b.HInterID where a.HBillNo = '" + HBillNo + "' and a.HBillType='1207'", ref DBUtility.ClsPub.sExeReturnInfo); oCn.RunProc("Delete from Kf_ICStockBillMain where HBillNo = '" + HBillNo + "' and HBillType='1207'", ref DBUtility.ClsPub.sExeReturnInfo); //主表数据赋值 var MainData = new { HInterID = HNewInterID, HBillNo = DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["BillNo"]), HBillType = "1207", HBillSubType = "1207", HMainSourceBillType = "", HDate = DBUtility.ClsPub.isDate(_saveObj["Result"]["Result"]["Date"]), HSupID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["SupplierID_Id"]), HWHID = 0, HSCWHID = 0, HEmpID = 0, HManagerID = 0, HSecManagerID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["SalerId_Id"]), HKeeperID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["StockerId_Id"]), HDeptID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["SaleDeptId_Id"]), HCurID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["CustID_Id"]), HSeOrderBillNo = "", HExplanation = "CLD导入", HRemark = DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["Note"]), HInnerBillNo = "", HRedBlueFlag = 0, HBillStatus = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["ApproverId_Id"]) == 0 ? 1 : 2, HMaker = DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["CreatorId"]["Name"]), HMakeDate = DBUtility.ClsPub.isDate(_saveObj["Result"]["Result"]["CreateDate"]), HChecker = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["ApproverId_Id"]) == 0 ? "" : DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["ApproverId"]["Name"]), HCheckDate = DBUtility.ClsPub.isDate(_saveObj["Result"]["Result"]["ApproveDate"]), HUpDater = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["ModifierId_Id"]) == 0 ? "" : DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["ModifierId"]["Name"]), HUpDateDate = DBUtility.ClsPub.isDate(_saveObj["Result"]["Result"]["ModifyDate"]), HDeleteMan = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["CANCELER_Id"]) == 0 ? "" : DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["CANCELER"]["Name"]), HDeleteDate = DBUtility.ClsPub.isDate(_saveObj["Result"]["Result"]["CancelDate"]), HStockStyle = DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["TransferBizType"]) == "InnerOrgTransfer" ? "组织内调拨" : "跨组织调拨", HOWNERID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["OwnerIdHead_Id"]), HOWNERTYPEID = DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["OwnerTypeIdHead"]), HERPInterID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["Id"]), HERPBillType = DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["BillTypeID_Id"]), HERPBillNo = DBUtility.ClsPub.isStrNull(_saveObj["Result"]["Result"]["BillNo"]), HSTOCKINORGID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["StockOrgId_Id"]), HSTOCKOUTORGID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["StockOutOrgId_Id"]), HSALEORGID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["SaleOrgId_Id"]), HSETTLEORGID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["SettleOrgId_Id"]), HPRDORGID = 0, HSTOCKORGID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["StockOutOrgId_Id"]), }; //写入主表 sql = $@"Insert into Kf_ICStockBillMain (HInterID,HYear,HPeriod,HBillNo,HBillType,HBillSubType,HMainSourceBillType,HDate ,HSupID,HWHID,HSCWHID,HEmpID,HManagerID,HSecManagerID,HKeeperID,HDeptID,HCurID ,HSeOrderBillNo,HExplanation,HRemark,HInnerBillNo,HRedBlueFlag,HBillStatus ,HMaker,HMakeDate ,HChecker,HCheckDate ,HUpDater,HUpDateDate ,HDeleteMan,HDeleteDate ,HStockStyle ,HOWNERID,HOWNERTYPEID,HERPInterID,HERPBillType,HERPBillNo ,HSTOCKINORGID,HSTOCKOUTORGID,HSALEORGID,HSETTLEORGID ,HPRDORGID,HSTOCKORGID) Values({MainData.HInterID},year('{MainData.HDate}'),month('{MainData.HDate}'),'{MainData.HBillNo}','{MainData.HBillType}','{MainData.HBillSubType}','{MainData.HMainSourceBillType}','{MainData.HDate}' , {MainData.HSupID},{MainData.HWHID},{MainData.HSCWHID},{MainData.HEmpID},{MainData.HManagerID},{MainData.HSecManagerID},{MainData.HKeeperID},{MainData.HDeptID},{MainData.HCurID} ,'{MainData.HSeOrderBillNo}','{MainData.HExplanation}','{MainData.HRemark}','{MainData.HInnerBillNo}',{MainData.HRedBlueFlag},{MainData.HBillStatus} ,'{MainData.HMaker}','{MainData.HMakeDate}' ,'{MainData.HChecker}',case when '{MainData.HCheckDate}' = '1900/1/1 0:00:00' then NULL else '{MainData.HCheckDate}' end ,'{MainData.HUpDater}',case when '{MainData.HUpDateDate}' = '1900/1/1 0:00:00' then NULL else '{MainData.HUpDateDate}' end ,'{MainData.HDeleteMan}',case when '{MainData.HDeleteDate}' = '1900/1/1 0:00:00' then NULL else '{MainData.HDeleteDate}' end ,'{MainData.HStockStyle}' , {MainData.HOWNERID},'{MainData.HOWNERTYPEID}',{MainData.HERPInterID},'{MainData.HERPBillType}','{MainData.HERPBillNo}' , {MainData.HSTOCKINORGID},{MainData.HSTOCKOUTORGID},{MainData.HSALEORGID},{MainData.HSETTLEORGID} , {MainData.HPRDORGID},{MainData.HSTOCKORGID})"; oCn.RunProc(sql.Replace("\r\n", "")); //子表数据赋值 var dataArr = _saveObj["Result"]["Result"]["TransferDirectEntry"]; foreach (var oSub in dataArr) { var subData = new { HInterID = HNewInterID, HEntryID = DBUtility.ClsPub.isLong(oSub["Id"]), HMTONo = DBUtility.ClsPub.isStrNull(oSub["MtoNo"]), HPlanMode = 0, HRemark = DBUtility.ClsPub.isStrNull(oSub["NoteEntry"]), HExpressNumber = "", HMaterID = DBUtility.ClsPub.isLong(oSub["MaterialId_Id"]), HUnitID = DBUtility.ClsPub.isLong(oSub["UnitId_Id"]), HBatchNo = DBUtility.ClsPub.isStrNull(oSub["DestLot_Text"]), HPropertyID = DBUtility.ClsPub.isLong(oSub["AuxPropId_Id"]), HWHID = DBUtility.ClsPub.isLong(oSub["DestStockId_Id"]), HSPID = DBUtility.ClsPub.isLong(oSub["DestStockLocId_Id"]), HSCWHID = DBUtility.ClsPub.isLong(oSub["SrcStockId_Id"]), HSCSPID = DBUtility.ClsPub.isLong(oSub["SrcStockLocId_Id"]), HQtyMust = DBUtility.ClsPub.isDoule(oSub["Qty"]), HQty = DBUtility.ClsPub.isDoule(oSub["Qty"]), HPrice = DBUtility.ClsPub.isDoule(oSub["Price"]), HMoney = DBUtility.ClsPub.isDoule(oSub["Amount"]), HTaxPrice = DBUtility.ClsPub.isDoule(oSub["Price"]), HTaxRate = 1, HTaxMoney = DBUtility.ClsPub.isDoule(oSub["Amount"]), HRelationQty = 0, HRelationMoney = 0, HSourceInterID = 0, HSourceEntryID = 0, HSourceBillNo = DBUtility.ClsPub.isStrNull(oSub["SrcBillNo"]), HSourceBillType = DBUtility.ClsPub.isStrNull(oSub["SrcBillTypeId"]), HERPInterID = DBUtility.ClsPub.isLong(_saveObj["Result"]["Result"]["Id"]), HERPEntryID = DBUtility.ClsPub.isLong(oSub["Id"]), HERPBillNo_Sub = "", HPOOrderInterID = 0, HPOOrderEntryID = 0, HPOOrderBillNo = "", HSeOrderInterID = 0, HSeOrderEntryID = 0, HSeOrderBillNo = "", HICMOInterID = 0, HICMOEntryID = 0, HICMOBillNo = "", HWWOrderInterID = 0, HWWOrderEntryID = 0, HWWOrderBillNo = "", HProduceDate = DBUtility.ClsPub.isDate(oSub["ProduceDate"]), HExpiryDate = DBUtility.ClsPub.isDate(oSub["ExpiryDate"]), HOWNERID = DBUtility.ClsPub.isLong(oSub["OwnerId_Id"]), HOWNERTYPEID = DBUtility.ClsPub.isStrNull(oSub["OwnerTypeId"]), HKEEPERID = DBUtility.ClsPub.isLong(oSub["KeeperId_Id"]), HKEEPERTYPEID = DBUtility.ClsPub.isStrNull(oSub["KeeperTypeId"]), }; //写入子表 sql = $@"Insert into Kf_ICStockBillSub (HInterID,HEntryID,HMTONo,HPlanMode,HRemark,HExpressNumber ,HMaterID,HUnitID,HBatchNo,HPropertyID,HWHID,HSPID,HSCWHID,HSCSPID ,HQtyMust,HQty,HPrice,HMoney,HTaxPrice,HTaxRate,HTaxMoney,HRelationQty,HRelationMoney ,HSourceInterID,HSourceEntryID,HSourceBillNo,HSourceBillType,HERPInterID,HERPEntryID,HERPBillNo_Sub ,HPOOrderInterID,HPOOrderEntryID,HPOOrderBillNo,HSeOrderInterID,HSeOrderEntryID,HSeOrderBillNo ,HICMOInterID,HICMOEntryID,HICMOBillNo,HWWOrderInterID,HWWOrderEntryID,HWWOrderBillNo ,HProduceDate ,HExpiryDate ,HOWNERID,HOWNERTYPEID,HKEEPERID,HKEEPERTYPEID) Values ({subData.HInterID},{subData.HEntryID},'{subData.HMTONo}',{subData.HPlanMode},'{subData.HRemark}','{subData.HExpressNumber}' ,{subData.HMaterID},{subData.HUnitID},'{subData.HBatchNo}',{subData.HPropertyID},{subData.HWHID},{subData.HSPID},{subData.HSCWHID},{subData.HSCSPID} ,{subData.HQtyMust},{subData.HQty},{subData.HPrice},{subData.HMoney},{subData.HTaxPrice},{subData.HTaxRate},{subData.HTaxMoney},{subData.HRelationQty},{subData.HRelationMoney} ,{subData.HSourceInterID},{subData.HSourceEntryID},'{subData.HSourceBillNo}','{subData.HSourceBillType}',{subData.HERPInterID},{subData.HERPEntryID},'{subData.HERPBillNo_Sub}' ,{subData.HPOOrderInterID},{subData.HPOOrderEntryID},'{subData.HPOOrderBillNo}',{subData.HSeOrderInterID},{subData.HSeOrderEntryID},'{subData.HSeOrderBillNo}' ,{subData.HICMOInterID},{subData.HICMOEntryID},'{subData.HICMOBillNo}',{subData.HWWOrderInterID},{subData.HWWOrderEntryID},'{subData.HWWOrderBillNo}' ,case when '{subData.HProduceDate}' = '1900/1/1 0:00:00' then NULL else '{subData.HProduceDate}' end ,case when '{subData.HExpiryDate}' = '1900/1/1 0:00:00' then NULL else '{subData.HExpiryDate}' end ,{subData.HOWNERID},'{subData.HOWNERTYPEID}',{subData.HKEEPERID},'{subData.HKEEPERTYPEID}')"; oCn.RunProc(sql.Replace("\r\n", "")); } oCn.Commit(); objJsonResult.code = "0"; objJsonResult.count = 1; objJsonResult.Message = "单据同步成功!"; objJsonResult.data = null; return objJsonResult; } else { objJsonResult.code = "0"; objJsonResult.count = 1; objJsonResult.Message = "不支持同步功能!"; objJsonResult.data = null; return objJsonResult; } } else { objJsonResult.code = "0"; objJsonResult.count = 0; objJsonResult.Message = "获取系统参数失败! " + sErrMsg; objJsonResult.data = null; return objJsonResult; } } catch (Exception e) { objJsonResult.code = "0"; objJsonResult.count = 0; objJsonResult.Message = "单据同步失败!" + e.ToString(); objJsonResult.data = null; return objJsonResult; } } #endregion } }