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

906 lines
42 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
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 sql = @"SELECT
  272. a.id
  273. FROM
  274. PM_PurchaseOrder a
  275. LEFT JOIN PM_POLine b ON b.PurchaseOrder = a.ID
  276. WHERE
  277. a.DocNo = '" + rCVhead.srcDocPONo + "' AND b.DocLineNo='" + line.srcDocPOLineNo + "' ";
  278. DataTable POShip = DBhlper.Query(sql, Appconfig.GetU9ConnStr());
  279. if (POShip != null && POShip.Rows.Count > 0)
  280. {
  281. }
  282. else
  283. {
  284. rtnRcvInfo rtnpo = new rtnRcvInfo();
  285. rtnpo.IsSuccess = false;
  286. rtnpo.Message = "采购订单:" + rCVhead.srcDocPONo + ",行:" + line.srcDocPOLineNo + ",不存在!";
  287. rtnpos.Add(rtnpo);
  288. return rtnpos;
  289. }
  290. string sqlShip = @"SELECT
  291. c.SubLineNo,
  292. c.ItemInfo_ItemCode,
  293. ceiling(c.SupplierConfirmQtyTU+c.SupplierConfirmQtyTU*d.PerOfOvertop) AS SupplierConfirmQtyTU,
  294. c.TotalArriveQtyTU-c.TotalRtnFillQtyTU AS TotalRecievedQtyTU
  295. FROM
  296. PM_PurchaseOrder a
  297. LEFT JOIN PM_POLine b ON b.PurchaseOrder = a.ID
  298. LEFT JOIN PM_POShipLine c ON c.POLine = b.ID
  299. LEFT JOIN CBO_ReceiptRule d ON b.rcvby=d.id and b.CurrentOrg=d.org
  300. WHERE
  301. a.DocNo = '" + rCVhead.srcDocPONo + "' AND b.DocLineNo='" + line.srcDocPOLineNo + "' AND c.ItemInfo_ItemCode = '" + line.ItemCode + @"' and c.Status<3
  302. AND ceiling(c.SupplierConfirmQtyTU+c.SupplierConfirmQtyTU*d.PerOfOvertop)>c.TotalArriveQtyTU-c.TotalRtnFillQtyTU order by c.SubLineNo";
  303. DataTable _dtPOShip = DBhlper.Query(sqlShip, Appconfig.GetU9ConnStr());
  304. if (_dtPOShip != null && _dtPOShip.Rows.Count > 0)
  305. {
  306. foreach (DataRow item in _dtPOShip.Rows)
  307. {
  308. SupplierConfirmQtyTU += Decimal.Parse(item["SupplierConfirmQtyTU"].ToString());
  309. TotalArriveQtyCU += Decimal.Parse(item["TotalRecievedQtyTU"].ToString());
  310. if (line.ReqQty > 0 && QtyChk <= SupplierConfirmQtyTU - TotalArriveQtyCU && line.ReqQty > SupplierConfirmQtyTU - TotalArriveQtyCU - QtyChk)
  311. {
  312. UFIDAU9ISVRCVDTOPOToRcvTransDTOData rCV = new UFIDAU9ISVRCVDTOPOToRcvTransDTOData();
  313. rCV.m_pONo = rCVhead.srcDocPONo;
  314. rCV.m_pOLineNo = line.srcDocPOLineNo;
  315. rCV.m_businessDate = System.DateTime.Now;
  316. //数量
  317. rCV.m_transQty = new UFIDAU9CBODTOsDoubleQuantityData();
  318. rCV.m_transQty.m_amount1 = SupplierConfirmQtyTU - TotalArriveQtyCU - QtyChk;
  319. rCV.m_pOShipLineNo = Int32.Parse(item["SubLineNo"].ToString());// line.srcDocPOLineNo;// = new UFIDAU9ISVRCVDTORcvLineInfoDTOData();
  320. rCV.m_transQty.m_amount2 = 0;
  321. #region 获取仓库信息
  322. string sqlWH = @"select ID,Code from CBO_Wh
  323. WHERE Code='" + line.WhCode + "' ";
  324. sqlWH = string.Format(sqlWH);
  325. DataTable _dtWH = DBhlper.Query(sqlWH, Appconfig.GetU9ConnStr());
  326. string WHCode = string.Empty;
  327. if (_dtWH != null && _dtWH.Rows.Count > 0)
  328. {
  329. WHID = long.Parse(_dtWH.Rows[0][0].ToString());
  330. WHCode = _dtWH.Rows[0][1].ToString();
  331. }
  332. if (string.IsNullOrWhiteSpace(WHCode))
  333. {
  334. rtnRcvInfo rtnpo = new rtnRcvInfo();
  335. rtnpo.IsSuccess = false;
  336. rtnpo.Message = "未获取到仓库";
  337. rtnpos.Add(rtnpo);
  338. return rtnpos;
  339. }
  340. #endregion
  341. //仓库
  342. #region 先创建批号
  343. string LotID = "";
  344. if (line.RcvLot != "")
  345. {
  346. CustCreateLotMaster LotMasterCreate = new CustCreateLotMaster();
  347. string lotWHCode = line.WhCode;
  348. string lotItemCode = line.ItemCode;
  349. string LotCode = line.RcvLot;
  350. LotMasterCreate.CustCreateRCVLotMaster(lotWHCode, lotItemCode, LotCode, line.LotCreateTime, OrgID, ref LotID);
  351. if (LotID == "")
  352. {
  353. rtnRcvInfo rtnpo = new rtnRcvInfo();
  354. rtnpo.IsSuccess = false;
  355. rtnpo.Message = "批号创建失败";
  356. rtnpos.Add(rtnpo);
  357. return rtnpos;
  358. }
  359. }
  360. #endregion
  361. rCV.m_rcvLineInfoDTO = new UFIDAU9ISVRCVDTORcvLineInfoDTOData();
  362. rCV.m_rcvLineInfoDTO.m_invLotCode = line.RcvLot;
  363. rCV.m_rcvLineInfoDTO.m_storageType = 4;
  364. rCV.m_rcvLineInfoDTO.m_docLineNo = Count;
  365. rCV.m_rcvLineInfoDTO.Wh = WHID;
  366. rCV.m_rcvLineInfoDTO.m_whCode = WHCode;
  367. //rCV.m_pOShipLineNo = 10;
  368. //库位
  369. rCV.m_rcvLineInfoDTO.m_lineLocations = new UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData[] { };
  370. List<UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData> locationList = new List<UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData>();
  371. rCVList.Add(rCV);
  372. Count++;
  373. strlog.AppendLine("来源采购订单行号:" + line.srcDocPOLineNo);
  374. strlog.AppendLine("料品编码:" + line.ItemCode);
  375. strlog.AppendLine("料品数量:" + line.ReqQty);
  376. strlog.AppendLine("仓库:" + WHCode);
  377. strlog.AppendLine("库存批号:" + line.RcvLot);
  378. strlog.AppendLine("用户ID:" + line.UserID);
  379. strlog.AppendLine("用户编号:" + line.UserCode);
  380. strlog.AppendLine("组织编号:" + line.OrgCode);
  381. line.ReqQty = line.ReqQty - rCV.m_transQty.m_amount1;
  382. QtyChk = SupplierConfirmQtyTU - TotalArriveQtyCU;
  383. continue;
  384. }
  385. if (line.ReqQty > 0 && QtyChk <= SupplierConfirmQtyTU - TotalArriveQtyCU && line.ReqQty <= SupplierConfirmQtyTU - TotalArriveQtyCU - QtyChk)
  386. {
  387. UFIDAU9ISVRCVDTOPOToRcvTransDTOData rCV = new UFIDAU9ISVRCVDTOPOToRcvTransDTOData();
  388. rCV.m_pONo = rCVhead.srcDocPONo;
  389. rCV.m_pOLineNo = line.srcDocPOLineNo;
  390. rCV.m_businessDate = System.DateTime.Now;
  391. //数量
  392. rCV.m_transQty = new UFIDAU9CBODTOsDoubleQuantityData();
  393. rCV.m_transQty.m_amount1 = line.ReqQty;
  394. rCV.m_pOShipLineNo = Int32.Parse(item["SubLineNo"].ToString());// line.srcDocPOLineNo;// = new UFIDAU9ISVRCVDTORcvLineInfoDTOData();
  395. rCV.m_transQty.m_amount2 = 0;
  396. #region 获取仓库信息
  397. string sqlWH = @"select ID,Code from CBO_Wh
  398. WHERE Code='" + line.WhCode + "' ";
  399. sqlWH = string.Format(sqlWH);
  400. DataTable _dtWH = DBhlper.Query(sqlWH, Appconfig.GetU9ConnStr());
  401. string WHCode = string.Empty;
  402. if (_dtWH != null && _dtWH.Rows.Count > 0)
  403. {
  404. WHID = long.Parse(_dtWH.Rows[0][0].ToString());
  405. WHCode = _dtWH.Rows[0][1].ToString();
  406. }
  407. if (string.IsNullOrWhiteSpace(WHCode))
  408. {
  409. rtnRcvInfo rtnpo = new rtnRcvInfo();
  410. rtnpo.IsSuccess = false;
  411. rtnpo.Message = "未获取到仓库";
  412. rtnpos.Add(rtnpo);
  413. return rtnpos;
  414. }
  415. #endregion
  416. //仓库
  417. #region 先创建批号
  418. string LotID = "";
  419. if (line.RcvLot != "")
  420. {
  421. CustCreateLotMaster LotMasterCreate = new CustCreateLotMaster();
  422. string lotWHCode = line.WhCode;
  423. string lotItemCode = line.ItemCode;
  424. string LotCode = line.RcvLot;
  425. LotMasterCreate.CustCreateRCVLotMaster(lotWHCode, lotItemCode, LotCode, line.LotCreateTime, OrgID, ref LotID);
  426. if (LotID == "")
  427. {
  428. rtnRcvInfo rtnpo = new rtnRcvInfo();
  429. rtnpo.IsSuccess = false;
  430. rtnpo.Message = "批号创建失败";
  431. rtnpos.Add(rtnpo);
  432. return rtnpos;
  433. }
  434. }
  435. #endregion
  436. rCV.m_rcvLineInfoDTO = new UFIDAU9ISVRCVDTORcvLineInfoDTOData();
  437. rCV.m_rcvLineInfoDTO.m_invLotCode = line.RcvLot;
  438. rCV.m_rcvLineInfoDTO.m_storageType = 4;
  439. rCV.m_rcvLineInfoDTO.m_docLineNo = Count;
  440. rCV.m_rcvLineInfoDTO.Wh = WHID;
  441. rCV.m_rcvLineInfoDTO.m_whCode = WHCode;
  442. //rCV.m_pOShipLineNo = 10;
  443. //库位
  444. rCV.m_rcvLineInfoDTO.m_lineLocations = new UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData[] { };
  445. List<UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData> locationList = new List<UFIDAU9ISVRCVDTOOBARcvLineLocationDTOData>();
  446. rCVList.Add(rCV);
  447. Count++;
  448. strlog.AppendLine("来源采购订单行号(srcDocPOLineNo):" + line.srcDocPOLineNo);
  449. strlog.AppendLine("料品编码(ItemCode):" + line.ItemCode);
  450. strlog.AppendLine("料品数量(ReqQty):" + line.ReqQty);
  451. strlog.AppendLine("仓库(WHCode):" + WHCode);
  452. strlog.AppendLine("库存批号(RcvLot):" + line.RcvLot);
  453. strlog.AppendLine("用户ID(UserID):" + line.UserID);
  454. strlog.AppendLine("用户编号(UserCode):" + line.UserCode);
  455. strlog.AppendLine("组织编号(FurnaceNo):" + line.OrgCode);
  456. QtyChk += line.ReqQty;
  457. line.ReqQty = 0;
  458. continue;
  459. }
  460. }
  461. }
  462. else
  463. {
  464. rtnRcvInfo rtnpo = new rtnRcvInfo();
  465. rtnpo.IsSuccess = false;
  466. rtnpo.Message = "采购订单:" + rCVhead.srcDocPONo + ",行:" + line.srcDocPOLineNo + ",不存在或者已全部入库!";
  467. rtnpos.Add(rtnpo);
  468. return rtnpos;
  469. }
  470. #endregion
  471. }
  472. }
  473. pOList = rCVList.ToArray();
  474. //给上下文信息赋值
  475. context = CreateContextObj(UserID, UserCode, OrgID);
  476. (client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue;
  477. (client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue;
  478. returnItems = client.Do(out returnMsg, context, pOList, splitBy, false);
  479. foreach (EntityKey returnInfo in returnItems)
  480. {
  481. strlog.AppendLine("返回信息(returnInfo.ID):" + returnInfo.ID);
  482. rtnRcvInfo rtnpo = new rtnRcvInfo();
  483. //行信息 服务不返回 sql查询
  484. string sql = @"select A.DocNo as docNo,A1.DocLineNo as docLineNo,A1.ItemInfo_ItemCode,A1.ID as lineID from PM_Receivement A
  485. left join PM_RcvLine A1 on A.ID=A1.Receivement where A.ID='{0}'";
  486. sql = string.Format(sql, returnInfo.ID);
  487. DataTable dt = DBhlper.Query(sql, Appconfig.GetU9ConnStr());
  488. if (dt.Rows.Count > 0)
  489. {
  490. List<rtnRcvLine> pOLines = new List<rtnRcvLine>();
  491. foreach (DataRow dr in dt.Rows)
  492. {
  493. rtnpo.DocNo = dr["docNo"].ToString();
  494. rtnpo.IsSuccess = true;
  495. rtnRcvLine line = new rtnRcvLine();
  496. line.LineNo = int.Parse(dr["docLineNo"].ToString());
  497. pOLines.Add(line);
  498. }
  499. rtnpo.rtnLines = pOLines.ToArray();
  500. }
  501. rtnpos.Add(rtnpo);
  502. }
  503. strlog.AppendLine("返回数据:");
  504. foreach (var info in rtnpos)
  505. {
  506. strlog.AppendLine("单号:" + info.DocNo);
  507. strlog.AppendLine("结果:" + info.IsSuccess);
  508. strlog.AppendLine("返回消息:" + info.Message);
  509. foreach (var _line in info.rtnLines)
  510. {
  511. strlog.AppendLine("行号:" + _line.LineNo);
  512. }
  513. }
  514. strlog.AppendLine("*****************************************************");
  515. Appconfig.WriteLogFile(strlog.ToString(), "创建收货单");
  516. return rtnpos;
  517. }
  518. catch (Exception ex)
  519. {
  520. //异常信息捕获
  521. List<rtnRcvInfo> rtnpos = new List<rtnRcvInfo>();
  522. rtnRcvInfo rtnpo = new rtnRcvInfo();
  523. rtnpo.IsSuccess = false;
  524. rtnpo.Message = GetExceptionMessage(ex);
  525. rtnpos.Add(rtnpo);
  526. StringBuilder strlog = new StringBuilder();
  527. strlog.AppendLine("创建收货单");
  528. strlog.AppendLine("*****************************************************");
  529. foreach (var item in rCVInfoList)
  530. {
  531. strlog.AppendLine("来源采购订单号:" + item.srcDocPONo);
  532. strlog.AppendLine("传入送货单号:" + item.ASNNO);
  533. foreach (var line in item.lines)
  534. {
  535. strlog.AppendLine("来源采购订单行号:" + line.srcDocPOLineNo);
  536. strlog.AppendLine("料品编码:" + line.ItemCode);
  537. strlog.AppendLine("料品数量:" + line.ReqQty);
  538. strlog.AppendLine("仓库:" + line.WhCode);
  539. strlog.AppendLine("库存批号:" + line.RcvLot);
  540. strlog.AppendLine("用户ID:" + line.UserID);
  541. strlog.AppendLine("用户编号:" + line.UserCode);
  542. strlog.AppendLine("组织编号:" + line.OrgCode);
  543. }
  544. }
  545. strlog.AppendLine("返回消息:" + rtnpo.Message);
  546. strlog.AppendLine("*****************************************************");
  547. Appconfig.WriteLogFile(strlog.ToString(), "创建收货单");
  548. return rtnpos;
  549. }
  550. #endregion
  551. }
  552. #region 表头类
  553. public class rCVhead
  554. {
  555. private rCVLine[] _lines;
  556. private string _srcDocPONo;
  557. private string _DocType;
  558. private string _ASNNO;
  559. public rCVLine[] lines
  560. {
  561. get { return _lines; }
  562. set { _lines = value; }
  563. }
  564. /// <summary>
  565. /// 来源采购订单
  566. /// </summary>
  567. public string srcDocPONo
  568. {
  569. get { return _srcDocPONo; }
  570. set { _srcDocPONo = value; }
  571. }
  572. public string ASNNO
  573. {
  574. get { return _ASNNO; }
  575. set { _ASNNO = value; }
  576. }
  577. public string DocType
  578. {
  579. get { return _DocType; }
  580. set { _DocType = value; }
  581. }
  582. }
  583. #endregion
  584. #region 表体类
  585. public class rCVLine
  586. {
  587. /// <summary>
  588. /// 数量
  589. /// </summary>
  590. public decimal ReqQty { get; set; }
  591. public string WhCode { get; set; }
  592. public string BinCode { get; set; }
  593. /// <summary>
  594. /// 炉号
  595. /// </summary>
  596. public string OrgCode { get; set; }
  597. /// <summary>
  598. /// 来源采购订单料号
  599. /// </summary>
  600. public string ItemCode { get; set; }
  601. /// <summary>
  602. /// 来源采购订单行
  603. /// </summary>
  604. public int srcDocPOLineNo { get; set; }
  605. /// <summary>
  606. /// 库存批号
  607. /// </summary>
  608. public string RcvLot { get; set; }
  609. /// <summary>
  610. /// 业务员ID
  611. /// </summary>
  612. public string UserID { get; set; }
  613. /// <summary>
  614. /// 业务员Code
  615. /// </summary>
  616. public string UserCode { get; set; }
  617. /// <summary>
  618. /// 批号创建时间
  619. /// </summary>
  620. public DateTime LotCreateTime { get; set; }
  621. }
  622. #endregion
  623. #region 提取异常信息
  624. /// <summary>
  625. /// 提取异常信息
  626. /// </summary>
  627. /// <param name="ex"></param>
  628. private string GetExceptionMessage(Exception ex)
  629. {
  630. string faultMessage = "未知错误,请查看ERP日志!";
  631. System.TimeoutException timeoutEx = ex as System.TimeoutException;
  632. if (timeoutEx != null)
  633. {
  634. faultMessage = "访问服务超时,请修改配置信息!";
  635. }
  636. else
  637. {
  638. FaultException<ServiceException> faultEx = ex as FaultException<ServiceException>;
  639. if (faultEx == null)
  640. {
  641. faultMessage = ex.Message;
  642. }
  643. else
  644. {
  645. ServiceException serviceEx = faultEx.Detail;
  646. if (serviceEx != null && !string.IsNullOrEmpty(serviceEx.Message)
  647. && !serviceEx.Message.Equals("fault", StringComparison.OrdinalIgnoreCase))
  648. {
  649. // 错误信息在faultEx.Message中,请提取,
  650. // 格式为"Fault:料品不能为空,请录入\n 在....."
  651. int startIndex = serviceEx.Message.IndexOf(":");
  652. int endIndex = serviceEx.Message.IndexOf("\n");
  653. if (endIndex == -1)
  654. endIndex = serviceEx.Message.Length;
  655. if (endIndex > 0 && endIndex > startIndex + 1)
  656. {
  657. faultMessage = serviceEx.Message.Substring(startIndex + 1, endIndex - startIndex - 1);
  658. }
  659. else
  660. {
  661. faultMessage = serviceEx.Message;
  662. }
  663. }
  664. }
  665. }
  666. return faultMessage;
  667. }
  668. #endregion
  669. #region 给上下文信息赋值
  670. /// <summary>
  671. /// 给上下文信息赋值
  672. /// </summary>
  673. /// <returns></returns>
  674. private ThreadContext CreateContextObj(string UserID, string UserCode, string OrgID)
  675. {
  676. // 实例化应用上下文对象
  677. ThreadContext thContext = new ThreadContext();
  678. System.Collections.Generic.Dictionary<object, object> ns = new Dictionary<object, object>();
  679. ns.Add("OrgID", OrgID);
  680. ns.Add("UserID", UserID);
  681. ns.Add("UserCode", UserCode);
  682. ns.Add("Datetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  683. ns.Add("CultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  684. ns.Add("EnterpriseID", ConfigurationManager.AppSettings["enterpriseID"].ToString());
  685. ns.Add("DefaultCultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  686. thContext.nameValueHas = ns;
  687. return thContext;
  688. }
  689. #endregion
  690. #region 时间戳方法
  691. private DateTime TimestampToDateTime(long timestamp)
  692. {
  693. DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
  694. long lTime = timestamp * 10000000;
  695. TimeSpan nowTimeSpan = new TimeSpan(lTime);
  696. DateTime resultDateTime = dateTimeStart.Add(nowTimeSpan);
  697. return resultDateTime;
  698. }
  699. #endregion
  700. }
  701. #region 上下文类信息
  702. public class contextInfo
  703. {
  704. private long _OrgID;
  705. private string _OrgCode;
  706. private long _UserID;
  707. private string _UserCode;
  708. private DateTime _Datetime;
  709. private string _CultureName;
  710. private string _EnterpriseID;
  711. /// <summary>
  712. /// 组织ID
  713. /// </summary>
  714. public long OrgID
  715. {
  716. get { return _OrgID; }
  717. set { _OrgID = value; }
  718. }
  719. /// <summary>
  720. /// 组织编码
  721. /// </summary>
  722. public string OrgCode
  723. {
  724. get { return _OrgCode; }
  725. set { _OrgCode = value; }
  726. }
  727. /// <summary>
  728. /// 操作员ID
  729. /// </summary>
  730. public long UserID
  731. {
  732. get { return _UserID; }
  733. set { _UserID = value; }
  734. }
  735. /// <summary>
  736. /// 操作员编码
  737. /// </summary>
  738. public string UserCode
  739. {
  740. get { return _UserCode; }
  741. set { _UserCode = value; }
  742. }
  743. /// <summary>
  744. /// 时间
  745. /// </summary>
  746. public DateTime Datetime
  747. {
  748. get { return _Datetime; }
  749. set { _Datetime = value; }
  750. }
  751. /// <summary>
  752. /// 语言
  753. /// </summary>
  754. public string CultureName
  755. {
  756. get { return _CultureName; }
  757. set { _CultureName = value; }
  758. }
  759. /// <summary>
  760. /// 企业ID号
  761. /// </summary>
  762. public string EnterpriseID
  763. {
  764. get { return _EnterpriseID; }
  765. set { _EnterpriseID = value; }
  766. }
  767. public contextInfo()
  768. {
  769. CultureName = "zh-CN";
  770. Datetime = DateTime.Now;
  771. }
  772. }
  773. #endregion
  774. #region 返回信息类
  775. public class rtnRcvInfo
  776. {
  777. public string DocNo { get; set; }
  778. public bool IsSuccess { get; set; }
  779. public string Message { get; set; }
  780. public rtnRcvLine[] rtnLines { get; set; }
  781. }
  782. public class rtnRcvLine
  783. {
  784. public int LineNo { get; set; }
  785. //public string srcDocNo { get; set; }
  786. //public int srcLineNo { get; set; }
  787. //public decimal reqQty { get; set; }
  788. //public string proCode { get; set; }
  789. }
  790. #endregion
  791. #region 表体类
  792. //public class rCVLine
  793. //{
  794. // /// <summary>
  795. // /// 来源采购订单
  796. // /// </summary>
  797. // public string srcDocPONo { get; set; }
  798. // private int _srcDocPOLineNo;
  799. // private decimal _reqQty;
  800. // public string WhCode { get; set; }
  801. // /// <summary>
  802. // /// 炉号
  803. // /// </summary>
  804. // public string FurnaceNo { get; set; }
  805. // /// <summary>
  806. // /// 数量
  807. // /// </summary>
  808. // public decimal ReqQty
  809. // {
  810. // get { return _reqQty; }
  811. // set { _reqQty = value; }
  812. // }
  813. // /// <summary>
  814. // /// 来源采购订单行
  815. // /// </summary>
  816. // public int srcDocPOLineNo
  817. // {
  818. // get { return _srcDocPOLineNo; }
  819. // set { _srcDocPOLineNo = value; }
  820. // }
  821. //}
  822. #endregion
  823. }