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

323 lines
12 KiB

2 years ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.ServiceModel;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using ICS.WCF.Base;
  9. using UFIDA.U9.ISV.Rcv;
  10. using UFSoft.UBF.Service;
  11. namespace ICS.CreateCreateRcvRest
  12. {
  13. public class CreateRcv
  14. {
  15. private static string ORGCode = ConfigurationManager.AppSettings["orgCode"].ToString();
  16. private static string ERPConStr = Appconfig.GetU9ConnStr();
  17. private static string UserCode = ConfigurationManager.AppSettings["userCode"].ToString();
  18. public static ReturnValue CustCreatePR(List<ITEMREQDATA> PRList)
  19. {
  20. #region 服务调用框架结构
  21. //实例化代理类 UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient
  22. CreateRcvRestSVClient client = new CreateRcvRestSVClient();
  23. //服务返回结果
  24. //UFIDAU9ISVPRSVPRBizKeyDTOData[] returnItems;
  25. CreateRcvRestDTOData[] returnItems;
  26. //返回异常信息,目前还没有使用此属性
  27. //UFSoft.UBF.Exceptions1.MessageBase[] returnMsg;
  28. //上下文信息
  29. ISVContext context;
  30. //传入 参数
  31. string[] splitBy = new string[] { };
  32. try
  33. {
  34. if (PRList == null || PRList.Count == 0)
  35. {
  36. throw new Exception("传入数据为空");
  37. }
  38. string ORGID = "";
  39. string OrgCode = "";
  40. ORGID = Appconfig.IsExistsCode(ORGCode, "Base_Organization");
  41. if (string.IsNullOrEmpty(ORGID))
  42. {
  43. throw new Exception("组织编码:" + ORGCode + "在U9中不存在。");
  44. }
  45. //给上下文信息赋值
  46. context = CreateContextObj(ORGID);
  47. //给传入参数赋值
  48. CreateRcvRestDTOData[] itemDatas = setDataForItem(PRList, ORGID, ORGCode);
  49. //服务调用
  50. (client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue;
  51. (client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue;
  52. returnItems = client.Do(context, itemDatas.ToArray());
  53. foreach (CreateRcvRestDTOData data in returnItems)
  54. {
  55. StringBuilder str = new StringBuilder();
  56. str.AppendLine("创建U9退货单");
  57. str.AppendLine("单号:" + data.DocNo);
  58. Appconfig.WriteLogFile(str.ToString(), "创建U9退货单");
  59. }
  60. ReturnValue value = new ReturnValue();
  61. value.IsSuccess = true;
  62. value.Message = "退货单成功";
  63. List<RtnPRData> values = new List<RtnPRData>();
  64. int msgnumber = 0;
  65. foreach (CreateRcvRestDTOData data in returnItems)
  66. {
  67. msgnumber++;
  68. if (msgnumber != 1)
  69. {
  70. continue;
  71. }
  72. RtnPRData prvalue = new RtnPRData();
  73. prvalue.DocNo = data.DocNo;
  74. prvalue.msg = data.SyncErrMsg;
  75. if (prvalue.msg != null)
  76. {
  77. value.IsSuccess = false;
  78. value.Message = "调入单失败";
  79. }
  80. values.Add(prvalue);
  81. }
  82. value.PRList = values;
  83. Appconfig.WriteLogFile("成功", "创建U9调入单");
  84. return value;
  85. }
  86. catch (Exception ex)
  87. {
  88. //异常信息捕获
  89. string HeadList = string.Empty;
  90. StringBuilder str = new StringBuilder();
  91. foreach (ITEMREQDATA data in PRList)
  92. {
  93. str.AppendLine("创建U9调入单");
  94. str.AppendLine(ex.ToString());
  95. HeadList += "\r\n 数量:" + data.RcvQty + ",调入仓库:" + data.Wh + ",库位:" + data.Bin + ",批号:" + data.LotNo +",单位:" + data.Uom;
  96. }
  97. str.AppendLine(HeadList);
  98. str.AppendLine("结果:" + "False");
  99. Appconfig.WriteLogFile(str.ToString(), "创建U9调入单");
  100. ReturnValue value = new ReturnValue();
  101. value.IsSuccess = false;
  102. value.Message = ex.ToString();
  103. return value;
  104. }
  105. #endregion
  106. }
  107. #region 给上下文信息赋值1
  108. /// <summary>
  109. /// 给上下文信息赋值
  110. /// </summary>
  111. /// <returns></returns>
  112. private static ISVContext CreateContextObj(string ORGID)
  113. {
  114. // 实例化应用上下文对象
  115. ISVContext isvContext = new ISVContext();
  116. isvContext.OrgID = Convert.ToInt64(ORGID);
  117. isvContext.OrgCode = ORGCode;
  118. isvContext.UserCode = UserCode;
  119. isvContext.EntCode = ConfigurationManager.AppSettings["enterpriseID"].ToString();
  120. return isvContext;
  121. }
  122. #endregion
  123. private static CreateRcvRestDTOData[] setDataForItem(List<ITEMREQDATA> datas, string ORGID, string OrgCode)
  124. {
  125. int number = 0;
  126. List<CreateRcvRestDTOData> prs = new List<CreateRcvRestDTOData>();
  127. List<ItemCURR> lstitem = new List<ItemCURR>();
  128. foreach (ITEMREQDATA data in datas)
  129. {
  130. number++;
  131. CreateRcvRestDTOData pr = new CreateRcvRestDTOData();
  132. if (Appconfig.Getusername(data.CreatedBy) != null)
  133. pr.CreatedBy = data.CreatedBy;//创建人
  134. else
  135. throw new Exception("用户:" + data.CreatedBy + "不存在");
  136. if (Appconfig.GetPOID(data.DocNo,data.DocLineNo)!=null)
  137. pr.POLineID = Convert.ToInt64(Appconfig.GetPOID(data.DocNo, data.DocLineNo));
  138. else
  139. throw new Exception("订单:" + data.DocNo + ",行:" + data.DocLineNo + "不存在");
  140. pr.DocTypeCode = data.DocTypeCode;
  141. pr.ReceivementType = 1;
  142. pr.SrcID = "";
  143. pr.RcvQty = data.RcvQty;
  144. pr.PriceTC = data.PriceTC;
  145. pr.RtnDeductQty = data.RtnDeductQty;
  146. pr.RtnFillQty = data.RtnFillQty;
  147. pr.Memo = data.Memo;
  148. pr.LotNo = data.LotNo;
  149. pr.BusinessDate = data.BusinessDate;
  150. pr.ItemID = Convert.ToInt64(Appconfig.ITEMMATERID(data.Item, ORGID));//料品
  151. pr.GroupFlag = data.GroupFlag;
  152. pr.OtherDesc = data.OtherDesc;
  153. if (Appconfig.GetMarkid(data.Mfc) != "")
  154. pr.Mfc = Convert.ToInt64(Appconfig.GetMarkid(data.Mfc));
  155. else
  156. pr.Mfc = 0;
  157. if (Appconfig.GetBysupid(data.Supplier, ORGID) != "")
  158. pr.Supplier = Convert.ToInt64(Appconfig.GetBysupid(data.Supplier, ORGID));
  159. else
  160. pr.Supplier = 0;
  161. if (Appconfig.uomid(data.Uom) != "")
  162. pr.Uom = Convert.ToInt64(Appconfig.uomid(data.Uom));
  163. else
  164. throw new Exception("计量单位:" + data.Uom + "不存在");
  165. if (Appconfig.GetWhCodeByBinid(data.Wh, ORGID) != "")
  166. pr.Wh = Convert.ToInt64(Appconfig.GetWhCodeByBinid(ORGID, ORGID)); //调出仓库id
  167. else
  168. pr.Wh = 0;
  169. //throw new Exception("存储地点:" + data.Wh + "不存在");
  170. if (Appconfig.GetByBinid(data.Bin, ORGID) != "")
  171. pr.Bin = Convert.ToInt64(Appconfig.GetByBinid(ORGID, ORGID));
  172. else
  173. pr.Bin = 0;
  174. //throw new Exception("库位:" + data.Bin + "不存在");
  175. if (Appconfig.GetProjectid(data.Project, ORGID) != "")
  176. pr.Project = Convert.ToInt64(Appconfig.GetProjectid(data.Project, ORGID));
  177. else
  178. pr.Project = 0;
  179. //throw new Exception("项目:" + data.Project + "不存在");
  180. prs.Add(pr);
  181. }
  182. return prs.ToArray();
  183. }
  184. #region 时间戳方法
  185. private DateTime TimestampToDateTime(long timestamp)
  186. {
  187. DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
  188. long lTime = timestamp * 10000000;
  189. TimeSpan nowTimeSpan = new TimeSpan(lTime);
  190. DateTime resultDateTime = dateTimeStart.Add(nowTimeSpan);
  191. return resultDateTime;
  192. }
  193. #endregion
  194. }
  195. public class ITEMREQDATA
  196. {
  197. public string SrcID { get; set; }// 外系统ID
  198. public string POLineID { get; set; }// 采购行ID
  199. public string Uom { get; set; }// 单位
  200. public decimal RcvQty { get; set; }// 收货数量
  201. public string BusinessDate { get; set; }// 日期
  202. public string CreatedBy { get; set; }// 操作人
  203. public string LotNo { get; set; }// 批号
  204. public string Wh { get; set; }// 存储地点
  205. public string Bin { get; set; }// 库位
  206. public string Memo { get; set; }// 备注
  207. public string Mfc { get; set; }// 厂牌
  208. public string Project { get; set; }// 项目
  209. public string Item { get; set; }// 料品
  210. public string Supplier { get; set; }// 供应商
  211. public string DocTypeCode { get; set; }// 单据类型
  212. public string GroupFlag { get; set; }// 分单标识
  213. public string DocNo { get; set; }// 单号
  214. public string DocLineNo { get; set; }// 行号
  215. public decimal RtnFillQty { get; set; }// 补货数量
  216. public decimal RtnDeductQty { get; set; }// 退扣数量
  217. public string ReceivementType { get; set; }// 收货单类型
  218. public string OtherDesc { get; set; }// 弹性域
  219. public decimal PriceTC { get; set; }// 价格
  220. }
  221. public class ItemCURR
  222. {
  223. public string LOTNO { get; set; }//批号
  224. public string ORG { get; set; }//组织编码
  225. public string WH { get; set; }//仓库
  226. public string BIN { get; set; }//库位
  227. public string ITEM { get; set; }//物料
  228. public decimal QTY { get; set; }//数量
  229. }
  230. public class ItemRatio
  231. {
  232. public long ID { get; set; }//单位编码
  233. public string Code { get; set; }//单位编码
  234. public decimal Ratio { get; set; }//位数
  235. public int Precision { get; set; }//精度
  236. }
  237. public class ReturnValue
  238. {
  239. public bool IsSuccess { get; set; }//成功
  240. public string Message { get; set; }//信息
  241. public List<RtnPRData> PRList { get; set; }//请购单信息
  242. }
  243. public class RtnPRData
  244. {
  245. public string DocNo { get; set; }//单号
  246. public string msg { get; set; }//错误信息
  247. //public List<RtnPRLineData> lines { get; set; }//行
  248. }
  249. public class RtnPRLineData
  250. {
  251. public int DocLineNo { get; set; }//行号
  252. public string ItemCode { get; set; }//料号
  253. public decimal Qty { get; set; }//数量
  254. public DateTime RequiredDeliveryDate { get; set; }//要求交货日期
  255. }
  256. }