Packing.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.Web;
  6. using Curtain.DataAccess;
  7. using Curtain.Log;
  8. using System.Data;
  9. using System.Drawing;
  10. using Newtonsoft.Json.Linq;
  11. using Newtonsoft.Json;
  12. /// <summary>
  13. /// AutoPacking 的摘要说明
  14. /// </summary>
  15. public class Packing
  16. {
  17. /// <summary>
  18. /// 自动生成包装单 toQianrun = -1 不提交到乾润接口 toQianrun = 0 提交到润接口
  19. /// </summary>
  20. public static int AutoPacking(int toQianrun = -1)
  21. {
  22. int PackingMinQueue = 2;
  23. int PackingMaxQueue = 2;
  24. int AutoPacking = 1;
  25. int result = 1;
  26. //从数据库加载配置
  27. using (IDataAccess conn = DataAccess.Create())
  28. {
  29. //读取包装线配置表
  30. DataTable dt = conn.ExecuteDatatable(@"
  31. SELECT
  32. SETTINGNAME,
  33. SETTINGVALUE
  34. FROM
  35. TP_MST_PACKINGSETTING
  36. WHERE
  37. SETTINGTYPE = 1
  38. "
  39. );
  40. //配置参数保存到Application中
  41. //WareHouseRefreshTime 仓库队列刷新时间
  42. //PackingStart 包装线启动地址
  43. //PackingMinQueue 仓库队列最小值,小于此数值开始自动产生包装单
  44. //PackingMaxQueue 仓库队列最大值,达到此数值,停止产生包装单
  45. //AutoPacking 是否启用自动生成包装单
  46. for (int i = 0; i < dt.Rows.Count; i++)
  47. {
  48. if (dt.Rows[i]["SETTINGNAME"].ToString() == "AutoPacking") AutoPacking = Convert.ToInt32(dt.Rows[i]["SETTINGVALUE"]);
  49. if (dt.Rows[i]["SETTINGNAME"].ToString() == "PackingMinQueue") PackingMinQueue = Convert.ToInt32(dt.Rows[i]["SETTINGVALUE"]);
  50. if (dt.Rows[i]["SETTINGNAME"].ToString() == "PackingMaxQueue") PackingMaxQueue = Convert.ToInt32(dt.Rows[i]["SETTINGVALUE"]);
  51. }
  52. }
  53. //执行自动下单
  54. if (AutoPacking == 1)
  55. {
  56. using (IDataAccess conn = DataAccess.Create())
  57. {
  58. #region 开启事务,默认走1号包装线,包装队列为0
  59. conn.BeginTransaction();
  60. string packingLine = "1";
  61. int packingNum = 0;
  62. int maxOrderNo = 0;
  63. int minOrderNo = 0;
  64. #endregion
  65. #region 读取包装线号,用于判断哪条线队列小,优先走哪条线
  66. //统计包装线队列数量
  67. DataTable dt = conn.ExecuteDatatable(@"
  68. SELECT
  69. L.PACKINGLINE,
  70. NVL( P.MAXORDERNO, 0 ) AS MAXORDERNO,
  71. NVL( P.MINORDERNO, 0 ) AS MINORDERNO,
  72. NVL( P.NUM, 0 ) AS NUM
  73. FROM
  74. (
  75. ( SELECT 1 AS PACKINGLINE FROM DUAL UNION SELECT 2 AS PACKINGLINE FROM DUAL ) L
  76. LEFT JOIN (
  77. SELECT
  78. F.PACKINGLINE,
  79. MAX( F.ORDERNO ) AS MAXORDERNO,
  80. MIN( F.ORDERNO ) AS MINORDERNO,
  81. COUNT( * ) AS NUM
  82. FROM
  83. TP_MST_PACKINGFORM F
  84. WHERE
  85. F.STATUS IN ( '-1', '0', '1' ) --统计 未确认-1、队列中0、执行中1 的包装单
  86. GROUP BY
  87. F.PACKINGLINE
  88. ) P ON L.PACKINGLINE = P.PACKINGLINE
  89. )
  90. ORDER BY
  91. NUM
  92. "
  93. );
  94. //取包装单最少的包装线,并记录包装单数量
  95. if (dt.Rows.Count > 0)
  96. {
  97. packingLine = dt.Rows[0]["PACKINGLINE"].ToString();
  98. packingNum = Convert.ToInt32(dt.Rows[0]["NUM"]);
  99. maxOrderNo = Convert.ToInt32(dt.Rows[0]["MAXORDERNO"]);
  100. minOrderNo = Convert.ToInt32(dt.Rows[0]["MINORDERNO"]);
  101. }
  102. Logger.Debug("自动生产包装单:线号 = " + packingLine.ToString());
  103. #endregion
  104. #region 读取最小最大队列阀值,确认是否自动生成包装单
  105. //小于最小值时执行自动生成包装单,直到等于最大值停止
  106. if (packingNum < PackingMinQueue)
  107. {
  108. //Logger.Debug((maxQueue - packingNum).ToString());
  109. //生成包装单
  110. for (int i = 0 ; i < PackingMaxQueue - packingNum ; i++)
  111. {
  112. if (result > 0)
  113. {
  114. result = CreatePacking(conn, packingLine, maxOrderNo + i + 1, toQianrun);
  115. Logger.Debug("自动生产包装单:"+ result.ToString());
  116. }
  117. }
  118. //最小化包装单执序号
  119. //MinOrderNo(conn, packingLine, minOrderNo);
  120. }
  121. else
  122. {
  123. Logger.Debug("自动生产包装单:不满足条件");
  124. }
  125. #endregion
  126. #region 执行成功提交,否则回滚
  127. if (result > 0)
  128. conn.Commit();
  129. else
  130. conn.Rollback();
  131. #endregion
  132. }
  133. }
  134. return result;
  135. }
  136. /// <summary>
  137. /// 按规则生成一个包装单
  138. /// </summary>
  139. /// <param name="conn">数据连接</param>
  140. /// <param name="packingLine">包装线</param>
  141. /// <param name="orderNo">执行顺序</param>
  142. /// <returns>1执行成功,-1执行失败</returns>
  143. public static int CreatePacking(IDataAccess conn, string packingLine,int orderNo,int toQianrun = 0)
  144. {
  145. //生成包装单号
  146. string packingFormCode = Guid.NewGuid().ToString();
  147. string packingFormName = "系统自动包装单";
  148. #region 乾润接口读成瓷库存,查找最多数量的产品,生成包装单(现阶段不验证包材充足)
  149. //string goodsCode = "H0175M#CT175PD2210B01";
  150. string goodsCode = "";
  151. int goodsCount = 0;
  152. //读取乾润接口读取
  153. string goodsStr = QianRunApi.GetStorageStatus(1);
  154. JObject json = JObject.Parse(goodsStr);
  155. if (json["success"].ToString().ToLower() == "true")
  156. {
  157. //直接取第一个产品
  158. int goodsIndex = 0;
  159. //智能的只能下1线,9开头的是智能
  160. //待处理========================
  161. //==============================
  162. //验证包材
  163. //待处理========================
  164. //==============================
  165. goodsCode = json["rows"][goodsIndex]["GoodsType"].ToString();
  166. goodsCount = Convert.ToInt32(json["rows"][goodsIndex]["GoodsCount"]);
  167. //测试数据===============================
  168. //goodsCode = "H0175L#CT175PD4210B01";
  169. //goodsCount = 36;
  170. //=======================================
  171. //从队列中(未确定)读取数据,不要与队列产品重复
  172. DataTable dtp = conn.ExecuteDatatable(@"
  173. SELECT G.GOODSCODE||'#'||G.MATERIALCODE AS GOODSCODE FROM TP_MST_PACKINGFORM P LEFT JOIN V_GOODS_MATERIALCODE G ON P.GOODSID = G.GOODSID AND P.MATERIALCODE = G.MATERIALCODE WHERE STATUS = -1
  174. ");
  175. if(dtp.Rows.Count>0)
  176. {
  177. string allgoods = ",";
  178. for (int i = 0; i < dtp.Rows.Count; i++) allgoods += dtp.Rows[i]["GOODSCODE"] + ",";
  179. int j = 0;
  180. while(allgoods.IndexOf("," +json["rows"][j]["GoodsType"].ToString() + ",")>=0) j++;
  181. if (j <= json["rows"].Count())
  182. {
  183. //记录不重复的产品
  184. goodsCode = json["rows"][j]["GoodsType"].ToString();
  185. goodsCount = Convert.ToInt32(json["rows"][j]["GoodsCount"]);
  186. }
  187. }
  188. //-----------------------------------------------------------
  189. Logger.Debug("自动生产包装单:产品型号 = " + goodsCode.ToString());
  190. }
  191. else
  192. {
  193. Logger.Debug("自动生产包装单:乾润接口库存数据读取失败!" + goodsStr);
  194. return -1;
  195. }
  196. #endregion
  197. //如果找到可出库的产品
  198. if (goodsCode != "")
  199. {
  200. #region 从包装单配置找默认的包装配置属性
  201. string packingBomId = "";
  202. string goodsSeries = "";
  203. string goodsId = "";
  204. string materialCode = goodsCode.Split('#')[1];
  205. DataTable bom = conn.ExecuteDatatable(@"
  206. SELECT
  207. p.PACKINGBOMID,
  208. g.GOODSID,
  209. p.MATNR,
  210. g.PLATELIMITNUM,
  211. DECODE( g.GOODSTYPEID, 18, 1, 19, 1, 2 ) AS GOODSSERIES
  212. FROM
  213. TP_MST_PACKINGBOM p
  214. -- xuwei modify 2021-05-21 用物料码直接关联,因为可能存在多个产品使用同一BOM配置
  215. --LEFT JOIN TP_MST_GOODS g ON g.GOODSID = p.GOODSID
  216. LEFT JOIN V_GOODS_MATERIALCODE g ON g.MATERIALCODE = p.MATNR
  217. WHERE
  218. p.VALUEFLAG = '1'
  219. AND p.DEFAULTFLAG = '1'
  220. AND g.GOODSCODE = @GOODSCODE@
  221. AND g.MATERIALCODE = @MATERIALCODE@
  222. ",
  223. new CDAParameter("GOODSCODE", goodsCode.Split('#')[0]),
  224. new CDAParameter("MATERIALCODE", goodsCode.Split('#')[1])
  225. );
  226. if (bom.Rows.Count > 0)
  227. {
  228. packingBomId = bom.Rows[0]["PACKINGBOMID"].ToString();
  229. goodsId = bom.Rows[0]["GOODSID"].ToString();
  230. goodsSeries = bom.Rows[0]["GOODSSERIES"].ToString();
  231. //不取整板数量,按乾润整道数量直接出
  232. //goodsCount = Convert.ToInt32(bom.Rows[0]["PLATELIMITNUM"]);
  233. Logger.Debug("自动生产包装单:包装配置 = " + packingBomId);
  234. }
  235. else
  236. {
  237. Logger.Debug("自动生产包装单:包装配置单未找到产品" + goodsCode);
  238. return -1;
  239. }
  240. #endregion
  241. #region 写入包装单
  242. int result = conn.ExecuteNonQuery(@"
  243. INSERT INTO TP_MST_PACKINGFORM (
  244. PACKINGFORMCODE,PACKINGFORMNAME,PACKINGLINE,PACKINGBOMID,
  245. ORDERNO,STATUS,PLATENUM,OUTNUM,GOODSID,MATERIALCODE,
  246. ACCOUNTID,CREATEUSERID,UPDATEUSERID
  247. ) VALUES (
  248. @PACKINGFORMCODE@,@PACKINGFORMNAME@,@PACKINGLINE@,@PACKINGBOMID@,
  249. @ORDERNO@,@STATUS@,@PLATENUM@,@OUTNUM@,@GOODSID@,@MATERIALCODE@,
  250. @ACCOUNTID@,@CREATEUSERID@,@UPDATEUSERID@
  251. )
  252. ",
  253. new CDAParameter("PACKINGFORMCODE", packingFormCode),
  254. new CDAParameter("PACKINGFORMNAME", packingFormName),
  255. new CDAParameter("PACKINGLINE", packingLine),
  256. new CDAParameter("PACKINGBOMID", packingBomId),
  257. new CDAParameter("ORDERNO", orderNo),
  258. new CDAParameter("STATUS", toQianrun), //自动建立的包装单,需要人工确认才能启动 2021-05-10 xuwei
  259. new CDAParameter("PLATENUM", goodsCount),
  260. new CDAParameter("OUTNUM", 0),
  261. new CDAParameter("GOODSID", goodsId),
  262. new CDAParameter("MATERIALCODE", materialCode),
  263. new CDAParameter("ACCOUNTID", 1),
  264. new CDAParameter("CREATEUSERID", 1),
  265. new CDAParameter("UPDATEUSERID", 1)
  266. );
  267. if (result <= 0)
  268. {
  269. Logger.Debug("自动生产包装单:包装单写入失败!");
  270. return -1;
  271. }
  272. else
  273. {
  274. Logger.Debug("自动生产包装单:包装单编码 = " + packingFormCode);
  275. }
  276. #endregion
  277. #region 乾润接口包装单写入,toQianrun==0时调接口,toQianrun==-1时不调用接口
  278. if (toQianrun == 0)
  279. {
  280. string data = QianRunApi.CreateOutStorageOrder(
  281. packingLine,
  282. packingFormCode,
  283. goodsCode,
  284. goodsSeries,
  285. goodsCount,
  286. orderNo,
  287. DateTime.Now.ToString(),
  288. 0,0,0
  289. );
  290. JObject jsonOrder = JObject.Parse(data);
  291. if (jsonOrder["Success"].ToString().ToLower() == "false")
  292. {
  293. Logger.Debug("自动生产包装单:乾润接口包装单创建失败!" + data);
  294. return -1;
  295. }
  296. }
  297. #endregion
  298. //写入自动包装单生成日志
  299. Logger.Debug("自动生产包装单" + (toQianrun == -1 ? "(未确认)" : "") + ":" + packingFormCode);
  300. return 1;
  301. }
  302. else
  303. {
  304. //写入自动包装单生成日志
  305. Logger.Debug("自动生产包装单:没有符合的产品");
  306. return 0;
  307. }
  308. }
  309. /// <summary>
  310. /// 更新出库数量 每次-1 只更新未完成的单子 并更新包装单状态
  311. /// </summary>
  312. /// <param name="conn">数据连接</param>
  313. /// <param name="packingFormCode">包装单号</param>
  314. /// <param name="outNum">outNum=0执行异常终止操作</param>
  315. /// <param name="outMessage">outNum=0时的异常中止原因</param>
  316. /// <returns></returns>
  317. public static int updatePackingOutNum(IDataAccess conn,string packingFormCode, string innumcount="",int outNum = 1, string outMesssage="")
  318. {
  319. if (outNum < 0) outNum = 0;
  320. int result = 0;
  321. //20240118 qq 新增参数innumcount ,不传时启用老方式,传值则用新方式,
  322. if (string.IsNullOrEmpty(innumcount))
  323. {
  324. //更新包装单数量
  325. result = conn.ExecuteNonQuery(@"
  326. UPDATE
  327. TP_MST_PACKINGFORM
  328. SET
  329. OUTNUM = OUTNUM + @OUTNUM@
  330. WHERE
  331. STATUS <> 2 --不是完成状态的单子
  332. AND STATUS >= 0 -- 已确认的单子,自动下单未确认的是-1,不能自动开启 2021-05-10
  333. AND PACKINGFORMCODE = @PACKINGFORMCODE@
  334. ",
  335. new CDAParameter("OUTNUM", outNum),
  336. new CDAParameter("PACKINGFORMCODE", packingFormCode)
  337. );
  338. }
  339. else
  340. {
  341. //更新包装单数量
  342. DataTable dt = conn.ExecuteDatatable(@"
  343. SELECT
  344. F.PLATENUM
  345. FROM
  346. TP_MST_PACKINGFORM F
  347. WHERE
  348. STATUS <> 2 --不是完成状态的单子
  349. AND STATUS >= 0 -- 已确认的单子,自动下单未确认的是-1,不能自动开启 2021-05-10
  350. AND PACKINGFORMCODE = @PACKINGFORMCODE@
  351. ",
  352. new CDAParameter("PACKINGFORMCODE", packingFormCode)
  353. );
  354. if (dt != null && dt.Rows.Count > 0)
  355. {
  356. if (Convert.ToInt32(dt.Rows[0]["PLATENUM"]) < Convert.ToInt32(innumcount))
  357. {
  358. innumcount = dt.Rows[0]["PLATENUM"].ToString();
  359. }
  360. }
  361. result = conn.ExecuteNonQuery(@"
  362. UPDATE
  363. TP_MST_PACKINGFORM
  364. SET
  365. OUTNUM = PLATENUM - @INNUMCOUNT@
  366. WHERE
  367. STATUS <> 2 --不是完成状态的单子
  368. AND STATUS >= 0 -- 已确认的单子,自动下单未确认的是-1,不能自动开启 2021-05-10
  369. AND PACKINGFORMCODE = @PACKINGFORMCODE@
  370. ",
  371. new CDAParameter("INNUMCOUNT", Convert.ToInt32(innumcount)),
  372. new CDAParameter("PACKINGFORMCODE", packingFormCode)
  373. );
  374. }
  375. //更新包装单状态
  376. updatePackingStatus(conn, packingFormCode, outNum, outMesssage);
  377. return result;
  378. }
  379. /// <summary>
  380. /// 计算并更新包装单状态
  381. /// </summary>
  382. /// <param name="conn">数据连接</param>
  383. /// <param name="packingFormCode">包装单号</param>
  384. /// <param name="outNum">outNum=0执行异常终止操作</param>
  385. /// <param name="outMessage">outNum=0时的异常中止原因</param>
  386. public static void updatePackingStatus(IDataAccess conn,string packingFormCode, int outNum = 1, string outMessage="")
  387. {
  388. //更新包装单为执行中状态,状态是0未开始执行的,有出库数量的,更新为执行中1
  389. conn.ExecuteNonQuery(@"
  390. UPDATE
  391. TP_MST_PACKINGFORM
  392. SET
  393. BEGINTIME = SYSDATE,
  394. STATUS = 1
  395. WHERE
  396. PACKINGFORMCODE = @PACKINGFORMCODE@
  397. AND STATUS = 0
  398. AND OUTNUM > 0
  399. ",
  400. new CDAParameter("PACKINGFORMCODE", packingFormCode)
  401. );
  402. //兼容新老系统,不传 outNum,默认为1 ,为正常完成,否则为异常终止
  403. if (outNum > 0)
  404. {
  405. //更新包装单为完成状态,状态是1执行中的,出库数量等于包装单数量的,更新为完成2
  406. conn.ExecuteNonQuery(@"
  407. UPDATE
  408. TP_MST_PACKINGFORM
  409. SET
  410. ENDTIME = SYSDATE,
  411. STATUS = 2
  412. WHERE
  413. PACKINGFORMCODE = @PACKINGFORMCODE@
  414. AND OUTNUM = PLATENUM
  415. AND STATUS = 1
  416. ",
  417. new CDAParameter("PACKINGFORMCODE", packingFormCode)
  418. );
  419. }
  420. //更新包装单为强制终止状态,状态是1执行中的,当出库数量等于0的,更新为异常终止3
  421. if(outNum <= 0)
  422. {
  423. if (outMessage == "") outMessage = "异常终止!";
  424. conn.ExecuteNonQuery(@"
  425. UPDATE
  426. TP_MST_PACKINGFORM
  427. SET
  428. ENDTIME = SYSDATE,
  429. STATUS = 3,
  430. REMARKS = @REMARKS@
  431. WHERE
  432. PACKINGFORMCODE = @PACKINGFORMCODE@
  433. AND OUTNUM <> PLATENUM
  434. AND STATUS = 1
  435. ",
  436. new CDAParameter("PACKINGFORMCODE", packingFormCode),
  437. new CDAParameter("REMARKS", outMessage)
  438. );
  439. }
  440. }
  441. /// <summary>
  442. /// 发送包装单给乾润
  443. /// </summary>
  444. /// <param name="packingFormCode">包装单号</param>
  445. /// <returns></returns>
  446. public static int sendToQianrun(string packingFormCode)
  447. {
  448. using (IDataAccess conn = DataAccess.Create())
  449. {
  450. conn.BeginTransaction();
  451. //写入包装单状态 变更状态为队列中
  452. int result = conn.ExecuteNonQuery(@"
  453. UPDATE TP_MST_PACKINGFORM
  454. SET
  455. STATUS = 0
  456. WHERE
  457. PACKINGFORMCODE = @PACKINGFORMCODE@
  458. ",
  459. new CDAParameter("PACKINGFORMCODE", packingFormCode)
  460. );
  461. if (result > 0)
  462. {
  463. //读取包装单必要的参数
  464. DataTable dt = conn.ExecuteDatatable(@"
  465. SELECT
  466. P.PACKINGLINE,
  467. P.PACKINGFORMCODE,
  468. G.GOODSCODE,
  469. G.MATERIALCODE,
  470. DECODE(G.GOODSTYPEID, 18, 1, 19, 1, 2) AS GOODSSERIES,
  471. P.PLATENUM AS GOODSCOUNT,
  472. P.ORDERNO
  473. FROM
  474. TP_MST_PACKINGFORM P
  475. --xuwei modify 2021-05-28
  476. --LEFT JOIN TP_MST_GOODS G ON P.GOODSID = G.GOODSID
  477. LEFT JOIN V_GOODS_MATERIALCODE G ON P.GOODSID = G.GOODSID AND P.MATERIALCODE = G.MATERIALCODE
  478. WHERE
  479. P.PACKINGFORMCODE = @PACKINGFORMCODE@
  480. ",
  481. new CDAParameter("PACKINGFORMCODE", packingFormCode)
  482. );
  483. string packingLine = dt.Rows[0]["PACKINGLINE"].ToString();
  484. string goodsCode = dt.Rows[0]["GOODSCODE"].ToString() + "#" + dt.Rows[0]["MATERIALCODE"].ToString();
  485. string goodsSeries = dt.Rows[0]["GOODSSERIES"].ToString();
  486. int goodsCount = Convert.ToInt32(dt.Rows[0]["GOODSCOUNT"]);
  487. int orderNo = Convert.ToInt32(dt.Rows[0]["ORDERNO"]);
  488. //调用乾润接口,发送包装单数据
  489. string data = QianRunApi.CreateOutStorageOrder(
  490. packingLine,
  491. packingFormCode,
  492. goodsCode,
  493. goodsSeries,
  494. goodsCount,
  495. orderNo,
  496. DateTime.Now.ToString(), 0, 0, 0
  497. );
  498. JObject jsonOrder = JObject.Parse(data);
  499. if (jsonOrder["success"].ToString().ToLower() == "false")
  500. {
  501. conn.Rollback();
  502. Logger.Debug("自动生产包装单:发送包装单,乾润接口包装单创建失败!" + data);
  503. return -1;
  504. }
  505. else
  506. {
  507. conn.Commit();
  508. Logger.Debug("自动生产包装单:发送包装单,乾润接口包装单创建成功!" + packingFormCode);
  509. return 1;
  510. }
  511. }
  512. else
  513. {
  514. conn.Rollback();
  515. Logger.Debug("自动生产包装单:发送包装单,没找到包装单 = " + packingFormCode);
  516. return -1;
  517. }
  518. }
  519. }
  520. /// <summary>
  521. /// 最小化执行顺序号
  522. /// </summary>
  523. /// <param name="conn"></param>
  524. /// <param name="minOrderNo"></param>
  525. /// <param name="packingLine"></param>
  526. private static void MinOrderNo(IDataAccess conn, string packingLine, int minOrderNo)
  527. {
  528. int result = conn.ExecuteNonQuery(@"
  529. UPDATE TP_MST_PACKINGFORM
  530. SET
  531. ORDERNO = ORDERNO - @MINORDERNO@
  532. WHERE
  533. VALUEFLAG = '1'
  534. AND STATUS IN ('0','1') --统计未开始和执行中的包装单
  535. AND PACKINGLINE = @PACKINGLINE@
  536. ",
  537. new CDAParameter("MINORDERNO", minOrderNo),
  538. new CDAParameter("PACKINGLINE", packingLine)
  539. );
  540. }
  541. }