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.

506 lines
26 KiB

3 weeks ago
  1. using NFine.Code;
  2. using NFine.Data.Extensions;
  3. using NFine.Domain._03_Entity.SRM;
  4. using NFine.Repository;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data.Common;
  8. using System.Data;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Globalization;
  13. namespace NFine.Application.DHAY
  14. {
  15. public class ICSFinishedProductShipmentApp : RepositoryFactory<ICSVendor>
  16. {
  17. ICSCreateItemLotApp app = new ICSCreateItemLotApp();
  18. public DataTable GetICSSDN(string queryJson, ref Pagination jqgridparam)
  19. {
  20. DataTable dt = new DataTable();
  21. var queryParam = queryJson.ToJObject();
  22. List<DbParameter> parameter = new List<DbParameter>();
  23. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  24. string User = UserName.Substring(0, 2);
  25. #region [SQL]
  26. string sql = @" select
  27. DISTINCT
  28. a.id
  29. ,SDNCode
  30. ,a.Sequence
  31. ,a.SOCode
  32. ,a.SOSequence
  33. ,b.EATTRIBUTE3
  34. ,a.InvCode
  35. ,c.InvName
  36. ,c.EATTRIBUTE2
  37. ,b.EATTRIBUTE6
  38. ,a.EATTRIBUTE6 as Project
  39. ,a.EATTRIBUTE7
  40. ,c.InvStd
  41. ,isnull(a.Quantity,0) AS Quantity
  42. ,ISNULL(SDNQuantity, 0) AS SDNQuantity
  43. ,isnull(a.Quantity,0)-ISNULL(SDNQuantity, 0) as SYQty
  44. ,ISNULL(SDNQuantity, 0)*(1.1) AS KQty
  45. ,ISNULL(SDNQuantity, 0)*(1.1)-ISNULL(d.LotQty,0) AS SYSDNQuantity
  46. ,d.LotQty
  47. ,a.MUSER
  48. ,a.MTIME
  49. ,a.CusName
  50. from ICSSDN a
  51. left join ICSSO b on a.socode=b.socode and a.SOSequence=b.Sequence
  52. left join ICSInventory c on a.InvCode=c.InvCode and a.WorkPoint=c.WorkPoint
  53. left JOIN (SELECT SUM(ISNULL(Quantity,0))AS LotQty,TransCode,TransSequence FROM ICSFinishedProductShipment
  54. WHERE type='1'
  55. GROUP BY TransCode,TransSequence)d on SDNCode=d.TransCode and a.Sequence=d.TransSequence
  56. WHERE a.Type='1' and isnull(SDNQuantity,0)<>0";
  57. if (!string.IsNullOrWhiteSpace(queryJson))
  58. {
  59. if (!string.IsNullOrWhiteSpace(queryParam["SDNCode"].ToString()))
  60. {
  61. sql += " and a.SDNCode like '%" + queryParam["SDNCode"].ToString() + "%' ";
  62. }
  63. if (!string.IsNullOrWhiteSpace(queryParam["SOCode"].ToString()))
  64. {
  65. sql += " and a.SOCode like '%" + queryParam["SOCode"].ToString() + "%' ";
  66. }
  67. if (!string.IsNullOrWhiteSpace(queryParam["InvCode"].ToString()))
  68. {
  69. sql += " and a.InvCode like '%" + queryParam["InvCode"].ToString() + "%' ";
  70. }
  71. if (!string.IsNullOrWhiteSpace(queryParam["CusName"].ToString()))
  72. {
  73. sql += " and a.CusName like '%" + queryParam["CusName"].ToString() + "%' ";
  74. }
  75. if (!string.IsNullOrWhiteSpace(queryParam["CusInv"].ToString()))
  76. {
  77. sql += " and b.EATTRIBUTE3 like '%" + queryParam["CusInv"].ToString() + "%' ";
  78. }
  79. if (!string.IsNullOrWhiteSpace(queryParam["TimeFrom"].ToString()))
  80. {
  81. sql += " and convert(nvarchar(20),a.CreateDateTime,23) >= '" + queryParam["TimeFrom"].ToString() + "' ";
  82. }
  83. if (!string.IsNullOrWhiteSpace(queryParam["TimeArrive"].ToString()))
  84. {
  85. sql += " and convert(nvarchar(20),a.CreateDateTime,23) <= '" + queryParam["TimeArrive"].ToString() + "' ";
  86. }
  87. }
  88. #endregion
  89. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  90. }
  91. /// <summary>
  92. /// 获取流水号,条码信息
  93. /// </summary>
  94. /// <param name="queryJson"></param>
  95. /// <param name="jqgridparam"></param>
  96. /// <returns></returns>
  97. public DataTable GetICSFinishedProductShipment(string queryJson, ref Pagination jqgridparam)
  98. {
  99. DataTable dt = new DataTable();
  100. var queryParam = queryJson.ToJObject();
  101. List<DbParameter> parameter = new List<DbParameter>();
  102. #region [SQL]
  103. string sql = @"SELECT
  104. ID
  105. ,LotNO
  106. ,quantity as minPackQty
  107. ,ExtensionID
  108. ,ProductDate
  109. ,PrintTimes
  110. ,LastPrintTime
  111. ,LastPrintUser
  112. ,MUSER
  113. ,MTIME
  114. ,EATTRIBUTE1
  115. FROM ICSFinishedProductShipment";
  116. sql += " WHERE 1=1 and TransCode='" + queryParam["SDNCode"].ToString() + "'";
  117. if (!string.IsNullOrWhiteSpace(queryParam["FlagVersion"].ToString()))
  118. {
  119. sql += " and Type= '" + queryParam["FlagVersion"].ToString() + "' ";
  120. }
  121. if (!string.IsNullOrWhiteSpace(queryParam["Sequence"].ToString()))
  122. {
  123. sql += " and TransSequence= '" + queryParam["Sequence"].ToString() + "' ";
  124. }
  125. if (!string.IsNullOrWhiteSpace(queryParam["MOCode"].ToString()))
  126. {
  127. sql += " and EATTRIBUTE1= '" + queryParam["MOCode"].ToString() + "' ";
  128. }
  129. sql = string.Format(sql, DbHelper.GetErpIp(), DbHelper.GetErpName());
  130. #endregion
  131. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  132. }
  133. /// <summary>
  134. /// 获取生成条码信息
  135. /// </summary>
  136. /// <param name="SDNCode"></param>
  137. /// <param name="Sequence"></param>
  138. /// <param name="WorkPoint"></param>
  139. /// <param name="Type"></param>
  140. /// <returns></returns>
  141. public DataTable GetSubGridJsonByCreate(string SDNCode, string Sequence, string WorkPoint,string Type)
  142. {
  143. DataTable dt = new DataTable();
  144. //var queryParam = queryJson.ToJObject();
  145. List<DbParameter> parameter = new List<DbParameter>();
  146. string Workpont = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  147. string sql = $@"SELECT a.InvCode,b.InvName,b.EATTRIBUTE5 AS OldInvCode,'' as OldInvName,a.SOCode,
  148. ISNULL(c.UseQuantity, 0) UseQuantity ,d.EATTRIBUTE3 as CusInvCode,a.EATTRIBUTE7 as CusOrders
  149. FROM ICSSDN a
  150. LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  151. left JOIN (SELECT TransCode,TransSequence,WorkPoint,sum(Quantity) as UseQuantity FROM ICSFinishedProductShipment WHERE Type='{Type}' AND TransCode='{SDNCode}' AND TransSequence='{Sequence}' GROUP BY TransCode,TransSequence,WorkPoint )c ON a.SDNCode=c.TransCode AND a.Sequence=c.TransSequence AND a.WorkPoint=c.WorkPoint
  152. left JOIN ICSSO d ON a.SOCode=d.SOCode AND a.SOSequence=d.Sequence and a.WorkPoint=d.WorkPoint
  153. WHERE a.SDNCode='{SDNCode}' AND a.Sequence='{Sequence}'
  154. AND a.WorkPoint='{Workpont}' ";
  155. return Repository().FindTableBySql(sql.ToString());
  156. }
  157. /// <summary>
  158. /// 获取生产日期
  159. /// </summary>
  160. /// <param name="SDNCode"></param>
  161. /// <param name="Sequence"></param>
  162. /// <returns></returns>
  163. public DataTable GetProductDate(string SDNCode, string Sequence)
  164. {
  165. DataTable dt = new DataTable();
  166. //var queryParam = queryJson.ToJObject();
  167. List<DbParameter> parameter = new List<DbParameter>();
  168. string Workpont = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  169. string sql = $@" SELECT top 1 ISNULL(ProductDate, '') ProductDate FROM ICSFinishedProductShipment WHERE TransCode='{SDNCode}' AND TransSequence='{Sequence}' and WorkPoint='{Workpont}' ORDER BY ProductDate asc
  170. ";
  171. return Repository().FindTableBySql(sql.ToString());
  172. }
  173. /// <summary>
  174. /// 批次信息
  175. /// </summary>
  176. /// <param name="POCode"></param>
  177. /// <param name="PORow"></param>
  178. /// <param name="WorkPoint"></param>
  179. /// <returns></returns>
  180. public DataTable GetBatchInformation(string SDNCode, string Sequence)
  181. {
  182. DataTable dt = new DataTable();
  183. //var queryParam = queryJson.ToJObject();
  184. List<DbParameter> parameter = new List<DbParameter>();
  185. string Workpont = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  186. string sql = $@"SELECT '' as Code,'' as Name
  187. UNION all
  188. --
  189. SELECT DISTINCT b.TransCode as Code,b.TransCode as Name
  190. FROM ICSWareHouseLotInfoLog a
  191. INNER JOIN ( SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID,a.EATTRIBUTE5 FROM ICSInventoryLot a
  192. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint ) d ON a.LotNo=d.lotNo and a.workPoint=d.WorkPoint AND d.Type<>'0' AND d.Type<>'4'
  193. INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.lotNo and a.workPoint=b.WorkPoint
  194. INNER JOIN ICSMO c ON c.MOCode=b.TransCode AND c.Sequence=b.TransSequence AND c.WorkPoint=b.WorkPoint
  195. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND a.WorkPoint='{Workpont}' AND a.BusinessCode='19'
  196. UNION
  197. --
  198. SELECT DISTINCT e.BatchCode as Code,e.BatchCode as Name
  199. FROM ICSWareHouseLotInfoLog a
  200. INNER JOIN (SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID FROM ICSInventoryLot a
  201. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint ) b ON a.LotNo=b.lotNo and a.workPoint=b.WorkPoint AND b.Type<>'0' AND b.Type<>'4'
  202. INNER JOIN ICSInventoryLotDetail d ON a.LotNo=d.lotNo and a.workPoint=d.WorkPoint
  203. left JOIN ICSMO c ON c.MOCode=d.TransCode AND c.Sequence=d.TransSequence AND c.WorkPoint=d.WorkPoint
  204. left JOIN ICSExtension e ON e.Id=b.ExtensionID
  205. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND a.WorkPoint='{Workpont}' AND a.BusinessCode='19' AND c. MOCode is NULL
  206. UNION
  207. --
  208. SELECT DISTINCT b.BatchCode as Code,b.BatchCode as Name
  209. FROM ICSWareHouseLotInfoLog a
  210. INNER JOIN ( SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID,a.EATTRIBUTE5 FROM ICSInventoryLot a
  211. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint ) c ON a.LotNo=c.lotNo and a.workPoint=c.WorkPoint AND c.Type ='0'
  212. INNER JOIN ICSExtension b ON c.ExtensionID=b.ID and a.workPoint=b.WorkPoint
  213. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND a.WorkPoint='{Workpont}' AND a.BusinessCode='19'
  214. UNION
  215. --退(退)
  216. SELECT DISTINCT c.EATTRIBUTE5 as Code,c.EATTRIBUTE5 as Name
  217. FROM ICSWareHouseLotInfoLog a
  218. INNER JOIN ( SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID,a.EATTRIBUTE5 FROM ICSInventoryLot a
  219. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint ) c ON a.LotNo=c.lotNo and a.workPoint=c.WorkPoint AND c.Type ='4'
  220. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND a.WorkPoint='{Workpont}' AND a.BusinessCode='19' ";
  221. return Repository().FindTableBySql(sql.ToString());
  222. }
  223. /// <summary>
  224. /// 获取工单信息
  225. /// </summary>
  226. /// <param name="SDNCode"></param>
  227. /// <param name="Sequence"></param>
  228. /// <returns></returns>
  229. public DataTable GetMOCode(string SDNCode, string TransSequence, string Type)
  230. {
  231. DataTable dt = new DataTable();
  232. //var queryParam = queryJson.ToJObject();
  233. List<DbParameter> parameter = new List<DbParameter>();
  234. string Workpont = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  235. string sql = $@"SELECT '' as Code,'' as Name
  236. UNION all
  237. SELECT distinct EATTRIBUTE1 AS Code,EATTRIBUTE1 AS Name From ICSFinishedProductShipment WHERE TransCode='{SDNCode}' AND TransSequence='{TransSequence}' AND Type='{Type}' AND WorkPoint='{Workpont}'
  238. ";
  239. return Repository().FindTableBySql(sql.ToString());
  240. }
  241. /// <summary>
  242. /// 获取工单信息
  243. /// </summary>
  244. /// <param name="SDNCode"></param>
  245. /// <param name="Sequence"></param>
  246. /// <returns></returns>
  247. public string MarkPrint(string Key)
  248. {
  249. try
  250. {
  251. string Workpont = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  252. string UserName = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  253. Key = Key.Substring(2, Key.Length - 5);
  254. string sql = $@"UPDATE ICSFinishedProductShipment SET PrintTimes=ISNULL(PrintTimes, 0)+1 ,LastPrintUser='{UserName}',LastPrintTime=GETDATE() WHERE ID IN({Key.TrimEnd('|')})
  255. ";
  256. if (SqlHelper.CmdExecuteNonQuery(sql) > 0)
  257. {
  258. return "操作成功";
  259. }
  260. else
  261. {
  262. return "操作失败";
  263. }
  264. }
  265. catch (Exception ex)
  266. {
  267. return ex.Message;
  268. }
  269. }
  270. /// <summary>
  271. /// 批次数量
  272. /// </summary>
  273. /// <param name="MOCode"></param>
  274. /// <param name="SDNCode"></param>
  275. /// <param name="Sequence"></param>
  276. /// <returns></returns>
  277. public DataTable GetBatchCodeCount(string MOCode, string SDNCode, string Sequence, string Type)
  278. {
  279. DataTable dt = new DataTable();
  280. //var queryParam = queryJson.ToJObject();
  281. List<DbParameter> parameter = new List<DbParameter>();
  282. string Workpont = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  283. string sql = string.Empty;
  284. // 1.工单数量 2.批次数量 3.销售退货数量
  285. if (Type == "3")
  286. {
  287. sql = $@"
  288. SELECT SUM(Quantity) as Quantity,sum(CurrentQuantity) as CurrentQuantity,aa.MOCode,aa.TransCode,d.UseQuantity from ( SELECT c.TransCode as MOCode,a.TransCode as TransCode,a.WorkPoint,sum(ISnull(a.Quantity,0)) as Quantity,sum(ISnull(a.Quantity,0)) as CurrentQuantity
  289. from ICSWareHouseLotInfoLog a
  290. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  291. INNER JOIN ( SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID,a.EATTRIBUTE5
  292. FROM (SELECT LotNo, Type, WorkPoint, ExtensionID, EATTRIBUTE5
  293. ,CASE WHEN Type='101' THEN dbo.fn_GetRootBarcode(LotNo) else EATTRIBUTE1 end EATTRIBUTE1
  294. from ICSInventoryLot ) a
  295. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint
  296. where ISnull(b.type,a.Type)='3') f ON a.LotNo=f.lotNo and a.workPoint=f.WorkPoint and f.Type <>'0'
  297. inner JOIN ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=c.WorkPoint
  298. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND c.TransCode='{MOCode}' and a.WorkPoint='{Workpont}' AND a.BusinessCode='19' GROUP BY
  299. c.TransCode,a.TransCode,a.WorkPoint
  300. UNION all
  301. SELECT e.BatchCode as MOCode,a.TransCode as TransCode,a.WorkPoint,sum(ISnull(a.Quantity,0)) as Quantity,sum(ISnull(a.Quantity,0)) as CurrentQuantity
  302. from ICSWareHouseLotInfoLog a
  303. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  304. INNER JOIN ( SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID,a.EATTRIBUTE5 FROM ICSInventoryLot a
  305. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint
  306. where ISnull(b.type,a.Type)<>'4' and ISnull(b.type,a.Type)<>'3') f ON a.LotNo=f.lotNo and a.workPoint=f.WorkPoint
  307. INNER JOIN ICSExtension e ON e.Id=f.ExtensionID and e.workPoint=f.WorkPoint
  308. inner JOIN ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=c.WorkPoint
  309. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND e.BatchCode='{MOCode}' and a.WorkPoint='{Workpont}' AND a.BusinessCode='19' GROUP BY
  310. e.BatchCode,a.TransCode,a.WorkPoint
  311. UNION all
  312. SELECT f.EATTRIBUTE5 as MOCode,a.TransCode as TransCode,a.WorkPoint,sum(ISnull(a.Quantity,0)) as Quantity,sum(ISnull(a.Quantity,0)) as CurrentQuantity
  313. from ICSWareHouseLotInfoLog a
  314. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  315. INNER JOIN ( SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID,a.EATTRIBUTE5 FROM ICSInventoryLot a
  316. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint where ISnull(b.type,a.Type)='4') f ON a.LotNo=f.lotNo and a.workPoint=f.WorkPoint AND f.Type ='4'
  317. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND f.EATTRIBUTE5='{MOCode}' AND a.BusinessCode='19' GROUP BY
  318. f.EATTRIBUTE5,a.TransCode,a.WorkPoint) aa
  319. left join (SELECT sum(Quantity) as UseQuantity,WorkPoint,EATTRIBUTE1,TransCode FROM ICSFinishedProductShipment WHERE Type='{Type}' AND EATTRIBUTE1='{MOCode}' AND TransCode='{SDNCode}' AND TransSequence='{Sequence}' GROUP BY WorkPoint,TransCode,EATTRIBUTE1 ) d ON d.WorkPoint=aa.WorkPoint AND d.EATTRIBUTE1=aa.MOCode
  320. GROUP BY aa.MOCode,aa.TransCode,d.UseQuantity ";
  321. }
  322. else
  323. {
  324. sql = $@"
  325. SELECT SUM(Quantity) as Quantity,sum(CurrentQuantity) as CurrentQuantity,aa.MOCode,aa.TransCode,d.UseQuantity from ( SELECT c.TransCode as MOCode,a.TransCode as TransCode,a.WorkPoint,sum(ISnull(a.Quantity,0))*1.1 as Quantity,sum(ISnull(a.Quantity,0)) as CurrentQuantity
  326. from ICSWareHouseLotInfoLog a
  327. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  328. INNER JOIN ( SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID,a.EATTRIBUTE5
  329. FROM (SELECT LotNo, Type, WorkPoint, ExtensionID, EATTRIBUTE5
  330. ,CASE WHEN Type='101' THEN dbo.fn_GetRootBarcode(LotNo) else EATTRIBUTE1 end EATTRIBUTE1
  331. from ICSInventoryLot ) a
  332. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint
  333. where ISnull(b.type,a.Type)='3' ) f ON a.LotNo=f.lotNo and a.workPoint=f.WorkPoint and f.Type <>'0'
  334. inner JOIN ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=c.WorkPoint
  335. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND c.TransCode='{MOCode}' and a.WorkPoint='{Workpont}' AND a.BusinessCode='19' GROUP BY
  336. c.TransCode,a.TransCode,a.WorkPoint
  337. UNION all
  338. SELECT e.BatchCode as MOCode,a.TransCode as TransCode,a.WorkPoint,sum(ISnull(a.Quantity,0))*1.1 as Quantity,sum(ISnull(a.Quantity,0)) as CurrentQuantity
  339. from ICSWareHouseLotInfoLog a
  340. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  341. INNER JOIN ( SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID,a.EATTRIBUTE5 FROM ICSInventoryLot a
  342. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint
  343. where ISnull(b.type,a.Type)<>'4' and ISnull(b.type,a.Type)<>'3') f ON a.LotNo=f.lotNo and a.workPoint=f.WorkPoint
  344. INNER JOIN ICSExtension e ON e.Id=f.ExtensionID and e.workPoint=f.WorkPoint
  345. inner JOIN ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=c.WorkPoint
  346. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND e.BatchCode='{MOCode}' and a.WorkPoint='{Workpont}' AND a.BusinessCode='19' GROUP BY
  347. e.BatchCode,a.TransCode,a.WorkPoint
  348. UNION all
  349. SELECT f.EATTRIBUTE5 as MOCode,a.TransCode as TransCode,a.WorkPoint,sum(ISnull(a.Quantity,0))*1.1 as Quantity,sum(ISnull(a.Quantity,0)) as CurrentQuantity
  350. from ICSWareHouseLotInfoLog a
  351. INNER JOIN ICSWareHouseLotInfo b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
  352. INNER JOIN ( SELECT a.LotNo, ISnull(b.type,a.Type) Type,a.WorkPoint,a.ExtensionID,a.EATTRIBUTE5 FROM ICSInventoryLot a
  353. left JOIN ICSInventoryLot b ON a.EATTRIBUTE1=b.LotNo AND a.WorkPoint =b.WorkPoint where ISnull(b.type,a.Type)='4') f ON a.LotNo=f.lotNo and a.workPoint=f.WorkPoint AND f.Type ='4'
  354. WHERE a.TransCode='{SDNCode}' AND a.TransSequence='{Sequence}' AND f.EATTRIBUTE5='{MOCode}' and a.WorkPoint='{Workpont}' AND a.BusinessCode='19' GROUP BY
  355. f.EATTRIBUTE5,a.TransCode,a.WorkPoint) aa
  356. left join (SELECT sum(Quantity) as UseQuantity,WorkPoint,EATTRIBUTE1,TransCode FROM ICSFinishedProductShipment WHERE Type='{Type}' AND EATTRIBUTE1='{MOCode}' AND TransCode='{SDNCode}' AND TransSequence='{Sequence}' GROUP BY WorkPoint,TransCode,EATTRIBUTE1 ) d ON d.WorkPoint=aa.WorkPoint AND d.EATTRIBUTE1=aa.MOCode
  357. GROUP BY aa.MOCode,aa.TransCode,d.UseQuantity ";
  358. }
  359. return Repository().FindTableBySql(sql.ToString());
  360. }
  361. /// <summary>
  362. /// 生成条码
  363. /// </summary>
  364. /// <param name="SDNCode"></param>
  365. /// <param name="Sequence"></param>
  366. /// <param name="Type"></param>
  367. /// <param name="keyValue"></param>
  368. /// <param name="WorkPoint"></param>
  369. /// <returns></returns>
  370. public int SubmitForm(string SDNCode, string Sequence,string Type, string keyValue, string WorkPoint)
  371. {
  372. var queryParam = keyValue.ToJObject();
  373. string WorkPoints = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  374. int createPageCount = Convert.ToInt32(queryParam["createPageCount"].ToString());
  375. decimal minPackQty = Convert.ToDecimal(queryParam["minPackQty"].ToString());
  376. decimal thisCreateQty = Convert.ToDecimal(queryParam["thisCreateQty"].ToString());
  377. decimal LOTQTY = minPackQty;
  378. string Pre = "";
  379. string sql = string.Empty;
  380. //string VendorLot = queryParam["VendorLot"].ToString();
  381. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  382. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  383. string PRODUCTDATE = queryParam["PRODUCTDATE"].ToString();
  384. string sqls = string.Empty;
  385. int num = 0;
  386. string LotNo=string.Empty;
  387. string sqlCount = $@"SELECT max(CONVERT(int,Lotno)) as count from ICSFinishedProductShipment WHERE TransCode='{SDNCode}' And Type='{Type}' And EATTRIBUTE1='{queryParam["MOCode"]}' and EATTRIBUTE5='{queryParam["CusOrders"]}' ";
  388. var numer= SqlHelper.CmdExecuteDataTable(sqlCount)?.Rows[0]["count"].ToInt();
  389. for (int i = 0; i < createPageCount; i++)
  390. {
  391. if (i + 1 == createPageCount)
  392. {
  393. if (minPackQty * createPageCount > thisCreateQty)
  394. {
  395. LOTQTY = thisCreateQty - (minPackQty * (createPageCount - 1));
  396. }
  397. }
  398. if (Type == "1")
  399. {
  400. if (numer.IsEmpty() && i == 0)
  401. {
  402. LotNo = "00001";
  403. }
  404. else
  405. {
  406. LotNo = (numer + i + 1)?.ToString("D5");
  407. }
  408. }
  409. else if (Type == "2")
  410. {
  411. if (numer.IsEmpty() && i == 0)
  412. {
  413. LotNo = "0001";
  414. }
  415. else
  416. {
  417. LotNo = (numer + i + 1)?.ToString("D4");
  418. }
  419. }
  420. else if (Type == "3")
  421. {
  422. if (numer.IsEmpty() && i == 0)
  423. {
  424. LotNo = "001";
  425. }
  426. else
  427. {
  428. LotNo = (numer + i + 1)?.ToString("D3");
  429. }
  430. }
  431. else
  432. {
  433. return 0;
  434. }
  435. //LotNo = app.GetSerialCode(WorkPoints, "ICSFinishedProductShipment", "LotNO", Pre, num);
  436. sql += $@"INSERT INTO [dbo].[ICSFinishedProductShipment] ([ID], [LotNo], [InvCode], [ProductDate], [ExpirationDate], [Quantity], [TransCode], [TransSequence], [ExtensionID], [Type], [PrintTimes], [LastPrintUser], [LastPrintTime], [MUSER], [MUSERName], [MTIME], [WorkPoint], [minPackQty],[EATTRIBUTE1],[EATTRIBUTE5],[EATTRIBUTE6]) VALUES (newID(), N'{LotNo}', N'{queryParam["InvCode"]}', '{queryParam["PRODUCTDATE"]}', '2099-12-31', {LOTQTY}, N'{SDNCode}', N'{Sequence}', NULL, N'{Type}', NULL, NULL, NULL, N'{MUSER}', N'{MUSERNAME}', GetDate(), N'{WorkPoints}','{minPackQty}','{queryParam["MOCode"]}','{queryParam["CusOrders"]}','{queryParam["Remark"]}');";
  437. }
  438. int count = SqlHelper.CmdExecuteNonQueryLi(sql);
  439. return count;
  440. }
  441. /// <summary>
  442. /// 删除送货单
  443. /// </summary>
  444. /// <param name="keyValue"></param>
  445. /// <returns></returns>
  446. public string DeleteFinishedLot(string keyValue)
  447. {
  448. string msg = "";
  449. keyValue = keyValue.Substring(1, keyValue.Length - 2);
  450. string sql = "";
  451. try
  452. {
  453. sql = string.Format(@" DELETE FROM dbo.ICSFinishedProductShipment WHERE ID IN ({0})", keyValue.TrimEnd(','));
  454. SqlHelper.ExecuteNonQuery(sql);
  455. }catch (Exception ex)
  456. {
  457. msg = ex.Message;
  458. }
  459. return msg;
  460. }
  461. }
  462. }