| 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<int>(); | 
|                         //判断是否登录成功 | 
|                         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 | 
|   | 
|     } | 
| } |