圣珀
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

457 lines
18 KiB

2 years ago
  1. using ICS.WCF.Base;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Linq;
  7. using System.ServiceModel;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using UFSoft.UBF.Service;
  11. using UFSoft.UBF.Util.Context;
  12. using www.ufida.org.EntityData;
  13. namespace ICS.CreateRMASV.svc
  14. {
  15. public class CustCreateRMA
  16. {
  17. public rtnRMAInfo Cust_CreateRMA(RMADate RMADate)
  18. {
  19. StringBuilder beginstrlog = new StringBuilder();
  20. beginstrlog.AppendLine("创建退回处理单(传入数据开始)");
  21. beginstrlog.AppendLine("*****************************************************");
  22. beginstrlog.AppendLine("单据类型:" + RMADate.DocType);
  23. beginstrlog.AppendLine("来源出货单:" + RMADate.SrcDocNo);
  24. beginstrlog.AppendLine("组织:" + RMADate.OrgCode);
  25. beginstrlog.AppendLine("CRM单号:" + RMADate.CRMDocNo);
  26. beginstrlog.AppendLine("备注:" + RMADate.Remark);
  27. foreach (var line in RMADate.lines)
  28. {
  29. beginstrlog.AppendLine("来源出货单行号:" + line.shipLineNo);
  30. beginstrlog.AppendLine("退货数量:" + line.RMAQty);
  31. }
  32. beginstrlog.AppendLine("*****************************************************");
  33. Appconfig.WriteLogFile(beginstrlog.ToString(), "创建退回处理单");
  34. #region 服务调用框架结构
  35. UFIDAU9CustCustBatchRMAPullDocSVICreateBatchRMAPullDocSVClient client = new UFIDAU9CustCustBatchRMAPullDocSVICreateBatchRMAPullDocSVClient();
  36. //服务返回结果
  37. UFIDAU9CustCustBatchRMAPullDocSVOperationResultData returnItems;
  38. UFSoft.UBF.Exceptions.MessageBase[] outMessages;
  39. //返回异常信息,目前还没有使用此属性
  40. //MessageBase[] returnMsg;
  41. //上下文信息
  42. object context;
  43. //string UserID = "";
  44. //string UserCode = "";
  45. long OrgID =0;
  46. try
  47. {
  48. rtnRMAInfo rtnpo = new rtnRMAInfo();
  49. if (RMADate == null)
  50. {
  51. rtnpo.IsSuccess = false;
  52. rtnpo.Message = "传入参数不能为空";
  53. return rtnpo;
  54. }
  55. if (string.IsNullOrWhiteSpace(RMADate.DocType))
  56. {
  57. rtnpo.IsSuccess = false;
  58. rtnpo.Message = "单据类型不能为空";
  59. return rtnpo;
  60. }
  61. if (string.IsNullOrWhiteSpace(RMADate.OrgCode))
  62. {
  63. rtnpo.IsSuccess = false;
  64. rtnpo.Message = "组织不能为空";
  65. return rtnpo;
  66. }
  67. if (string.IsNullOrWhiteSpace(RMADate.SrcDocNo))
  68. {
  69. rtnpo.IsSuccess = false;
  70. rtnpo.Message = "出货单号不能为空";
  71. return rtnpo;
  72. }
  73. if (string.IsNullOrWhiteSpace(RMADate.CRMDocNo))
  74. {
  75. rtnpo.IsSuccess = false;
  76. rtnpo.Message = "CRM单号不能为空";
  77. return rtnpo;
  78. }
  79. string orgsql = @"select ID from Base_Organization
  80. where Code='{0}'";
  81. orgsql = string.Format(orgsql, RMADate.OrgCode);
  82. DataTable orgdt = DBhlper.Query(orgsql, Appconfig.GetU9ConnStr());
  83. if (orgdt.Rows.Count != 0)
  84. {
  85. OrgID =long.Parse( orgdt.Rows[0]["ID"].ToString());
  86. }
  87. else
  88. {
  89. rtnpo.IsSuccess = false;
  90. rtnpo.Message = "未获取到组织";
  91. return rtnpo;
  92. }
  93. foreach (var item in RMADate.lines)
  94. {
  95. if (item.shipLineNo <= 0)
  96. {
  97. rtnpo.IsSuccess = false;
  98. rtnpo.Message = "出货单号行号不能为0";
  99. return rtnpo;
  100. }
  101. if (item.RMAQty <= 0)
  102. {
  103. rtnpo.IsSuccess = false;
  104. rtnpo.Message = "退货数量不能为0";
  105. return rtnpo;
  106. }
  107. }
  108. // if (line.UserCode == "")
  109. // {
  110. // rtnRcvInfo rtnpo = new rtnRcvInfo();
  111. // rtnpo.IsSuccess = false;
  112. // rtnpo.Message = "用户编码不能为空";
  113. // rtnpos.Add(rtnpo);
  114. // return rtnpos;
  115. // }
  116. // if (line.UserID == "")
  117. // {
  118. // rtnRcvInfo rtnpo = new rtnRcvInfo();
  119. // rtnpo.IsSuccess = false;
  120. // rtnpo.Message = "用户ID不能为空";
  121. // rtnpos.Add(rtnpo);
  122. // return rtnpos;
  123. // }
  124. // else
  125. // {
  126. // string usersql = @"select ID from CBO_Operators
  127. // where Code='{0}'";
  128. // usersql = string.Format(usersql, line.UserCode);
  129. // DataTable userdt = DBhlper.Query(usersql, Appconfig.GetU9ConnStr());
  130. // if (userdt.Rows.Count != 0)
  131. // {
  132. // UserID = userdt.Rows[0]["ID"].ToString();
  133. // UserCode = line.UserCode;
  134. // }
  135. // else
  136. // {
  137. // rtnRcvInfo rtnpo = new rtnRcvInfo();
  138. // rtnpo.IsSuccess = false;
  139. // rtnpo.Message = "未获取到用户ID";
  140. // rtnpos.Add(rtnpo);
  141. // return rtnpos;
  142. // }
  143. // }
  144. //pOList = SetrCVDtos(rCVInfoList);
  145. StringBuilder strlog = new StringBuilder();
  146. bool isNeedContinue = false;
  147. strlog.AppendLine("创建退回处理单");
  148. strlog.AppendLine("*****************************************************");
  149. www.ufida.org.EntityData.UFIDAU9CustCustBatchRMAPullDocSVSrcDocLinesObjectData[] srcDocLinesList = new UFIDAU9CustCustBatchRMAPullDocSVSrcDocLinesObjectData[] { };
  150. List<UFIDAU9CustCustBatchRMAPullDocSVSrcDocLinesObjectData> _srcDocLinesList = new List<UFIDAU9CustCustBatchRMAPullDocSVSrcDocLinesObjectData>();
  151. foreach (var item in RMADate.lines)
  152. {
  153. UFIDAU9CustCustBatchRMAPullDocSVSrcDocLinesObjectData model = new UFIDAU9CustCustBatchRMAPullDocSVSrcDocLinesObjectData();
  154. long shipID = 0;
  155. string shipsql = @"SELECT b.ID FROM SM_Ship a
  156. LEFT JOIN SM_ShipLine b ON b.Ship=a.ID
  157. WHERE a.DocNo='{0}' AND b.DocLineNo='{1}'";
  158. shipsql = string.Format(shipsql, RMADate.SrcDocNo, item.shipLineNo);
  159. DataTable userdt = DBhlper.Query(shipsql, Appconfig.GetU9ConnStr());
  160. if (userdt.Rows.Count != 0)
  161. {
  162. shipID = long.Parse(userdt.Rows[0]["ID"].ToString());
  163. }
  164. else
  165. {
  166. rtnpo.IsSuccess = false;
  167. rtnpo.Message = "单号:" + RMADate.SrcDocNo + ",行号:" + item.shipLineNo + "在系统中不存在,请核对";
  168. return rtnpo;
  169. }
  170. model.m_srcDocLinesID = shipID;
  171. model.m_rMAQty = item.RMAQty;
  172. _srcDocLinesList.Add(model);
  173. }
  174. srcDocLinesList = _srcDocLinesList.ToArray();
  175. //给上下文信息赋值
  176. context = CreateContextObj(ConfigurationManager.AppSettings["userID"].ToString(), ConfigurationManager.AppSettings["userCode"].ToString(), OrgID.ToString());
  177. (client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue;
  178. (client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue;
  179. //out outMessages, context, rturnDate, docType, srcDocLinesList, orgID, srcDocnO, cRMDocNo);
  180. returnItems = client.Do(out outMessages, context, DateTime.Now, RMADate.DocType, srcDocLinesList, OrgID, RMADate.SrcDocNo, RMADate.CRMDocNo, RMADate.Remark);
  181. rtnpo.DocNo = returnItems.m_docNo;
  182. rtnpo.IsSuccess = returnItems.m_isSuccess;
  183. rtnpo.Message = returnItems.m_message;
  184. strlog.AppendLine("单号:" + returnItems.m_docNo);
  185. strlog.AppendLine("结果:" + returnItems.m_isSuccess);
  186. strlog.AppendLine("返回消息:" + returnItems.m_message);
  187. strlog.AppendLine("*****************************************************");
  188. Appconfig.WriteLogFile(strlog.ToString(), "创建退回处理单");
  189. return rtnpo;
  190. }
  191. catch (Exception ex)
  192. {
  193. //异常信息捕获
  194. //List<rtnRMAInfo> rtnpos = new List<rtnRMAInfo>();
  195. rtnRMAInfo rtnpo = new rtnRMAInfo();
  196. rtnpo.IsSuccess = false;
  197. rtnpo.Message = GetExceptionMessage(ex);
  198. StringBuilder _beginstrlog = new StringBuilder();
  199. _beginstrlog.AppendLine("创建退回处理单(传入数据开始)");
  200. _beginstrlog.AppendLine("*****************************************************");
  201. _beginstrlog.AppendLine("单据类型:" + RMADate.DocType);
  202. _beginstrlog.AppendLine("来源出货单:" + RMADate.SrcDocNo);
  203. _beginstrlog.AppendLine("组织:" + RMADate.OrgCode);
  204. _beginstrlog.AppendLine("CRM单号:" + RMADate.CRMDocNo);
  205. foreach (var line in RMADate.lines)
  206. {
  207. _beginstrlog.AppendLine("来源出货单行号:" + line.shipLineNo);
  208. _beginstrlog.AppendLine("退货数量:" + line.RMAQty);
  209. }
  210. _beginstrlog.AppendLine("异常信息:" + rtnpo.Message);
  211. beginstrlog.AppendLine("*****************************************************");
  212. Appconfig.WriteLogFile(beginstrlog.ToString(), "创建退回处理单");
  213. return rtnpo;
  214. }
  215. #endregion
  216. }
  217. #region 判断仓库
  218. public static bool WHLotCheckState(string WHCode, string OrgCode)
  219. {
  220. string sql = @"select IsLot from CBO_WH A
  221. LEFT JOIN Base_Organization B
  222. ON B.ID=A.ORG
  223. where A.Code='{0}' AND B.CODE='{1}'";
  224. sql = string.Format(sql, WHCode, OrgCode);
  225. DataTable dt = DBhlper.Query(sql, Appconfig.GetU9ConnStr());
  226. if (dt.Rows[0]["IsLot"].ToString() == "True")
  227. {
  228. return true;
  229. }
  230. else
  231. {
  232. return false;
  233. }
  234. }
  235. #endregion
  236. #region 表头类
  237. public class RMADate
  238. {
  239. public string CRMDocNo { get; set; }
  240. public string DocType { get; set; }
  241. public string SrcDocNo { get; set; }
  242. public string OrgCode { get; set; }
  243. public string Remark { get; set; }
  244. public List<SrcDocLineList> lines { get; set; }
  245. }
  246. #endregion
  247. #region 表体类
  248. public class SrcDocLineList
  249. {
  250. public decimal RMAQty { get; set; }
  251. public int shipLineNo { get; set; }
  252. }
  253. #endregion
  254. #region 提取异常信息
  255. /// <summary>
  256. /// 提取异常信息
  257. /// </summary>
  258. /// <param name="ex"></param>
  259. private string GetExceptionMessage(Exception ex)
  260. {
  261. string faultMessage = "未知错误,请查看ERP日志!";
  262. System.TimeoutException timeoutEx = ex as System.TimeoutException;
  263. if (timeoutEx != null)
  264. {
  265. faultMessage = "访问服务超时,请修改配置信息!";
  266. }
  267. else
  268. {
  269. FaultException<ServiceException> faultEx = ex as FaultException<ServiceException>;
  270. if (faultEx == null)
  271. {
  272. faultMessage = ex.Message;
  273. }
  274. else
  275. {
  276. ServiceException serviceEx = faultEx.Detail;
  277. if (serviceEx != null && !string.IsNullOrEmpty(serviceEx.Message)
  278. && !serviceEx.Message.Equals("fault", StringComparison.OrdinalIgnoreCase))
  279. {
  280. // 错误信息在faultEx.Message中,请提取,
  281. // 格式为"Fault:料品不能为空,请录入\n 在....."
  282. int startIndex = serviceEx.Message.IndexOf(":");
  283. int endIndex = serviceEx.Message.IndexOf("\n");
  284. if (endIndex == -1)
  285. endIndex = serviceEx.Message.Length;
  286. if (endIndex > 0 && endIndex > startIndex + 1)
  287. {
  288. faultMessage = serviceEx.Message.Substring(startIndex + 1, endIndex - startIndex - 1);
  289. }
  290. else
  291. {
  292. faultMessage = serviceEx.Message;
  293. }
  294. }
  295. }
  296. }
  297. return faultMessage;
  298. }
  299. #endregion
  300. #region 给上下文信息赋值
  301. /// <summary>
  302. /// 给上下文信息赋值
  303. /// </summary>
  304. /// <returns></returns>
  305. private ThreadContext CreateContextObj(string UserID, string UserCode, string OrgID)
  306. {
  307. // 实例化应用上下文对象
  308. ThreadContext thContext = new ThreadContext();
  309. System.Collections.Generic.Dictionary<object, object> ns = new Dictionary<object, object>();
  310. ns.Add("OrgID", OrgID);
  311. ns.Add("UserID", UserID);
  312. ns.Add("UserCode", UserCode);
  313. ns.Add("Datetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  314. ns.Add("CultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  315. ns.Add("EnterpriseID", ConfigurationManager.AppSettings["enterpriseID"].ToString());
  316. ns.Add("DefaultCultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  317. thContext.nameValueHas = ns;
  318. return thContext;
  319. }
  320. #endregion
  321. #region 时间戳方法
  322. private DateTime TimestampToDateTime(long timestamp)
  323. {
  324. DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
  325. long lTime = timestamp * 10000000;
  326. TimeSpan nowTimeSpan = new TimeSpan(lTime);
  327. DateTime resultDateTime = dateTimeStart.Add(nowTimeSpan);
  328. return resultDateTime;
  329. }
  330. #endregion
  331. #region 返回信息类
  332. public class rtnRMAInfo
  333. {
  334. public string DocNo { get; set; }
  335. public bool IsSuccess { get; set; }
  336. public string Message { get; set; }
  337. }
  338. #endregion
  339. }
  340. #region 上下文类信息
  341. public class contextInfo
  342. {
  343. private long _OrgID;
  344. private string _OrgCode;
  345. private long _UserID;
  346. private string _UserCode;
  347. private DateTime _Datetime;
  348. private string _CultureName;
  349. private string _EnterpriseID;
  350. /// <summary>
  351. /// 组织ID
  352. /// </summary>
  353. public long OrgID
  354. {
  355. get { return _OrgID; }
  356. set { _OrgID = value; }
  357. }
  358. /// <summary>
  359. /// 组织编码
  360. /// </summary>
  361. public string OrgCode
  362. {
  363. get { return _OrgCode; }
  364. set { _OrgCode = value; }
  365. }
  366. /// <summary>
  367. /// 操作员ID
  368. /// </summary>
  369. public long UserID
  370. {
  371. get { return _UserID; }
  372. set { _UserID = value; }
  373. }
  374. /// <summary>
  375. /// 操作员编码
  376. /// </summary>
  377. public string UserCode
  378. {
  379. get { return _UserCode; }
  380. set { _UserCode = value; }
  381. }
  382. /// <summary>
  383. /// 时间
  384. /// </summary>
  385. public DateTime Datetime
  386. {
  387. get { return _Datetime; }
  388. set { _Datetime = value; }
  389. }
  390. /// <summary>
  391. /// 语言
  392. /// </summary>
  393. public string CultureName
  394. {
  395. get { return _CultureName; }
  396. set { _CultureName = value; }
  397. }
  398. /// <summary>
  399. /// 企业ID号
  400. /// </summary>
  401. public string EnterpriseID
  402. {
  403. get { return _EnterpriseID; }
  404. set { _EnterpriseID = value; }
  405. }
  406. public contextInfo()
  407. {
  408. CultureName = "zh_CN";
  409. Datetime = DateTime.Now;
  410. }
  411. }
  412. #endregion
  413. }