圣珀
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.

883 lines
40 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
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 UFIDA.ISV.BFRCVApprove;
  11. using UFIDA.ISV.BFRCVDelete;
  12. using UFIDA.ISV.CreateLotMaster;
  13. using UFSoft.UBF.Business.BusinessEntity;
  14. using UFSoft.UBF.Service;
  15. using UFSoft.UBF.Util.Context;
  16. using www.ufida.org.EntityData;
  17. namespace UFIDA.ISV.CreateWCRCVForApi
  18. {
  19. public class CustCreateBFRcvSrvSubForApi
  20. {
  21. public List<rtnRcvInfo> CustCreateBFRCVForApi(List<rCVhead> rCVInfoList)
  22. {
  23. StringBuilder beginstrlog = new StringBuilder();
  24. beginstrlog.AppendLine("创建收货单(传入数据开始)");
  25. beginstrlog.AppendLine("*****************************************************");
  26. foreach (var item in rCVInfoList)
  27. {
  28. beginstrlog.AppendLine("来源采购订单号:" + item.srcDocPONo);
  29. beginstrlog.AppendLine("传入送货单号:" + item.ASNNO);
  30. foreach (var line in item.lines)
  31. {
  32. bool isLotCheck = Appconfig.WHLotCheckState(line.WhCode, line.OrgCode);
  33. if (isLotCheck == false)
  34. {
  35. line.RcvLot = "";
  36. }
  37. beginstrlog.AppendLine("来源采购订单行号:" + line.srcDocPOLineNo);
  38. beginstrlog.AppendLine("料品编码:" + line.ItemCode);
  39. beginstrlog.AppendLine("料品数量:" + line.ReqQty);
  40. beginstrlog.AppendLine("仓库:" + line.WhCode);
  41. beginstrlog.AppendLine("库存批号:" + line.RcvLot);
  42. beginstrlog.AppendLine("用户ID:" + line.UserID);
  43. beginstrlog.AppendLine("用户编号:" + line.UserCode);
  44. beginstrlog.AppendLine("组织编号:" + line.OrgCode);
  45. beginstrlog.AppendLine("WMS存储地点不可修改:" + line.BinCode);
  46. }
  47. }
  48. beginstrlog.AppendLine("*****************************************************");
  49. Appconfig.WriteLogFile(beginstrlog.ToString(), "创建收货单");
  50. #region 服务调用框架结构
  51. UFIDAU9ISVRCVICeateReceivementFromPOSRVClient client = new UFIDAU9ISVRCVICeateReceivementFromPOSRVClient();
  52. //服务返回结果
  53. EntityKey[] returnItems;
  54. //返回异常信息,目前还没有使用此属性
  55. UFSoft.UBF.Exceptions.MessageBase[] returnMsg;
  56. //上下文信息
  57. object context;
  58. //传入 参数
  59. UFIDAU9ISVRCVDTOPOToRcvTransDTOData[] pOList;
  60. //空
  61. string[] splitBy = new string[] { };
  62. string UserID = "";
  63. string UserCode = "";
  64. string OrgID = "";
  65. long WHID = 0;
  66. try
  67. {
  68. List<rtnRcvInfo> rtnpos = new List<rtnRcvInfo>();
  69. if (rCVInfoList == null || rCVInfoList.Count == 0)
  70. {
  71. rtnRcvInfo rtnpo = new rtnRcvInfo();
  72. rtnpo.IsSuccess = false;
  73. rtnpo.Message = "传入参数不能为空";
  74. rtnpos.Add(rtnpo);
  75. return rtnpos;
  76. }
  77. foreach (var item in rCVInfoList)
  78. {
  79. if (item.lines == null || item.lines.Count() == 0)
  80. {
  81. rtnRcvInfo rtnpo = new rtnRcvInfo();
  82. rtnpo.IsSuccess = false;
  83. rtnpo.Message = "传入行信息不能为空";
  84. rtnpos.Add(rtnpo);
  85. return rtnpos;
  86. }
  87. foreach (var _item in item.lines)
  88. {
  89. //if (string.IsNullOrWhiteSpace(_item.ItemCode))
  90. //{
  91. // rtnRcvInfo rtnpo = new rtnRcvInfo();
  92. // rtnpo.IsSuccess = false;
  93. // rtnpo.Message = "传入料号不能为空";
  94. // rtnpos.Add(rtnpo);
  95. // return rtnpos;
  96. //}
  97. if (_item.srcDocPOLineNo == 0)
  98. {
  99. rtnRcvInfo rtnpo = new rtnRcvInfo();
  100. rtnpo.IsSuccess = false;
  101. rtnpo.Message = "请传入来源单据行号";
  102. rtnpos.Add(rtnpo);
  103. return rtnpos;
  104. }
  105. if (_item.ReqQty == 0)
  106. {
  107. rtnRcvInfo rtnpo = new rtnRcvInfo();
  108. rtnpo.IsSuccess = false;
  109. rtnpo.Message = "传入数量不能为空";
  110. rtnpos.Add(rtnpo);
  111. return rtnpos;
  112. }
  113. //if (string.IsNullOrWhiteSpace(_item.WhCode))
  114. //{
  115. // rtnRcvInfo rtnpo = new rtnRcvInfo();
  116. // rtnpo.IsSuccess = false;
  117. // rtnpo.Message = "传入仓库不能为空";
  118. // rtnpos.Add(rtnpo);
  119. // return rtnpos;
  120. //}
  121. }
  122. }
  123. //给传入参数赋值
  124. //pOList = SetrCVDtos(rCVInfoList);
  125. StringBuilder strlog = new StringBuilder();
  126. strlog.AppendLine("创建收货单");
  127. strlog.AppendLine("*****************************************************");
  128. List<UFIDAU9ISVRCVDTOPOToRcvTransDTOData> rCVList = new List<UFIDAU9ISVRCVDTOPOToRcvTransDTOData>();
  129. foreach (var rCVhead in rCVInfoList)
  130. {
  131. int Count = 10;
  132. decimal QtyChk = 0;
  133. string POCode = "";
  134. int POLine = 0;
  135. strlog.AppendLine("来源采购订单号:" + rCVhead.srcDocPONo);
  136. strlog.AppendLine("传入送货单号:" + rCVhead.ASNNO);
  137. foreach (rCVLine line in rCVhead.lines)
  138. {
  139. if (POCode == "")
  140. {
  141. POCode = rCVhead.srcDocPONo;
  142. POLine = line.srcDocPOLineNo;
  143. }
  144. else
  145. {
  146. if (POCode != rCVhead.srcDocPONo || POLine != line.srcDocPOLineNo)
  147. {
  148. QtyChk = 0;
  149. POCode = rCVhead.srcDocPONo;
  150. POLine = line.srcDocPOLineNo;
  151. }
  152. }
  153. if (!string.IsNullOrEmpty(line.OrgCode))
  154. {
  155. string orgsql = @"select ID from Base_Organization
  156. where Code='{0}'";
  157. orgsql = string.Format(orgsql, line.OrgCode);
  158. DataTable orgdt = DBhlper.Query(orgsql, Appconfig.GetU9ConnStr());
  159. if (orgdt.Rows.Count != 0)
  160. {
  161. OrgID = orgdt.Rows[0]["ID"].ToString();
  162. }
  163. else
  164. {
  165. rtnRcvInfo rtnpo = new rtnRcvInfo();
  166. rtnpo.IsSuccess = false;
  167. rtnpo.Message = "未获取到组织";
  168. rtnpos.Add(rtnpo);
  169. return rtnpos;
  170. }
  171. }
  172. else
  173. {
  174. rtnRcvInfo rtnpo = new rtnRcvInfo();
  175. rtnpo.IsSuccess = false;
  176. rtnpo.Message = "传入组织不能为空";
  177. rtnpos.Add(rtnpo);
  178. return rtnpos;
  179. }
  180. string whsql = @"select B.DescFlexSegments_PrivateDescSeg6 from PM_PurchaseOrder A
  181. LEFT JOIN PM_POLine B
  182. ON B.PurchaseOrder=A.ID
  183. WHERE A.DocNo='{0}' AND B.DocLineNo='{1}' AND A.Org='{2}'";
  184. whsql = string.Format(whsql, rCVhead.srcDocPONo, line.srcDocPOLineNo, OrgID);
  185. DataTable whdt = DBhlper.Query(whsql, Appconfig.GetU9ConnStr());
  186. if (whdt.Rows.Count != 0)
  187. {
  188. strlog.AppendLine("U9存储地点不可修改:" + whdt.Rows[0]["DescFlexSegments_PrivateDescSeg6"].ToString());
  189. }
  190. if (line.UserCode == "")
  191. {
  192. rtnRcvInfo rtnpo = new rtnRcvInfo();
  193. rtnpo.IsSuccess = false;
  194. rtnpo.Message = "用户编码不能为空";
  195. rtnpos.Add(rtnpo);
  196. return rtnpos;
  197. }
  198. if (line.UserID == "")
  199. {
  200. rtnRcvInfo rtnpo = new rtnRcvInfo();
  201. rtnpo.IsSuccess = false;
  202. rtnpo.Message = "用户ID不能为空";
  203. rtnpos.Add(rtnpo);
  204. return rtnpos;
  205. }
  206. else
  207. {
  208. string usersql = @"select ID from CBO_Operators
  209. where Code='{0}'";
  210. usersql = string.Format(usersql, line.UserCode);
  211. DataTable userdt = DBhlper.Query(usersql, Appconfig.GetU9ConnStr());
  212. if (userdt.Rows.Count != 0)
  213. {
  214. UserID = userdt.Rows[0]["ID"].ToString();
  215. UserCode = line.UserCode;
  216. }
  217. else
  218. {
  219. rtnRcvInfo rtnpo = new rtnRcvInfo();
  220. rtnpo.IsSuccess = false;
  221. rtnpo.Message = "未获取到用户ID";
  222. rtnpos.Add(rtnpo);
  223. return rtnpos;
  224. }
  225. }
  226. #region 判断传入数量是否超出了剩余未入库数量
  227. // string checksql = @"SELECT
  228. // SUM(c.SupplierConfirmQtyTU)-sum(c.TotalRecievedQtyTU)+SUM(c.SupplierConfirmQtyTU)*d.PerOfOvertop AS SupplierConfirmQtyTU,
  229. // SUM(c.TotalArriveQtyCU) AS TotalArriveQtyCU
  230. // FROM
  231. // PM_PurchaseOrder a
  232. // LEFT JOIN PM_POLine b ON b.PurchaseOrder = a.ID
  233. // LEFT JOIN PM_POShipLine c ON c.POLine = b.ID
  234. // left join CBO_ReceiptRule d on b.rcvby=d.id and b.CurrentOrg=d.org
  235. // WHERE
  236. // a.DocNo = '{0}' AND b.DocLineNo='{2}' AND c.ItemInfo_ItemCode = '{1}' and c.Status<3
  237. // GROUP BY a.DocNo,c.ItemInfo_ItemCode,d.PerOfOvertop";
  238. // checksql = string.Format(checksql, rCVhead.srcDocPONo, line.ItemCode, line.srcDocPOLineNo);
  239. // DataTable checkdt = DBhlper.Query(checksql, Appconfig.GetU9ConnStr());
  240. // if (checkdt.Rows.Count == 0)
  241. // {
  242. // rtnRcvInfo rtnpo = new rtnRcvInfo();
  243. // rtnpo.IsSuccess = false;
  244. // rtnpo.Message = "采购订单计划行已关闭,无法入库!";
  245. // rtnpos.Add(rtnpo);
  246. // return rtnpos;
  247. // }
  248. // else
  249. // {
  250. // if (line.ReqQty > Convert.ToDecimal(checkdt.Rows[0]["SupplierConfirmQtyTU"]))
  251. // {
  252. // StringBuilder strerrorlog = new StringBuilder();
  253. // strerrorlog.AppendLine("传入送货单号:" + rCVhead.ASNNO);
  254. // strerrorlog.AppendLine("传入采购订单号:" + rCVhead.srcDocPONo);
  255. // strerrorlog.AppendLine("传入采购订单行号:" + line.srcDocPOLineNo);
  256. // strerrorlog.AppendLine("料品编码:" + line.ItemCode);
  257. // strerrorlog.AppendLine("U9中剩余未到货数量:" + checkdt.Rows[0]["SupplierConfirmQtyTU"].ToString());
  258. // strerrorlog.AppendLine("传入到货数量:" + line.ReqQty);
  259. // Appconfig.WriteLogFile(strerrorlog.ToString(), "送货数量超出采购数量记录");
  260. // rtnRcvInfo rtnpo = new rtnRcvInfo();
  261. // rtnpo.IsSuccess = false;
  262. // rtnpo.Message = "采购订单:" + rCVhead.srcDocPONo + ",行:" + line.srcDocPOLineNo + ",入库数量超出了未入库数量,无法入库!";
  263. // rtnpos.Add(rtnpo);
  264. // return rtnpos;
  265. // }
  266. // }
  267. #endregion
  268. #region 20200615
  269. Decimal SupplierConfirmQtyTU = 0;
  270. Decimal TotalArriveQtyCU = 0;
  271. string sqlShip = @"SELECT
  272. c.SubLineNo,
  273. c.ItemInfo_ItemCode,
  274. ceiling(c.SupplierConfirmQtyTU+c.SupplierConfirmQtyTU*d.PerOfOvertop) AS SupplierConfirmQtyTU,
  275. c.TotalArriveQtyTU-c.TotalRtnFillQtyTU AS TotalRecievedQtyTU
  276. FROM
  277. PM_PurchaseOrder a
  278. LEFT JOIN PM_POLine b ON b.PurchaseOrder = a.ID
  279. LEFT JOIN PM_POShipLine c ON c.POLine = b.ID
  280. LEFT JOIN CBO_ReceiptRule d ON b.rcvby=d.id and b.CurrentOrg=d.org
  281. WHERE
  282. a.DocNo = '" + rCVhead.srcDocPONo + "' AND b.DocLineNo='" + line.srcDocPOLineNo + "' AND c.ItemInfo_ItemCode = '" + line.ItemCode + @"' and c.Status<3
  283. AND ceiling(c.SupplierConfirmQtyTU+c.SupplierConfirmQtyTU*d.PerOfOvertop)>c.TotalArriveQtyTU-c.TotalRtnFillQtyTU order by c.SubLineNo";
  284. DataTable _dtPOShip = DBhlper.Query(sqlShip, Appconfig.GetU9ConnStr());
  285. if (_dtPOShip != null && _dtPOShip.Rows.Count > 0)
  286. {
  287. foreach (DataRow item in _dtPOShip.Rows)
  288. {
  289. SupplierConfirmQtyTU += Decimal.Parse(item["SupplierConfirmQtyTU"].ToString());
  290. TotalArriveQtyCU += Decimal.Parse(item["TotalRecievedQtyTU"].ToString());
  291. if (line.ReqQty > 0 && QtyChk <= SupplierConfirmQtyTU - TotalArriveQtyCU && line.ReqQty > SupplierConfirmQtyTU - TotalArriveQtyCU - QtyChk)
  292. {
  293. UFIDAU9ISVRCVDTOPOToRcvTransDTOData rCV = new UFIDAU9ISVRCVDTOPOToRcvTransDTOData();
  294. rCV.m_pONo = rCVhead.srcDocPONo;
  295. rCV.m_pOLineNo = line.srcDocPOLineNo;
  296. rCV.m_businessDate = System.DateTime.Now;
  297. //数量
  298. rCV.m_transQty = new UFIDAU9CBODTOsDoubleQuantityData();
  299. rCV.m_transQty.m_amount1 = SupplierConfirmQtyTU - TotalArriveQtyCU - QtyChk;
  300. rCV.m_pOShipLineNo = Int32.Parse(item["SubLineNo"].ToString());// line.srcDocPOLineNo;// = new UFIDAU9ISVRCVDTORcvLineInfoDTOData();
  301. rCV.m_transQty.m_amount2 = 0;
  302. #region 获取仓库信息
  303. string sqlWH = @"select ID,Code from CBO_Wh
  304. WHERE Code='" + line.WhCode + "' ";
  305. sqlWH = string.Format(sqlWH);
  306. DataTable _dtWH = DBhlper.Query(sqlWH, Appconfig.GetU9ConnStr());
  307. string WHCode = string.Empty;
  308. if (_dtWH != null && _dtWH.Rows.Count > 0)
  309. {
  310. WHID = long.Parse(_dtWH.Rows[0][0].ToString());
  311. WHCode = _dtWH.Rows[0][1].ToString();
  312. }
  313. if (string.IsNullOrWhiteSpace(WHCode))
  314. {
  315. rtnRcvInfo rtnpo = new rtnRcvInfo();
  316. rtnpo.IsSuccess = false;
  317. rtnpo.Message = "未获取到仓库";
  318. rtnpos.Add(rtnpo);
  319. return rtnpos;
  320. }
  321. #endregion
  322. //仓库
  323. #region 先创建批号
  324. string LotID = "";
  325. if (line.RcvLot != "")
  326. {
  327. CustCreateLotMaster LotMasterCreate = new CustCreateLotMaster();
  328. string lotWHCode = line.WhCode;
  329. string lotItemCode = line.ItemCode;
  330. string LotCode = line.RcvLot;
  331. LotMasterCreate.CustCreateRCVLotMaster(lotWHCode, lotItemCode, LotCode, line.LotCreateTime, OrgID, ref LotID);
  332. if (LotID == "")
  333. {
  334. rtnRcvInfo rtnpo = new rtnRcvInfo();
  335. rtnpo.IsSuccess = false;
  336. rtnpo.Message = "批号创建失败";
  337. rtnpos.Add(rtnpo);
  338. return rtnpos;
  339. }
  340. }
  341. #endregion
  342. rCV.m_rcvLineInfoDTO = new UFIDAU9ISVRCVDTORcvLineInfoDTOData();
  343. rCV.m_rcvLineInfoDTO.m_invLotCode = line.RcvLot;
  344. rCV.m_rcvLineInfoDTO.m_storageType = 4;
  345. rCV.m_rcvLineInfoDTO.m_docLineNo = Count;
  346. rCV.m_rcvLineInfoDTO.Wh = WHID;
  347. rCV.m_rcvLineInfoDTO.m_whCode = WHCode;
  348. //rCV.m_pOShipLineNo = 10;
  349. //库位
  350. rCV.m_rcvLineInfoDTO.m_lineLocations = new UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData[] { };
  351. List<UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData> locationList = new List<UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData>();
  352. rCVList.Add(rCV);
  353. Count++;
  354. strlog.AppendLine("来源采购订单行号:" + line.srcDocPOLineNo);
  355. strlog.AppendLine("料品编码:" + line.ItemCode);
  356. strlog.AppendLine("料品数量:" + line.ReqQty);
  357. strlog.AppendLine("仓库:" + WHCode);
  358. strlog.AppendLine("库存批号:" + line.RcvLot);
  359. strlog.AppendLine("用户ID:" + line.UserID);
  360. strlog.AppendLine("用户编号:" + line.UserCode);
  361. strlog.AppendLine("组织编号:" + line.OrgCode);
  362. line.ReqQty = line.ReqQty - rCV.m_transQty.m_amount1;
  363. QtyChk = SupplierConfirmQtyTU - TotalArriveQtyCU;
  364. continue;
  365. }
  366. if (line.ReqQty > 0 && QtyChk <= SupplierConfirmQtyTU - TotalArriveQtyCU && line.ReqQty <= SupplierConfirmQtyTU - TotalArriveQtyCU - QtyChk)
  367. {
  368. UFIDAU9ISVRCVDTOPOToRcvTransDTOData rCV = new UFIDAU9ISVRCVDTOPOToRcvTransDTOData();
  369. rCV.m_pONo = rCVhead.srcDocPONo;
  370. rCV.m_pOLineNo = line.srcDocPOLineNo;
  371. rCV.m_businessDate = System.DateTime.Now;
  372. //数量
  373. rCV.m_transQty = new UFIDAU9CBODTOsDoubleQuantityData();
  374. rCV.m_transQty.m_amount1 = line.ReqQty;
  375. rCV.m_pOShipLineNo = Int32.Parse(item["SubLineNo"].ToString());// line.srcDocPOLineNo;// = new UFIDAU9ISVRCVDTORcvLineInfoDTOData();
  376. rCV.m_transQty.m_amount2 = 0;
  377. #region 获取仓库信息
  378. string sqlWH = @"select ID,Code from CBO_Wh
  379. WHERE Code='" + line.WhCode + "' ";
  380. sqlWH = string.Format(sqlWH);
  381. DataTable _dtWH = DBhlper.Query(sqlWH, Appconfig.GetU9ConnStr());
  382. string WHCode = string.Empty;
  383. if (_dtWH != null && _dtWH.Rows.Count > 0)
  384. {
  385. WHID = long.Parse(_dtWH.Rows[0][0].ToString());
  386. WHCode = _dtWH.Rows[0][1].ToString();
  387. }
  388. if (string.IsNullOrWhiteSpace(WHCode))
  389. {
  390. rtnRcvInfo rtnpo = new rtnRcvInfo();
  391. rtnpo.IsSuccess = false;
  392. rtnpo.Message = "未获取到仓库";
  393. rtnpos.Add(rtnpo);
  394. return rtnpos;
  395. }
  396. #endregion
  397. //仓库
  398. #region 先创建批号
  399. string LotID = "";
  400. if (line.RcvLot != "")
  401. {
  402. CustCreateLotMaster LotMasterCreate = new CustCreateLotMaster();
  403. string lotWHCode = line.WhCode;
  404. string lotItemCode = line.ItemCode;
  405. string LotCode = line.RcvLot;
  406. LotMasterCreate.CustCreateRCVLotMaster(lotWHCode, lotItemCode, LotCode, line.LotCreateTime, OrgID, ref LotID);
  407. if (LotID == "")
  408. {
  409. rtnRcvInfo rtnpo = new rtnRcvInfo();
  410. rtnpo.IsSuccess = false;
  411. rtnpo.Message = "批号创建失败";
  412. rtnpos.Add(rtnpo);
  413. return rtnpos;
  414. }
  415. }
  416. #endregion
  417. rCV.m_rcvLineInfoDTO = new UFIDAU9ISVRCVDTORcvLineInfoDTOData();
  418. rCV.m_rcvLineInfoDTO.m_invLotCode = line.RcvLot;
  419. rCV.m_rcvLineInfoDTO.m_storageType = 4;
  420. rCV.m_rcvLineInfoDTO.m_docLineNo = Count;
  421. rCV.m_rcvLineInfoDTO.Wh = WHID;
  422. rCV.m_rcvLineInfoDTO.m_whCode = WHCode;
  423. //rCV.m_pOShipLineNo = 10;
  424. //库位
  425. rCV.m_rcvLineInfoDTO.m_lineLocations = new UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData[] { };
  426. List<UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData> locationList = new List<UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData>();
  427. rCVList.Add(rCV);
  428. Count++;
  429. strlog.AppendLine("来源采购订单行号(srcDocPOLineNo):" + line.srcDocPOLineNo);
  430. strlog.AppendLine("料品编码(ItemCode):" + line.ItemCode);
  431. strlog.AppendLine("料品数量(ReqQty):" + line.ReqQty);
  432. strlog.AppendLine("仓库(WHCode):" + WHCode);
  433. strlog.AppendLine("库存批号(RcvLot):" + line.RcvLot);
  434. strlog.AppendLine("用户ID(UserID):" + line.UserID);
  435. strlog.AppendLine("用户编号(UserCode):" + line.UserCode);
  436. strlog.AppendLine("组织编号(FurnaceNo):" + line.OrgCode);
  437. QtyChk += line.ReqQty;
  438. line.ReqQty = 0;
  439. continue;
  440. }
  441. }
  442. }
  443. else
  444. {
  445. rtnRcvInfo rtnpo = new rtnRcvInfo();
  446. rtnpo.IsSuccess = false;
  447. rtnpo.Message = "采购订单:" + rCVhead.srcDocPONo + ",行:" + line.srcDocPOLineNo + ",已全部入库!";
  448. rtnpos.Add(rtnpo);
  449. return rtnpos;
  450. }
  451. #endregion
  452. }
  453. }
  454. pOList = rCVList.ToArray();
  455. //给上下文信息赋值
  456. context = CreateContextObj(UserID, UserCode, OrgID);
  457. (client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue;
  458. (client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue;
  459. returnItems = client.Do(out returnMsg, context, pOList, splitBy, false);
  460. foreach (EntityKey returnInfo in returnItems)
  461. {
  462. strlog.AppendLine("返回信息(returnInfo.ID):" + returnInfo.ID);
  463. rtnRcvInfo rtnpo = new rtnRcvInfo();
  464. //行信息 服务不返回 sql查询
  465. string sql = @"select A.DocNo as docNo,A1.DocLineNo as docLineNo,A1.ItemInfo_ItemCode,A1.ID as lineID from PM_Receivement A
  466. left join PM_RcvLine A1 on A.ID=A1.Receivement where A.ID='{0}'";
  467. sql = string.Format(sql, returnInfo.ID);
  468. DataTable dt = DBhlper.Query(sql, Appconfig.GetU9ConnStr());
  469. if (dt.Rows.Count > 0)
  470. {
  471. List<rtnRcvLine> pOLines = new List<rtnRcvLine>();
  472. foreach (DataRow dr in dt.Rows)
  473. {
  474. rtnpo.DocNo = dr["docNo"].ToString();
  475. rtnpo.IsSuccess = true;
  476. rtnRcvLine line = new rtnRcvLine();
  477. line.LineNo = int.Parse(dr["docLineNo"].ToString());
  478. pOLines.Add(line);
  479. }
  480. rtnpo.rtnLines = pOLines.ToArray();
  481. }
  482. rtnpos.Add(rtnpo);
  483. }
  484. strlog.AppendLine("返回数据:");
  485. foreach (var info in rtnpos)
  486. {
  487. strlog.AppendLine("单号:" + info.DocNo);
  488. strlog.AppendLine("结果:" + info.IsSuccess);
  489. strlog.AppendLine("返回消息:" + info.Message);
  490. foreach (var _line in info.rtnLines)
  491. {
  492. strlog.AppendLine("行号:" + _line.LineNo);
  493. }
  494. }
  495. strlog.AppendLine("*****************************************************");
  496. Appconfig.WriteLogFile(strlog.ToString(), "创建收货单");
  497. return rtnpos;
  498. }
  499. catch (Exception ex)
  500. {
  501. //异常信息捕获
  502. List<rtnRcvInfo> rtnpos = new List<rtnRcvInfo>();
  503. rtnRcvInfo rtnpo = new rtnRcvInfo();
  504. rtnpo.IsSuccess = false;
  505. rtnpo.Message = GetExceptionMessage(ex);
  506. rtnpos.Add(rtnpo);
  507. StringBuilder strlog = new StringBuilder();
  508. strlog.AppendLine("创建收货单");
  509. strlog.AppendLine("*****************************************************");
  510. foreach (var item in rCVInfoList)
  511. {
  512. strlog.AppendLine("来源采购订单号:" + item.srcDocPONo);
  513. strlog.AppendLine("传入送货单号:" + item.ASNNO);
  514. foreach (var line in item.lines)
  515. {
  516. strlog.AppendLine("来源采购订单行号:" + line.srcDocPOLineNo);
  517. strlog.AppendLine("料品编码:" + line.ItemCode);
  518. strlog.AppendLine("料品数量:" + line.ReqQty);
  519. strlog.AppendLine("仓库:" + line.WhCode);
  520. strlog.AppendLine("库存批号:" + line.RcvLot);
  521. strlog.AppendLine("用户ID:" + line.UserID);
  522. strlog.AppendLine("用户编号:" + line.UserCode);
  523. strlog.AppendLine("组织编号:" + line.OrgCode);
  524. }
  525. }
  526. strlog.AppendLine("返回消息:" + rtnpo.Message);
  527. strlog.AppendLine("*****************************************************");
  528. Appconfig.WriteLogFile(strlog.ToString(), "创建收货单");
  529. return rtnpos;
  530. }
  531. #endregion
  532. }
  533. #region 表头类
  534. public class rCVhead
  535. {
  536. private rCVLine[] _lines;
  537. private string _srcDocPONo;
  538. private string _DocType;
  539. private string _ASNNO;
  540. public rCVLine[] lines
  541. {
  542. get { return _lines; }
  543. set { _lines = value; }
  544. }
  545. /// <summary>
  546. /// 来源采购订单
  547. /// </summary>
  548. public string srcDocPONo
  549. {
  550. get { return _srcDocPONo; }
  551. set { _srcDocPONo = value; }
  552. }
  553. public string ASNNO
  554. {
  555. get { return _ASNNO; }
  556. set { _ASNNO = value; }
  557. }
  558. public string DocType
  559. {
  560. get { return _DocType; }
  561. set { _DocType = value; }
  562. }
  563. }
  564. #endregion
  565. #region 表体类
  566. public class rCVLine
  567. {
  568. /// <summary>
  569. /// 数量
  570. /// </summary>
  571. public decimal ReqQty { get; set; }
  572. public string WhCode { get; set; }
  573. public string BinCode { get; set; }
  574. /// <summary>
  575. /// 炉号
  576. /// </summary>
  577. public string OrgCode { get; set; }
  578. /// <summary>
  579. /// 来源采购订单料号
  580. /// </summary>
  581. public string ItemCode { get; set; }
  582. /// <summary>
  583. /// 来源采购订单行
  584. /// </summary>
  585. public int srcDocPOLineNo { get; set; }
  586. /// <summary>
  587. /// 库存批号
  588. /// </summary>
  589. public string RcvLot { get; set; }
  590. /// <summary>
  591. /// 业务员ID
  592. /// </summary>
  593. public string UserID { get; set; }
  594. /// <summary>
  595. /// 业务员Code
  596. /// </summary>
  597. public string UserCode { get; set; }
  598. /// <summary>
  599. /// 批号创建时间
  600. /// </summary>
  601. public DateTime LotCreateTime { get; set; }
  602. }
  603. #endregion
  604. #region 提取异常信息
  605. /// <summary>
  606. /// 提取异常信息
  607. /// </summary>
  608. /// <param name="ex"></param>
  609. private string GetExceptionMessage(Exception ex)
  610. {
  611. string faultMessage = "未知错误,请查看ERP日志!";
  612. System.TimeoutException timeoutEx = ex as System.TimeoutException;
  613. if (timeoutEx != null)
  614. {
  615. faultMessage = "访问服务超时,请修改配置信息!";
  616. }
  617. else
  618. {
  619. FaultException<ServiceException> faultEx = ex as FaultException<ServiceException>;
  620. if (faultEx == null)
  621. {
  622. faultMessage = ex.Message;
  623. }
  624. else
  625. {
  626. ServiceException serviceEx = faultEx.Detail;
  627. if (serviceEx != null && !string.IsNullOrEmpty(serviceEx.Message)
  628. && !serviceEx.Message.Equals("fault", StringComparison.OrdinalIgnoreCase))
  629. {
  630. // 错误信息在faultEx.Message中,请提取,
  631. // 格式为"Fault:料品不能为空,请录入\n 在....."
  632. int startIndex = serviceEx.Message.IndexOf(":");
  633. int endIndex = serviceEx.Message.IndexOf("\n");
  634. if (endIndex == -1)
  635. endIndex = serviceEx.Message.Length;
  636. if (endIndex > 0 && endIndex > startIndex + 1)
  637. {
  638. faultMessage = serviceEx.Message.Substring(startIndex + 1, endIndex - startIndex - 1);
  639. }
  640. else
  641. {
  642. faultMessage = serviceEx.Message;
  643. }
  644. }
  645. }
  646. }
  647. return faultMessage;
  648. }
  649. #endregion
  650. #region 给上下文信息赋值
  651. /// <summary>
  652. /// 给上下文信息赋值
  653. /// </summary>
  654. /// <returns></returns>
  655. private ThreadContext CreateContextObj(string UserID, string UserCode, string OrgID)
  656. {
  657. // 实例化应用上下文对象
  658. ThreadContext thContext = new ThreadContext();
  659. System.Collections.Generic.Dictionary<object, object> ns = new Dictionary<object, object>();
  660. ns.Add("OrgID", OrgID);
  661. ns.Add("UserID", UserID);
  662. ns.Add("UserCode", UserCode);
  663. ns.Add("Datetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  664. ns.Add("CultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  665. ns.Add("EnterpriseID", ConfigurationManager.AppSettings["enterpriseID"].ToString());
  666. ns.Add("DefaultCultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  667. thContext.nameValueHas = ns;
  668. return thContext;
  669. }
  670. #endregion
  671. #region 时间戳方法
  672. private DateTime TimestampToDateTime(long timestamp)
  673. {
  674. DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
  675. long lTime = timestamp * 10000000;
  676. TimeSpan nowTimeSpan = new TimeSpan(lTime);
  677. DateTime resultDateTime = dateTimeStart.Add(nowTimeSpan);
  678. return resultDateTime;
  679. }
  680. #endregion
  681. }
  682. #region 上下文类信息
  683. public class contextInfo
  684. {
  685. private long _OrgID;
  686. private string _OrgCode;
  687. private long _UserID;
  688. private string _UserCode;
  689. private DateTime _Datetime;
  690. private string _CultureName;
  691. private string _EnterpriseID;
  692. /// <summary>
  693. /// 组织ID
  694. /// </summary>
  695. public long OrgID
  696. {
  697. get { return _OrgID; }
  698. set { _OrgID = value; }
  699. }
  700. /// <summary>
  701. /// 组织编码
  702. /// </summary>
  703. public string OrgCode
  704. {
  705. get { return _OrgCode; }
  706. set { _OrgCode = value; }
  707. }
  708. /// <summary>
  709. /// 操作员ID
  710. /// </summary>
  711. public long UserID
  712. {
  713. get { return _UserID; }
  714. set { _UserID = value; }
  715. }
  716. /// <summary>
  717. /// 操作员编码
  718. /// </summary>
  719. public string UserCode
  720. {
  721. get { return _UserCode; }
  722. set { _UserCode = value; }
  723. }
  724. /// <summary>
  725. /// 时间
  726. /// </summary>
  727. public DateTime Datetime
  728. {
  729. get { return _Datetime; }
  730. set { _Datetime = value; }
  731. }
  732. /// <summary>
  733. /// 语言
  734. /// </summary>
  735. public string CultureName
  736. {
  737. get { return _CultureName; }
  738. set { _CultureName = value; }
  739. }
  740. /// <summary>
  741. /// 企业ID号
  742. /// </summary>
  743. public string EnterpriseID
  744. {
  745. get { return _EnterpriseID; }
  746. set { _EnterpriseID = value; }
  747. }
  748. public contextInfo()
  749. {
  750. CultureName = "zh-CN";
  751. Datetime = DateTime.Now;
  752. }
  753. }
  754. #endregion
  755. #region 返回信息类
  756. public class rtnRcvInfo
  757. {
  758. public string DocNo { get; set; }
  759. public bool IsSuccess { get; set; }
  760. public string Message { get; set; }
  761. public rtnRcvLine[] rtnLines { get; set; }
  762. }
  763. public class rtnRcvLine
  764. {
  765. public int LineNo { get; set; }
  766. //public string srcDocNo { get; set; }
  767. //public int srcLineNo { get; set; }
  768. //public decimal reqQty { get; set; }
  769. //public string proCode { get; set; }
  770. }
  771. #endregion
  772. #region 表体类
  773. //public class rCVLine
  774. //{
  775. // /// <summary>
  776. // /// 来源采购订单
  777. // /// </summary>
  778. // public string srcDocPONo { get; set; }
  779. // private int _srcDocPOLineNo;
  780. // private decimal _reqQty;
  781. // public string WhCode { get; set; }
  782. // /// <summary>
  783. // /// 炉号
  784. // /// </summary>
  785. // public string FurnaceNo { get; set; }
  786. // /// <summary>
  787. // /// 数量
  788. // /// </summary>
  789. // public decimal ReqQty
  790. // {
  791. // get { return _reqQty; }
  792. // set { _reqQty = value; }
  793. // }
  794. // /// <summary>
  795. // /// 来源采购订单行
  796. // /// </summary>
  797. // public int srcDocPOLineNo
  798. // {
  799. // get { return _srcDocPOLineNo; }
  800. // set { _srcDocPOLineNo = value; }
  801. // }
  802. //}
  803. #endregion
  804. }