stockbill.java 71 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206
  1. package restcontroller.webmanage.sale.stockbill;
  2. import beans.accountbalance.Accountbalance;
  3. import beans.accountbalance.CashbillEntity;
  4. import beans.data.BatchDeleteErr;
  5. import beans.datacontrllog.DataContrlLog;
  6. import beans.parameter.Parameter;
  7. import beans.report.Report;
  8. import beans.stockbill.Stockbill;
  9. import com.alibaba.fastjson2.JSONArray;
  10. import com.alibaba.fastjson2.JSONObject;
  11. import common.Controller;
  12. import common.YosException;
  13. import common.annotation.API;
  14. import common.annotation.CACHEING;
  15. import common.annotation.CACHEING_CLEAN;
  16. import common.data.*;
  17. import org.apache.commons.lang.StringUtils;
  18. import restcontroller.R;
  19. import restcontroller.webmanage.sale.order.Order;
  20. import restcontroller.webmanage.sale.order.OrderItems;
  21. import restcontroller.webmanage.sale.sendrepair.sendrepair;
  22. import restcontroller.webmanage.sale.sendrepair.sendrepair_pj;
  23. import java.math.BigDecimal;
  24. import java.util.ArrayList;
  25. import java.util.HashMap;
  26. /**
  27. * 出入库单
  28. */
  29. @API(title = "出入库单")
  30. public class stockbill extends Controller {
  31. /**
  32. * 构造函数
  33. *
  34. * @param content
  35. */
  36. public stockbill(JSONObject content) throws YosException {
  37. super(content);
  38. }
  39. @API(title = "新增销售出库单", apiversion = R.ID2025043010105603.v1.class)
  40. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
  41. public String insertormodify_stockbill() throws YosException {
  42. ArrayList<String> sqlList = new ArrayList<>();
  43. // 表名
  44. String tableName = "st_stockbill";
  45. Long st_stockbillid = content.getLong("st_stockbillid");
  46. Long sys_enterpriseid = content.getLong("sys_enterpriseid");
  47. Rows contactrows = dbConnect.runSqlQuery("select * from sys_enterprise_contacts where sys_enterpriseid=" + sys_enterpriseid + " and ifnull(deleted,0)=0");
  48. Long rec_contactsid = content.getLongValue("rec_contactsid");
  49. if (contactrows.isNotEmpty()) {
  50. rec_contactsid = contactrows.get(0).getLong("contactsid");
  51. }
  52. Long departmentid = content.getLongValue("departmentid");
  53. String type = content.getStringValue("type");
  54. long stockid = content.getLongValue("stockid");
  55. String typemx = content.getStringValue("typemx");
  56. String remarks = content.getStringValue("remarks");
  57. String billdate = content.getStringValue("billdate");
  58. String outplace = content.getStringValue("outplace");
  59. String delivery = content.getStringValue("delivery");
  60. Rows invoicerows = dbConnect.runSqlQuery("select * from sys_enterprise_finance where sys_enterpriseid=" + sys_enterpriseid + " order by isdefault desc");
  61. String invoice_enterprisename = content.getStringValue("invoice_enterprisename");
  62. String invoice_address = content.getStringValue("invoice_address");
  63. String invoice_taxno = content.getStringValue("invoice_taxno");
  64. if (invoicerows.isNotEmpty()) {
  65. invoice_enterprisename = invoicerows.get(0).getString("enterprisename");
  66. invoice_address = invoicerows.get(0).getString("address");
  67. invoice_taxno = invoicerows.get(0).getString("taxno");
  68. }
  69. String tracknumber = content.getStringValue("tracknumber");
  70. boolean isconfirm = content.getBooleanValue("isconfirm");
  71. if (st_stockbillid <= 0) {
  72. st_stockbillid = createTableID(tableName);
  73. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
  74. insertSQL.setUniqueid(st_stockbillid);
  75. insertSQL.setSiteid(siteid);
  76. insertSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  77. insertSQL.setValue("rec_contactsid", rec_contactsid);
  78. insertSQL.setValue("departmentid", departmentid);
  79. insertSQL.setValue("stockid", stockid);
  80. insertSQL.setValue("type", type);
  81. insertSQL.setValue("typemx", typemx);
  82. insertSQL.setValue("sa_supplierid", content.getLongValue("sa_supplierid"));
  83. insertSQL.setValue("rb", content.getString("rb"));
  84. insertSQL.setValue("remarks", remarks);
  85. if (StringUtils.isBlank(billdate)) {
  86. insertSQL.setDateValue("billdate");
  87. } else {
  88. insertSQL.setValue("billdate", billdate);
  89. }
  90. if (type.equals("销售出库")) {
  91. insertSQL.setValue("billno", createBillCode("stockbill"));
  92. } else if (type.equals("其他出库单")) {
  93. insertSQL.setValue("billno", createBillCode("STOCKBILL1"));
  94. } else if (type.equals("其他入库单")) {
  95. insertSQL.setValue("billno", createBillCode("STOCKBILL2"));
  96. } else {
  97. insertSQL.setValue("billno", createBillCode("stockbill"));
  98. }
  99. insertSQL.setValue("outplace", outplace);
  100. insertSQL.setValue("delivery", delivery);
  101. insertSQL.setValue("invoice_enterprisename", invoice_enterprisename);
  102. insertSQL.setValue("invoice_address", invoice_address);
  103. insertSQL.setValue("invoice_taxno", invoice_taxno);
  104. insertSQL.setValue("tracknumber", tracknumber);
  105. insertSQL.setValue("isconfirm", isconfirm);
  106. insertSQL.setValue("period", content.getStringValue("period"));
  107. insertSQL.setValue("createby", username);
  108. insertSQL.setDateValue("createdate");
  109. insertSQL.setValue("changeby", username);
  110. insertSQL.setDateValue("changedate");
  111. insertSQL.setValue("status", "新建");
  112. insertSQL.setValue("payamount", 0);
  113. insertSQL.setValue("paydiscountamount", 0);
  114. sqlList.add(insertSQL.getSQL());
  115. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新增", "销售出库单新增成功").getSQL());
  116. } else {
  117. Rows rows = dbConnect.runSqlQuery(
  118. "SELECT status,sys_enterpriseid from st_stockbill WHERE st_stockbillid = "
  119. + st_stockbillid);
  120. if (rows.isNotEmpty()) {
  121. if (rows.get(0).getString("status").equals("新建")) {
  122. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, tableName);
  123. updateSQL.setUniqueid(st_stockbillid);
  124. updateSQL.setSiteid(siteid);
  125. updateSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  126. updateSQL.setValue("rec_contactsid", rec_contactsid);
  127. updateSQL.setValue("departmentid", departmentid);
  128. updateSQL.setValue("stockid", stockid);
  129. updateSQL.setValue("remarks", remarks);
  130. updateSQL.setValue("rb", content.getString("rb"));
  131. updateSQL.setValue("typemx", typemx);
  132. updateSQL.setValue("billdate", billdate);
  133. updateSQL.setValue("outplace", outplace);
  134. updateSQL.setValue("delivery", delivery);
  135. updateSQL.setValue("invoice_enterprisename", content.getStringValue("invoice_enterprisename"));
  136. updateSQL.setValue("invoice_address", content.getStringValue("invoice_address"));
  137. updateSQL.setValue("invoice_taxno", content.getStringValue("invoice_taxno"));
  138. updateSQL.setValue("tracknumber", tracknumber);
  139. updateSQL.setValue("isconfirm", isconfirm);
  140. updateSQL.setValue("payamount", content.getBigDecimal("payamount"));
  141. updateSQL.setValue("paydiscountamount", content.getBigDecimal("paydiscountamount"));
  142. updateSQL.setValue("period", content.getStringValue("period"));
  143. updateSQL.setValue("changeby", username);
  144. updateSQL.setDateValue("changedate");
  145. sqlList.add(updateSQL.getSQL());
  146. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "更新", "销售出库单更新成功").getSQL());
  147. } else {
  148. return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
  149. }
  150. } else {
  151. return getErrReturnObject().setErrMsg("该销售出库单不存在").toString();
  152. }
  153. }
  154. dbConnect.runSqlUpdate(sqlList);
  155. content.put("st_stockbillid", st_stockbillid);
  156. return queryStockbillMain();
  157. }
  158. @API(title = "单据日期调整", apiversion = R.ID2025102215133403.v1.class)
  159. public String billdateChange() throws YosException {
  160. Long st_stockbillid = content.getLong("st_stockbillid");
  161. String billdate = content.getString("billdate");
  162. ArrayList<String> sqlList = new ArrayList<>();
  163. Rows rows = dbConnect.runSqlQuery(
  164. "SELECT status,period from st_stockbill WHERE st_stockbillid = "
  165. + st_stockbillid);
  166. if(rows.isNotEmpty()){
  167. if (rows.get(0).getString("status").equals("审核")) {
  168. RowsMap rowsMap =dbConnect.runSqlQuery("select CONCAT(year, '-',LPAD(month, 2, '0')) period,isclose from st_period").toRowsMap("period");
  169. if (rowsMap.containsKey(rows.get(0).getString("period"))) {
  170. if(rowsMap.get(rows.get(0).getString("period")).toRowsMap("isclose").containsKey("1")){
  171. return getErrReturnObject().setErrMsg("原单据会计期间已关闭,不可调整").toString();
  172. }
  173. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "更新", "单据日期【"+billdate+"】调整成功").getSQL());
  174. }else{
  175. return getErrReturnObject().setErrMsg("原单据会计期间未生成,不可调整").toString();
  176. }
  177. }else{
  178. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "更新", "单据日期【"+billdate+"】调整成功").getSQL());
  179. }
  180. sqlList.add("update st_stockbill set billdate='"+billdate+"' where st_stockbillid="+st_stockbillid);
  181. } else {
  182. return getErrReturnObject().setErrMsg("该出入库单不存在").toString();
  183. }
  184. dbConnect.runSqlUpdate(sqlList);
  185. return getSucReturnObject().toString();
  186. }
  187. @API(title = "出入库单详情", apiversion = R.ID20230719153803.v1.class)
  188. @CACHEING
  189. public String queryStockbillMain() throws YosException {
  190. Long st_stockbillid = content.getLong("st_stockbillid");
  191. SQLFactory sqlFactory = new SQLFactory(this, "出入库单详情");
  192. sqlFactory.addParameter("st_stockbillid", st_stockbillid);
  193. sqlFactory.addParameter("siteid", siteid);
  194. Rows rows = dbConnect.runSqlQuery(sqlFactory);
  195. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  196. Rows rowsdetail = dbConnect.runSqlQuery("select amount from st_stockbill_items where st_stockbillid=" + st_stockbillid);
  197. row.put("receivableamount", rowsdetail.sum("amount"));
  198. Rows accountbalancerows = dbConnect.runSqlQuery("select * from sa_accountbalance t1 inner join sa_accountclass t2 on t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + row.getLong("sys_enterpriseid"));
  199. if(accountbalancerows.isNotEmpty()){
  200. row.put("discountamount_xjzh", accountbalancerows.get(0).getBigDecimal("discountamount"));
  201. }else{
  202. row.put("discountamount_xjzh", 0);
  203. }
  204. return getSucReturnObject().setData(row).toString();
  205. }
  206. @API(title = "查询出入库单列表", apiversion = R.ID20230719153903.v1.class)
  207. @CACHEING
  208. public String queryStockbillList() throws YosException {
  209. ArrayList<String> billtypes = new ArrayList<>();
  210. StringBuffer where = new StringBuffer(" 1=1 ");
  211. if (content.containsKey("where")) {
  212. JSONObject whereObject = content.getJSONObject("where");
  213. if (whereObject.containsKey("type") && !"".equals(whereObject.getString("type"))) {
  214. JSONArray jsonArray = whereObject.getJSONArray("type");
  215. billtypes = (ArrayList<String>) jsonArray.toJavaList(String.class);
  216. }
  217. if (whereObject.containsKey("typemx") && !"".equals(whereObject.getString("typemx"))) {
  218. where.append(" and t1.typemx ='").append(whereObject.getString("typemx")).append("' ");
  219. }
  220. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  221. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  222. }
  223. if (whereObject.containsKey("rb") && !"".equals(whereObject.getString("rb"))) {
  224. where.append(" and t1.rb ='").append(whereObject.getString("rb")).append("' ");
  225. }
  226. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  227. where.append(" and t1.billdate >='").append(whereObject.getString("begindate")).append("' ");
  228. }
  229. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  230. where.append(" and t1.billdate <='").append(whereObject.getString("enddate")).append("' ");
  231. }
  232. if (whereObject.containsKey("remarks") && !"".equals(whereObject.getString("remarks"))) {
  233. where.append(" and t1.remarks like'%").append(whereObject.getString("remarks")).append("%' ");
  234. }
  235. if (whereObject.containsKey("dateinterval") && !"".equals(whereObject.getString("dateinterval"))) {
  236. if (whereObject.getString("dateinterval").equals("past30days")) {
  237. where.append(" and t1.billdate >=DATE_SUB(CURDATE(), INTERVAL 30 DAY)");
  238. } else if (whereObject.getString("dateinterval").equals("past15days")) {
  239. where.append(" and t1.billdate >=DATE_SUB(CURDATE(), INTERVAL 15 DAY)");
  240. } else if (whereObject.getString("dateinterval").equals("today")) {
  241. where.append(" and t1.billdate >=CURDATE()");
  242. }
  243. }
  244. if (whereObject.containsKey("checknoprint") && !"".equals(whereObject.getString("checknoprint"))) {
  245. if (whereObject.getBooleanValue("checknoprint")) {
  246. where.append(" and t1.status ='审核' and isreport=0");
  247. }
  248. }
  249. if (whereObject.containsKey("nowaybillgenerated") && !"".equals(whereObject.getString("nowaybillgenerated"))) {
  250. if (whereObject.getBooleanValue("checknoprint")) {
  251. where.append(" and t1.isreceiver=0 and ifnull(txlogisticid,'')='' ");
  252. }
  253. }
  254. if (whereObject.containsKey("paynocheck") && !"".equals(whereObject.getString("paynocheck"))) {
  255. where.append(" and t1.status ='新建' and delivery='到付'");
  256. }
  257. }
  258. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "*").setTableAlias("t1");
  259. if (billtypes.contains("销售出库") || billtypes.contains("返修入库") || billtypes.contains("返修出库")) {
  260. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid",
  261. "enterprisename", "abbreviation");
  262. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid",
  263. "agentnum");
  264. }
  265. if (billtypes.contains("销售出库")) {
  266. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_contacts", "t4", "t1.rec_contactsid=t4.contactsid and t1.siteid = t4.siteid");
  267. querySQL.addJoinTable(JOINTYPE.left, "sa_accountbalance", "t5", "t5.sys_enterpriseid=t1.sys_enterpriseid and t1.siteid = t5.siteid and t5.sa_accountclassid =(select t1.sa_accountclassid from sa_accountclass t1 where t1.siteid='" + siteid + "' and t1.accountname='现金账户')",
  268. "discountamount");
  269. querySQL.addQueryFields("recname", "t4.name");
  270. querySQL.addQueryFields("recphonenumber", "t4.phonenumber");
  271. querySQL.addQueryFields("recaddress", "t4.address");
  272. }
  273. querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t6", "t1.departmentid=t6.departmentid and t1.siteid = t6.siteid",
  274. "depno", "depname");
  275. if (billtypes.contains("其他入库")) {
  276. querySQL.addJoinTable(JOINTYPE.left, "sa_supplier", "t7", "t1.sa_supplierid=t7.sa_supplierid and t1.siteid = t7.siteid",
  277. "suppno", "suppname", "suppshortname");
  278. }
  279. querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t8", "t1.stockid=t8.stockid and t1.siteid = t8.siteid",
  280. "stockname");
  281. if (billtypes.contains("其他入库") || billtypes.contains("其他出库")) {
  282. querySQL.addJoinTable(JOINTYPE.left, "st_dbstockbill", "t9", "t1.sourceid=t9.st_dbstockbillid and t1.siteid = t9.siteid and t1.sourceobject='st_dbstockbill'");
  283. querySQL.addQueryFields("dbbillno", "t9.billno");
  284. }
  285. if (billtypes.contains("返修出库")) {
  286. querySQL.addJoinTable(JOINTYPE.left, "sa_sendrepair", "t10", "t10.sourceid=t1.st_stockbillid and t10.siteid = t1.siteid and t10.sourcetable='st_stockbill'","instockdate");
  287. }
  288. querySQL.setWhere("t1.siteid", siteid);
  289. querySQL.setWhere("t1.type", billtypes);
  290. querySQL.setWhere(where);
  291. querySQL.setCondition("t1.billno", "t1.outplace", "t3.agentnum", " t2.enterprisename", "t6.depname");
  292. querySQL.setPage(pageSize, pageNumber);
  293. Rows rows = querySQL.query();
  294. ArrayList<Long> ids = rows.toArrayList("st_stockbillid", new ArrayList<>());
  295. HashMap<Long, Integer> reportMap =Report.getViewCount(this,"st_stockbill",ids);
  296. for(Row row :rows){
  297. if(reportMap.containsKey(row.getLong("st_stockbillid"))){
  298. row.put("printcount",reportMap.get(row.getLong("st_stockbillid")));
  299. }
  300. }
  301. if(billtypes.contains("返修出库")){
  302. QuerySQL querySQLDatail = SQLFactory.createQuerySQL(this, "st_stockbill_items", "st_stockbillid").setTableAlias("t1");
  303. querySQLDatail.addJoinTable(JOINTYPE.left, "st_stockbill_items_sku", "t2", "t1.st_stockbill_itemsid=t2.st_stockbill_itemsid and t1.siteid = t2.siteid ","sku");
  304. querySQLDatail.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid=t1.itemid and t3.siteid = t1.siteid ","itemno","itemname","spec","model");
  305. querySQLDatail.setWhere("t1.st_stockbillid",ids);
  306. Rows rowsdatail = querySQLDatail.query();
  307. RowsMap rowsdatailMap = rowsdatail.toRowsMap("st_stockbillid");
  308. for(Row row :rows){
  309. if(rowsdatailMap.containsKey(row.getString("st_stockbillid"))){
  310. row.put("itemskus",rowsdatailMap.get(row.getString("st_stockbillid")));
  311. }
  312. }
  313. }
  314. return getSucReturnObject().setData(rows).toString();
  315. }
  316. @API(title = "删除", apiversion = R.ID20230719154003.v1.class)
  317. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
  318. public String delete() throws YosException {
  319. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  320. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, st_stockbillids.size());
  321. for (Object o : st_stockbillids) {
  322. long st_stockbillid = Long.parseLong(o.toString());
  323. Rows RowsStatus = dbConnect.runSqlQuery("select st_stockbillid,status from st_stockbill where siteid='"
  324. + siteid + "' and st_stockbillid='" + st_stockbillid + "'");
  325. if (RowsStatus.isNotEmpty()) {
  326. if (!RowsStatus.get(0).getString("status").equals("新建")) {
  327. batchDeleteErr.addErr(st_stockbillid, "非新建状态的出入库单无法删除");
  328. continue;
  329. }
  330. }
  331. dbConnect.runSqlUpdate(
  332. "delete from st_stockbill where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
  333. dbConnect.runSqlUpdate(
  334. "delete from st_stockbill_items where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
  335. dbConnect.runSqlUpdate(
  336. "delete from st_stockbill_items_sku where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
  337. }
  338. return batchDeleteErr.getReturnObject().toString();
  339. }
  340. @API(title = "审核", apiversion = R.ID20230719154103.v1.class)
  341. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, Order.class, OrderItems.class, restcontroller.sale.stockbill.stockbill.class})
  342. public String check() throws YosException {
  343. Long st_stockbillid = content.getLong("st_stockbillid");
  344. Stockbill.check(this, st_stockbillid, true);
  345. return getSucReturnObject().toString();
  346. }
  347. @API(title = "反审核", apiversion = R.ID20230719154203.v1.class)
  348. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, Order.class, OrderItems.class, stockbill.class, restcontroller.sale.stockbill.stockbill.class})
  349. public String uncheck() throws YosException {
  350. Long st_stockbillid = content.getLong("st_stockbillid");
  351. Stockbill.check(this, st_stockbillid, false);
  352. return getSucReturnObject().toString();
  353. }
  354. @API(title = "生成送修单", apiversion = R.ID2025070415073603.v1.class)
  355. @CACHEING_CLEAN(apiClass = {sendrepair.class, sendrepair_pj.class})
  356. public String sendrepair() throws YosException {
  357. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  358. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "st_stockbillid", "status", "type", "typemx", "remarks", "sys_enterpriseid", "isrepair");
  359. querySQL.setTableAlias("t1");
  360. querySQL.setSiteid(siteid);
  361. querySQL.setWhere("t1.st_stockbillid", st_stockbillids.toJavaList(Long.class));
  362. Rows rows = querySQL.query();
  363. QuerySQL querySQLDetail = SQLFactory.createQuerySQL(this, "st_stockbill_items", "*");
  364. querySQLDetail.setTableAlias("t1");
  365. querySQLDetail.addJoinTable(JOINTYPE.left, "sa_aftersalesmag_items", "t2", "t1.sourceobject ='sa_aftersalesmag_items' and t1.sourceid=t2.sa_aftersalesmag_itemsid AND t1.siteid = t2.siteid", "name", "phonenumber", "address", "stockdate", "enddate", "remarks", "duty", "demand", "reason");
  366. querySQLDetail.addQueryFields("sku", "t2.machinecode");
  367. querySQLDetail.setSiteid(siteid);
  368. querySQLDetail.setWhere("t1.st_stockbillid", st_stockbillids.toJavaList(Long.class));
  369. RowsMap rowsMapDetail = querySQLDetail.query().toRowsMap("st_stockbillid");
  370. ArrayList<String> sqlList = new ArrayList<>();
  371. for (Row row : rows) {
  372. if (!row.getString("type").equals("返修入库")) {
  373. return getErrReturnObject().setErrMsg("非返修入库单无法生成送修单").toString();
  374. }
  375. if (row.getBoolean("isrepair")) {
  376. return getErrReturnObject().setErrMsg("已生成送修单,无法再次生成").toString();
  377. }
  378. if (!row.getString("type").equals("返修入库")) {
  379. return getErrReturnObject().setErrMsg("非返修入库单无法生成送修单").toString();
  380. }
  381. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_sendrepair");
  382. long sa_sendrepairid = createTableID("sa_sendrepair");
  383. insertSQL.setUniqueid(sa_sendrepairid);
  384. insertSQL.setSiteid(siteid);
  385. insertSQL.setValue("billno", createBillCode("sendrepair"));
  386. insertSQL.setValue("remarks", row.getString("remarks"));
  387. insertSQL.setValue("sys_enterpriseid", row.getLong("sys_enterpriseid"));
  388. insertSQL.setValue("sourcetable", "st_stockbill");
  389. insertSQL.setValue("sourceid", row.getLong("st_stockbillid"));
  390. insertSQL.setValue("status", "新建");
  391. insertSQL.setValue("createby", username);
  392. insertSQL.setDateValue("createdate");
  393. insertSQL.setDateValue("billdate");
  394. sqlList.add(insertSQL.getSQL());
  395. for (Row rowdetail : rowsMapDetail.get(row.getString("st_stockbillid"))) {
  396. insertSQL = SQLFactory.createInsertSQL(this, "sa_sendrepair_detail");
  397. long sa_sendrepair_detailid = createTableID("sa_sendrepair_detail");
  398. insertSQL.setUniqueid(sa_sendrepair_detailid);
  399. insertSQL.setSiteid(siteid);
  400. insertSQL.setValue("sa_sendrepairid", sa_sendrepairid);
  401. insertSQL.setValue("name", rowdetail.getString("name"));
  402. insertSQL.setValue("phonenumber", rowdetail.getString("phonenumber"));
  403. insertSQL.setValue("address", rowdetail.getString("address"));
  404. insertSQL.setValue("stockdate", StringUtils.isBlank(rowdetail.getString("stockdate")) ? "null" : rowdetail.getString("stockdate"));
  405. insertSQL.setValue("enddate", StringUtils.isBlank(rowdetail.getString("enddate")) ? "null" : rowdetail.getString("enddate"));
  406. insertSQL.setValue("remarks", rowdetail.getString("remarks"));
  407. insertSQL.setValue("duty", rowdetail.getString("duty"));
  408. insertSQL.setValue("demand", rowdetail.getString("demand"));
  409. insertSQL.setValue("reason", rowdetail.getString("reason"));
  410. insertSQL.setValue("qty", rowdetail.getBigDecimal("qty"));
  411. insertSQL.setValue("sku", rowdetail.getString("sku"));
  412. insertSQL.setValue("itemid", rowdetail.getString("itemid"));
  413. sqlList.add(insertSQL.getSQL());
  414. sqlList.add("update st_stockbill_items set isrepair=1 where st_stockbill_itemsid=" + rowdetail.getLong("st_stockbill_itemsid"));
  415. }
  416. sqlList.add("update st_stockbill set isrepair=1 where st_stockbillid=" + row.getLong("st_stockbillid"));
  417. }
  418. dbConnect.runSqlUpdate(sqlList);
  419. return getSucReturnObject().toString();
  420. }
  421. public String xsckcheck(Long st_stockbillid, boolean isinstock) throws YosException {
  422. Rows rows = dbConnect.runSqlQuery("select * from st_stockbill where st_stockbillid ='"
  423. + st_stockbillid + "' and siteid='" + siteid + "'");
  424. Rows rowsdetail = dbConnect.runSqlQuery("select t1.*,t2.skucontrol from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_stockbillid ='"
  425. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  426. long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid");
  427. if (rows.isEmpty()) {
  428. return "该出入库单不存在";
  429. } else {
  430. if (!rows.get(0).getString("status").equals("新建")) {
  431. return "单号为:【" + rows.get(0).getString("billno") + "】的出入库单为非新建状态,无法审核";
  432. }
  433. }
  434. for (Row row : rowsdetail) {
  435. if (row.getBigDecimal("qty").compareTo(BigDecimal.ZERO) < 1) {
  436. return "表体数量不能小于0";
  437. }
  438. }
  439. if (rows.get(0).getBigDecimal("payamount").compareTo(BigDecimal.ZERO) <= 0) {
  440. return "扣款金额需大于0";
  441. }
  442. if (StringUtils.isBlank(rows.get(0).getString("outplace"))) {
  443. return "发货地不可为空";
  444. }
  445. if ((rows.get(0).getBigDecimal("payamount").add(rows.get(0).getBigDecimal("paydiscountamount"))).compareTo(rowsdetail.sum("amount")) != 0) {
  446. return "扣款金额与应扣金额不符,不能审核";
  447. }
  448. Rows accountbalancerows = dbConnect.runSqlQuery("select * from sa_accountbalance t1 inner join sa_accountclass t2 on t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
  449. if (accountbalancerows.isNotEmpty()) {
  450. BigDecimal discountamount = accountbalancerows.get(0).getBigDecimal("discountamount");
  451. if (rows.get(0).getBigDecimal("paydiscountamount").compareTo(discountamount) > 0) {
  452. return "优惠金额不能大于可用优惠金额";
  453. }
  454. } else {
  455. return "账户不存在";
  456. }
  457. ArrayList<String> sqlList = new ArrayList<>();
  458. // Rows stockRows= dbConnect.runSqlQuery("select * from st_stock where siteid='"+siteid+"'");
  459. // RowsMap stockRowsMap =stockRows.toRowsMap("itemid");
  460. String order_paymentnode = Parameter.getString(siteid, "order_paymentnode");
  461. if (rows.get(0).getBoolean("rb")) {
  462. if (rows.get(0).getString("type").equals("销售出库")) {
  463. if (order_paymentnode.equals("3")) {
  464. if (Accountbalance.judgeBalance(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), rowsdetail.sum("amount"))) {
  465. CashbillEntity entity = getCashbillEntity(rows.get(0).getBigDecimal("payamount"), rows.get(0).getBigDecimal("paydiscountamount"), st_stockbillid, "销售出库单审核", rows.get(0).getString("billno"), "由销售出库单" + rows.get(0).getString("billno") + "审核时生成");
  466. JSONObject createCashbillPay = Accountbalance.createCashbillPay(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
  467. sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  468. } else {
  469. return "账户余额不足,还差" + Accountbalance.InsufficientBalance(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), rowsdetail.sum("amount")) + "元!";
  470. }
  471. }
  472. Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from st_stockbill_items where st_stockbillid=" + st_stockbillid + ")");
  473. RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
  474. Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid from st_stockbill_items t1 where t1.st_stockbillid=" + st_stockbillid + " group by t1.sa_orderitemsid,t1.siteid");
  475. Rows rowsjudge = dbConnect.runSqlQuery("select * from (select sa_orderitemsid,sum(qty) qty from st_stockbill_items where st_stockbillid ='" + st_stockbillid + "' group by sa_orderitemsid) t1 inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid where t1.qty>t2.undeliqty");
  476. if (rowsjudge.isNotEmpty()) {
  477. return "存在商品已完全出库,无法审核";
  478. }
  479. for (Row row : rowsDispatchDetailGroup) {
  480. sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").subtract(row.getBigDecimal("qty")) + ",deliedqty=" + (row.getBigDecimal("qty").add(rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
  481. }
  482. for (Row row : rowsdetail) {
  483. if (row.getBoolean("skucontrol")) {
  484. sqlList.add("update st_stockbill_items set wmsuploadflag2=1 where st_stockbill_itemsid=" + row.getLong("st_stockbill_itemsid"));
  485. }
  486. }
  487. }
  488. // for(Row row :rowsdetail){
  489. // String itemid= row.getString("itemid");
  490. // long stockid=row.getLong("stockid");
  491. // if(stockRowsMap.containsKey(itemid)){
  492. // for(Row row1 :stockRowsMap.get(itemid)){
  493. // if(row1.getLong("stockid")==stockid){
  494. // sqlList.add("update st_stock set qty="+row1.getBigDecimal("qty").add(row.getBigDecimal("qty"))+" where stockid="+stockid);
  495. // }
  496. // }
  497. // }
  498. // // String batchno = row.getString("batchno");
  499. // }
  500. } else {
  501. // for(Row row :rowsdetail){
  502. // String itemid= row.getString("itemid");
  503. // long stockid=row.getLong("stockid");
  504. // if(stockRowsMap.containsKey(itemid)){
  505. // for(Row row1 :stockRowsMap.get(itemid)){
  506. // if(row1.getLong("stockid")==stockid){
  507. // sqlList.add("update st_stock set qty="+row1.getBigDecimal("qty").subtract(row.getBigDecimal("qty"))+" where stockid="+stockid);
  508. // }
  509. // }
  510. // }
  511. // // String batchno = row.getString("batchno");
  512. // }
  513. }
  514. // Rows stockbillitems = dbConnect.runSqlQuery("select t2.sa_orderid,sum(t2.price*t1.qty) amount from st_stockbill_items t1 inner join sa_orderitems t2 on t1.siteid=t2.siteid and t1.sa_orderitemsid=t2.sa_orderitemsid where t1.siteid='"+siteid+"'and t1.st_stockbillid="+st_stockbillid+" group by t2.sa_orderid");
  515. // Rows orderRows =dbConnect.runSqlQuery("select * from sa_order where sa_orderid in(select t2.sa_orderid from st_stockbill_items t1 inner join sa_orderitems t2 on t1.siteid=t2.siteid and t1.sa_orderitemsid=t2.sa_orderitemsid where t1.st_stockbillid='"+st_stockbillid+"')");
  516. // RowsMap orderRowsMap =orderRows.toRowsMap("sa_orderid");
  517. sqlList.addAll(updateAccountbalance_freez(st_stockbillid, isinstock));
  518. dbConnect.runSqlUpdate(sqlList);
  519. // Accountbalance.remindSend(this, sys_enterpriseid, sa_cashbillid);
  520. return "success";
  521. }
  522. public String unxsckcheck(Long st_stockbillid, boolean isinstock) throws YosException {
  523. Rows rows = dbConnect.runSqlQuery("select * from st_stockbill where st_stockbillid ='"
  524. + st_stockbillid + "' and siteid='" + siteid + "'");
  525. Rows rowsdetail = dbConnect.runSqlQuery("select t1.*,t2.skucontrol from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_stockbillid ='"
  526. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  527. long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid");
  528. if (rows.isEmpty()) {
  529. return "该出入库单不存在";
  530. } else {
  531. if (!rows.get(0).getString("status").equals("审核")) {
  532. return "单号为:【" + rows.get(0).getString("billno") + "】的出入库单为非审核状态,无法反审核";
  533. }
  534. }
  535. for (Row row : rowsdetail) {
  536. if (row.getBigDecimal("qty").compareTo(BigDecimal.ZERO) < 1) {
  537. return "表体数量不能小于0";
  538. }
  539. }
  540. if (rows.get(0).getBigDecimal("paydiscountamount").compareTo(BigDecimal.ZERO) < 0) {
  541. return "优惠金额不能小于0";
  542. }
  543. if (rows.get(0).getBigDecimal("payamount").compareTo(BigDecimal.ZERO) <= 0) {
  544. return "扣款金额需大于0";
  545. }
  546. if (StringUtils.isBlank(rows.get(0).getString("outplace"))) {
  547. return "发货地不可为空";
  548. }
  549. if ((rows.get(0).getBigDecimal("payamount").add(rows.get(0).getBigDecimal("paydiscountamount"))).compareTo(rowsdetail.sum("amount")) != 0) {
  550. return "扣款金额与应扣金额不符,不能反审核";
  551. }
  552. Rows accountbalancerows = dbConnect.runSqlQuery("select * from sa_accountbalance t1 inner join sa_accountclass t2 on t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid where t2.accountname='现金账户' and t1.sys_enterpriseid=" + sys_enterpriseid);
  553. if (accountbalancerows.isEmpty()) {
  554. return "账户不存在";
  555. }
  556. if (rows.get(0).getString("type").equals("销售出库") && rows.get(0).getBoolean("isreceiver")) {
  557. return "经销商已经确认收货,不可进行反审核";
  558. }
  559. ArrayList<String> sqlList = new ArrayList<>();
  560. // Rows stockRows= dbConnect.runSqlQuery("select * from st_stock where siteid='"+siteid+"'");
  561. // RowsMap stockRowsMap =stockRows.toRowsMap("itemid");
  562. String order_paymentnode = Parameter.getString(siteid, "order_paymentnode");
  563. if (rows.get(0).getBoolean("rb")) {
  564. if (rows.get(0).getString("type").equals("销售出库")) {
  565. if (order_paymentnode.equals("3")) {
  566. if (Accountbalance.judgeBalance(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), rowsdetail.sum("amount").negate())) {
  567. CashbillEntity entity = getCashbillEntity(rows.get(0).getBigDecimal("payamount").negate(), rows.get(0).getBigDecimal("paydiscountamount").negate(), st_stockbillid, "销售出库单反审核", rows.get(0).getString("billno"), "由销售出库单" + rows.get(0).getString("billno") + "反审核时生成");
  568. JSONObject createCashbillPay = Accountbalance.createCashbillPay(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
  569. sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  570. } else {
  571. return "账户余额不足,还差" + Accountbalance.InsufficientBalance(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), rowsdetail.sum("amount")) + "元!";
  572. }
  573. }
  574. Rows rowsOrderDetail = dbConnect.runSqlQuery("select t1.undeliqty,t1.deliedqty,t1.qty,t1.sa_orderitemsid from sa_orderitems t1 where t1.sa_orderitemsid in (select sa_orderitemsid from st_stockbill_items where st_stockbillid=" + st_stockbillid + ")");
  575. RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
  576. Rows rowsDispatchDetailGroup = dbConnect.runSqlQuery("select sum(t1.qty) qty,t1.sa_orderitemsid,t1.siteid from st_stockbill_items t1 where t1.st_stockbillid=" + st_stockbillid + " group by t1.sa_orderitemsid,t1.siteid");
  577. for (Row row : rowsDispatchDetailGroup) {
  578. sqlList.add("update sa_orderitems set undeliqty=" + rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("undeliqty").add(row.getBigDecimal("qty")) + ",deliedqty=" + (rowsMap.get(row.getLong("sa_orderitemsid")).get(0).getBigDecimal("deliedqty").subtract(row.getBigDecimal("qty"))) + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
  579. }
  580. for (Row row : rowsdetail) {
  581. if (row.getBoolean("skucontrol")) {
  582. sqlList.add("update st_stockbill_items set wmsuploadflag2=0 where st_stockbill_itemsid=" + row.getLong("st_stockbill_itemsid"));
  583. }
  584. }
  585. }
  586. // for(Row row :rowsdetail){
  587. // String itemid= row.getString("itemid");
  588. // long stockid=row.getLong("stockid");
  589. // if(stockRowsMap.containsKey(itemid)){
  590. // for(Row row1 :stockRowsMap.get(itemid)){
  591. // if(row1.getLong("stockid")==stockid){
  592. // sqlList.add("update st_stock set qty="+row1.getBigDecimal("qty").subtract(row.getBigDecimal("qty"))+" where stockid="+stockid);
  593. // }
  594. // }
  595. // }
  596. // // String batchno = row.getString("batchno");
  597. // }
  598. } else {
  599. // for(Row row :rowsdetail){
  600. // String itemid= row.getString("itemid");
  601. // long stockid=row.getLong("stockid");
  602. // if(stockRowsMap.containsKey(itemid)){
  603. // for(Row row1 :stockRowsMap.get(itemid)){
  604. // if(row1.getLong("stockid")==stockid){
  605. // sqlList.add("update st_stock set qty="+row1.getBigDecimal("qty").add(row.getBigDecimal("qty"))+" where stockid="+stockid);
  606. // }
  607. // }
  608. // }
  609. // // String batchno = row.getString("batchno");
  610. // }
  611. }
  612. // Rows stockbillitems = dbConnect.runSqlQuery("select t2.sa_orderid,sum(t2.price*t1.qty) amount from st_stockbill_items t1 inner join sa_orderitems t2 on t1.siteid=t2.siteid and t1.sa_orderitemsid=t2.sa_orderitemsid where t1.siteid='"+siteid+"'and t1.st_stockbillid="+st_stockbillid+" group by t2.sa_orderid");
  613. // Rows orderRows =dbConnect.runSqlQuery("select * from sa_order where sa_orderid in(select t2.sa_orderid from st_stockbill_items t1 inner join sa_orderitems t2 on t1.siteid=t2.siteid and t1.sa_orderitemsid=t2.sa_orderitemsid where t1.st_stockbillid='"+st_stockbillid+"')");
  614. // RowsMap orderRowsMap =orderRows.toRowsMap("sa_orderid");
  615. sqlList.addAll(updateAccountbalance_freez(st_stockbillid, isinstock));
  616. dbConnect.runSqlUpdate(sqlList);
  617. // Accountbalance.remindSend(this, sys_enterpriseid, sa_cashbillid);
  618. return "success";
  619. }
  620. @API(title = "仓库确认", apiversion = R.ID2025050709505703.v1.class)
  621. public String confirm() throws YosException {
  622. Long st_stockbillid = content.getLong("st_stockbillid");
  623. boolean isconfirm = content.getBooleanValue("isconfirm");
  624. Rows rows = dbConnect.runSqlQuery("select * from st_stockbill where st_stockbillid ='"
  625. + st_stockbillid + "' and siteid='" + siteid + "'");
  626. if (rows.isEmpty()) {
  627. return getErrReturnObject().setErrMsg("该出入库单不存在")
  628. .toString();
  629. } else {
  630. if (!rows.get(0).getString("status").equals("审核")) {
  631. return getErrReturnObject().setErrMsg("单号为:【" + rows.get(0).getString("billno") + "】的出入库单为非审核状态,无法进行仓库确认")
  632. .toString();
  633. }
  634. }
  635. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "st_stockbill");
  636. updateSQL.setUniqueid(st_stockbillid);
  637. updateSQL.setSiteid(siteid);
  638. updateSQL.setValue("isconfirm", isconfirm);
  639. updateSQL.setValue("changeby", username);
  640. updateSQL.setDateValue("changedate");
  641. dbConnect.runSqlUpdate(updateSQL.getSQL());
  642. return getSucReturnObject().toString();
  643. }
  644. @API(title = "红冲", apiversion = R.ID2025072409344603.v1.class)
  645. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
  646. public String hongc() throws YosException {
  647. long st_stockbillid = content.getLong("st_stockbillid");
  648. ArrayList<String> sqlList = new ArrayList<>();
  649. Rows rows = dbConnect.runSqlQuery("select t1.*,ifnull(t2.sa_sendrepairid,0) sa_sendrepairid from st_stockbill t1 left join sa_sendrepair t2 on t1.st_stockbillid=t2.sourceid and t1.siteid=t2.siteid and t2.sourcetable='st_stockbill' where t1.st_stockbillid ='"
  650. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  651. Rows rowsdetail = dbConnect.runSqlQuery("select t1.*,t2.skucontrol from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_stockbillid ='"
  652. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  653. if (rows.isEmpty()) {
  654. return getErrReturnObject().setErrMsg("该出入库单不存在")
  655. .toString();
  656. }
  657. if (!rows.get(0).getString("status").equals("审核")) {
  658. return getErrReturnObject().setErrMsg("非审核的出入库单无法红冲")
  659. .toString();
  660. }
  661. if (rows.get(0).getInteger("rb") == 0) {
  662. return getErrReturnObject().setErrMsg("只能红冲蓝字出入库单")
  663. .toString();
  664. }
  665. if (rows.get(0).getInteger("sa_sendrepairid") != 0) {
  666. return getErrReturnObject().setErrMsg("来源于送修单的出库单不能红冲")
  667. .toString();
  668. }
  669. st_stockbillid = createTableID("st_stockbill");
  670. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill");
  671. insertSQL.setUniqueid(st_stockbillid);
  672. insertSQL.setSiteid(siteid);
  673. insertSQL.setValue("sys_enterpriseid", rows.get(0).getLong("sys_enterpriseid"));
  674. insertSQL.setValue("rec_contactsid", rows.get(0).getLong("rec_contactsid"));
  675. insertSQL.setValue("departmentid", rows.get(0).getLong("departmentid"));
  676. insertSQL.setValue("stockid", rows.get(0).getLong("stockid"));
  677. insertSQL.setValue("type", rows.get(0).getString("type"));
  678. insertSQL.setValue("typemx", rows.get(0).getString("typemx"));
  679. insertSQL.setValue("sa_supplierid", rows.get(0).getLong("sa_supplierid"));
  680. insertSQL.setValue("rb", 0);
  681. insertSQL.setValue("remarks", rows.get(0).getString("remarks"));
  682. insertSQL.setValue("billdate", getDateTime_Str());
  683. if (rows.get(0).getString("type").equals("销售出库")) {
  684. insertSQL.setValue("billno", createBillCode("stockbill"));
  685. } else if (rows.get(0).getString("type").equals("其他出库")) {
  686. insertSQL.setValue("billno", createBillCode("STOCKBILL1"));
  687. } else if (rows.get(0).getString("type").equals("其他入库")) {
  688. insertSQL.setValue("billno", createBillCode("STOCKBILL2"));
  689. } else {
  690. insertSQL.setValue("billno", createBillCode("stockbill"));
  691. }
  692. insertSQL.setValue("outplace", rows.get(0).getString("outplace"));
  693. insertSQL.setValue("delivery", rows.get(0).getString("delivery"));
  694. insertSQL.setValue("invoice_enterprisename", rows.get(0).getString("invoice_enterprisename"));
  695. insertSQL.setValue("invoice_address", rows.get(0).getString("invoice_address"));
  696. insertSQL.setValue("invoice_taxno", rows.get(0).getString("invoice_taxno"));
  697. insertSQL.setValue("tracknumber", rows.get(0).getString("tracknumber"));
  698. insertSQL.setValue("isconfirm", rows.get(0).getString("isconfirm"));
  699. insertSQL.setValue("sourceobject", "st_stockbill");
  700. insertSQL.setValue("sourceid", rows.get(0).getLong("st_stockbillid"));
  701. insertSQL.setValue("period", rows.get(0).getString("period"));
  702. insertSQL.setValue("createby", username);
  703. insertSQL.setDateValue("createdate");
  704. insertSQL.setValue("changeby", username);
  705. insertSQL.setDateValue("changedate");
  706. insertSQL.setValue("status", "新建");
  707. insertSQL.setValue("payamount", 0);
  708. insertSQL.setValue("paydiscountamount", 0);
  709. sqlList.add(insertSQL.getSQL());
  710. int i = 0;
  711. for (Row row : rowsdetail) {
  712. InsertSQL insertDetailSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
  713. insertDetailSQL.setUniqueid(createTableID("st_stockbill_items"));
  714. insertDetailSQL.setSiteid(siteid);
  715. insertDetailSQL.setValue("rowno", i + 1);
  716. insertDetailSQL.setValue("st_stockbillid", st_stockbillid);
  717. insertDetailSQL.setValue("sa_orderitemsid", row.getLong("sa_orderitemsid"));
  718. insertDetailSQL.setValue("itemid", row.getString("itemid"));
  719. insertDetailSQL.setValue("sa_orderid", row.getString("sa_orderid"));
  720. insertDetailSQL.setValue("qty", row.getString("qty"));
  721. insertDetailSQL.setValue("discountrate", row.getBigDecimal("discountrate"));
  722. insertDetailSQL.setValue("sa_dispatch_itemsid", 0);
  723. insertDetailSQL.setValue("defaultprice", row.getBigDecimal("defaultprice"));
  724. insertDetailSQL.setValue("remarks", row.getString("remarks"));
  725. insertDetailSQL.setValue("sku", row.getString("sku"));
  726. insertDetailSQL.setValue("itemno", row.getString("itemno"));
  727. insertDetailSQL.setValue("itemname", row.getString("itemname"));
  728. insertDetailSQL.setValue("model", row.getString("model"));
  729. insertDetailSQL.setValue("price", row.getBigDecimal("price"));
  730. insertDetailSQL.setValue("stockid", row.getString("stockid"));
  731. insertDetailSQL.setValue("amount", row.getBigDecimal("qty").multiply(row.getBigDecimal("price")));
  732. insertDetailSQL.setValue("untaxedprice", row.getBigDecimal("price").divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP));
  733. insertDetailSQL.setValue("untaxedamount", row.getBigDecimal("qty").multiply(row.getBigDecimal("price").divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP)));
  734. insertDetailSQL.setValue("sourceid", row.getLong("st_stockbill_itemsid"));
  735. insertDetailSQL.setValue("sourceobject", "st_stockbill_items");
  736. sqlList.add(insertDetailSQL.getSQL());
  737. }
  738. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新增", "销售出库单新增成功").getSQL());
  739. dbConnect.runSqlUpdate(sqlList);
  740. content.put("st_stockbillid", st_stockbillid);
  741. return queryStockbillMain();
  742. }
  743. @API(title = "序列号收集", apiversion = R.ID2025101613261703.v1.class)
  744. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, stockbillitemssku.class})
  745. public String skuCollect() throws YosException {
  746. long stockid = content.getLong("stockid");
  747. String sku = content.getString("sku");
  748. long st_stockbillid = content.getLong("st_stockbillid");
  749. long st_stockbill_itemsid = content.getLong("st_stockbill_itemsid");
  750. ArrayList<String> sqllist = new ArrayList<>();
  751. String ss = "&&%$&&";
  752. if (sku.contains(",")) {
  753. ss = ",";
  754. } else if (sku.contains(",")) {
  755. ss = ",";
  756. } else if (sku.contains(" ")) {
  757. ss = " ";
  758. } else if (sku.contains(";")) {
  759. ss = ";";
  760. } else if (sku.contains(";")) {
  761. ss = ";";
  762. }
  763. String[] CODE = getDistinctArray(sku.split(ss));
  764. Rows rows = dbConnect.runSqlQuery("select t1.*,t2.stockno from st_stockbill t1 left join st_stock t2 on t1.stockid=t2.stockid where t1.st_stockbillid ='"
  765. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  766. Rows stockbillitemsrows = dbConnect.runSqlQuery("select t1.itemid,t1.qty,t2.skucontrol from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid where t1.st_stockbillid ='"
  767. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  768. Rows stockbillitemskurows = dbConnect.runSqlQuery("select * from st_stockbill_items_sku where st_stockbillid ='"
  769. + st_stockbillid + "' and siteid='" + siteid + "'");
  770. QuerySQL skuQuerySQL = SQLFactory.createQuerySQL(this, "sa_itemsku","*");
  771. skuQuerySQL.setTableAlias("t1");
  772. skuQuerySQL.addJoinTable(JOINTYPE.left, "plm_item", "t2", "t1.itemid=t2.itemid","itemno");
  773. skuQuerySQL.addJoinTable(JOINTYPE.left, "st_stock", "t3", "t1.stockid=t3.stockid","stockno");
  774. skuQuerySQL.setWhere("t1.siteid",siteid);
  775. skuQuerySQL.setWhere("t1.sku",CODE);
  776. Rows skuRows =skuQuerySQL.query();
  777. RowsMap skuRowsMap = skuRows.toRowsMap("sku");
  778. if (rows.isEmpty()) {
  779. return getErrReturnObject().setErrMsg("该出入库单不存在")
  780. .toString();
  781. }
  782. Row st_stockbill = rows.get(0);
  783. for (String FMACHINECODE : CODE) {
  784. if (FMACHINECODE.equals("")) {
  785. continue;
  786. }
  787. if (st_stockbill.getString("type").contains("入库")
  788. && FMACHINECODE.startsWith("66")) {
  789. return getErrReturnObject().setErrMsg("序列号" + FMACHINECODE
  790. + "不可在DRP手工入库").toString();
  791. }
  792. if (stockbillitemskurows.size() == stockbillitemsrows.toRowsMap("skucontrol").get("1").sum("qty").intValue()) {
  793. return getErrReturnObject().setErrMsg("序列号数量已经满足,不可继续添加").toString();
  794. }
  795. if (stockbillitemskurows.toRowsMap("sku").containsKey(FMACHINECODE)) {
  796. return getErrReturnObject().setErrMsg("序列号" + FMACHINECODE + "重复").toString();
  797. }
  798. if (!skuRowsMap.containsKey(FMACHINECODE)) {
  799. return getErrReturnObject().setErrMsg("序列号" + FMACHINECODE + "不存在").toString();
  800. } else {
  801. if (skuRowsMap.get(FMACHINECODE).get(0).getString("status").equals("报废")) {
  802. return getErrReturnObject().setErrMsg("该序列号已作废").toString();
  803. }
  804. long skustockid = skuRowsMap.get(FMACHINECODE).get(0).getLong(
  805. "stockid");
  806. long skuitemid = skuRowsMap.get(FMACHINECODE).get(0).getLong("itemid");
  807. String skuitemno = skuRowsMap.get(FMACHINECODE).get(0).getString("itemno");
  808. if (st_stockbill.getString("status").equals("审核")) {
  809. Rows stockbillskucheckRows = dbConnect.runSqlQuery("select * from stockbillskucheck where itemid=" + skuitemid + " and st_stockbillid=" + st_stockbillid);
  810. if (!stockbillskucheckRows.isEmpty()) {
  811. return getErrReturnObject().setErrMsg("商品编号" + skuitemno
  812. + stockbillskucheckRows.get(0)
  813. .getString("msg")).toString();
  814. }
  815. }
  816. if (skustockid != 0 && isinstock(st_stockbill.getString("type"), st_stockbill.getString("rb"), true)) {
  817. return getErrReturnObject().setErrMsg("该序列号不可进行入库操作").toString();
  818. }
  819. if (skustockid == 0 && !isinstock(st_stockbill.getString("type"), st_stockbill.getString("rb"), true)) {
  820. return getErrReturnObject().setErrMsg("该序列号不可进行出库操作").toString();
  821. }
  822. if (skustockid == 0 && stockid == 0) {
  823. return getErrReturnObject().setErrMsg("请指定仓库").toString();
  824. }
  825. if (!stockbillitemsrows.toRowsMap("skucontrol").get("1").toRowsMap("itemid").containsKey(
  826. skuRowsMap.get(FMACHINECODE).get(0).getString("itemid"))) {
  827. return getErrReturnObject().setErrMsg("序列号所属的商品编号没有包含在单据表体中").toString();
  828. }
  829. if (st_stockbill.getString("type").equals("生产入库")
  830. && skuRowsMap.get("FMACHINECODE").get(0).getString("mono")
  831. .equals("")) {
  832. return getErrReturnObject().setErrMsg("序列号非生产订单生成,不可添加").toString();
  833. }
  834. // if (st_stockbill.getString("type").equals("其他入库")
  835. // && st_stockbill.getString("stockno").equals("101")
  836. // && !getPaoSet(
  837. // "MACHINECODEUSEVIEW",
  838. // "MACHINECODEUSEVIEW",
  839. // "fmachinecode='" + FMACHINECODE
  840. // + "' and ftype like'%出库%'")
  841. // .isEmpty()) {
  842. // ((PaoSet) getThisPaoSet())
  843. // .addWarning(new P2AppException("", "序列号"
  844. // + FMACHINECODE + "已存在出库记录,请确认该序列号是否有误"));
  845. // }
  846. String stockno = st_stockbill.getString("type").equals("销售出库")
  847. && (skuRowsMap.get(FMACHINECODE).get(0).getString("stockno")
  848. .equals("103") || skuRowsMap.get(FMACHINECODE).get(0).getString("stockno").equals("109")) ? "101"
  849. : skuRowsMap.get(FMACHINECODE).get(0).getString("stockno");
  850. Rows stockrows = dbConnect.runSqlQuery("select *from st_stock where stockno='" + stockno + "'");
  851. if(st_stockbill_itemsid>0 && dbConnect.runSqlQuery("select 1 from where st_stockbill_items_sku where st_stockbillid=st_stockbill_itemsid and st_stockbillid="+st_stockbillid).size()>0){
  852. scanqtyrefresh();
  853. }
  854. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items_sku");
  855. long st_stockbill_items_skuid = createTableID("st_stockbill_items_sku");
  856. insertSQL.setUniqueid(st_stockbill_items_skuid);
  857. insertSQL.setSiteid(siteid);
  858. if (stockrows.isNotEmpty()) {
  859. skustockid = stockrows.get(0).getLong("stockid");
  860. }
  861. if (stockid == 0) {
  862. skustockid = st_stockbill.getLong("stockid");
  863. }
  864. insertSQL.setValue("stockid", skustockid);
  865. insertSQL.setValue("itemid", skuitemid);
  866. insertSQL.setValue("sku", FMACHINECODE);
  867. insertSQL.setValue("st_stockbillid", st_stockbillid);
  868. insertSQL.setValue("st_stockbill_itemsid", st_stockbill_itemsid==0?st_stockbillid:st_stockbill_itemsid);
  869. sqllist.add(insertSQL.getSQL());
  870. if (st_stockbill.getString("status").equals("审核")) {
  871. if (isinstock(st_stockbill.getString("type"), st_stockbill.getString("rb"), true)) {
  872. sqllist.add("update sa_itemsku set stockid=" + skustockid + " where sku='" + FMACHINECODE + "'");
  873. if (st_stockbill.getString("type").equals("销售出库")) {
  874. sqllist.add("update sa_itemsku set sa_agentsid=0 where sku='" + FMACHINECODE + "'");
  875. }
  876. } else {
  877. sqllist.add("update sa_itemsku set stockid=0 where sku='" + FMACHINECODE + "'");
  878. if (st_stockbill.getString("type").equals("销售出库")) {
  879. sqllist.add("update sa_itemsku set sa_agentsid=(select sa_agentsid from sa_agents where sys_enterpriseid=" + st_stockbill.getLong("sys_enterpriseid") + ") where sku='" + FMACHINECODE + "'");
  880. if (st_stockbill.getBoolean("iswx")) {
  881. sqllist.add("update sa_itemsku set stockid=(select stockid from st_stock where stockno='00') where sku='" + FMACHINECODE + "'");
  882. }
  883. }
  884. }
  885. }
  886. }
  887. }
  888. dbConnect.runSqlUpdate(sqllist);
  889. return getSucReturnObject().toString();
  890. }
  891. @API(title = "扫描数量刷新", apiversion = R.ID2025102215584903.v1.class)
  892. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, stockbillitemssku.class})
  893. public String scanqtyrefresh() throws YosException {
  894. long st_stockbillid = content.getLong("st_stockbillid");
  895. ArrayList<String> sqllist = new ArrayList<>();
  896. Rows stockbillskuRows = dbConnect.runSqlQuery("select t1.sku,t2.itemid,t1.st_stockbill_items_skuid from st_stockbill_items_sku t1 left join sa_itemsku t2 on t1.sku=t2.sku where t1.st_stockbillid=t1.st_stockbill_itemsid and t1.st_stockbillid="+st_stockbillid);
  897. Rows stockbilldetailRows = dbConnect.runSqlQuery("select t1.itemid,t1.st_stockbill_itemsid from st_stockbill_items t1 where t1.st_stockbillid="+st_stockbillid);
  898. RowsMap stockbilldetailRowsMap = stockbilldetailRows.toRowsMap("itemid");
  899. for(Row row :stockbillskuRows){
  900. String itemid = row.getString("itemid");
  901. long st_stockbill_items_skuid =row.getLong("st_stockbill_items_skuid");
  902. if(stockbilldetailRowsMap.containsKey(itemid)){
  903. sqllist.add("update st_stockbill_items_sku set st_stockbill_itemsid="+stockbilldetailRowsMap.get(itemid).get(0).getLong("st_stockbill_itemsid")+" where st_stockbill_items_skuid="+st_stockbill_items_skuid);
  904. }
  905. }
  906. dbConnect.runSqlUpdate(sqllist);
  907. return getSucReturnObject().toString();
  908. }
  909. @API(title = "更新站点信息详情详情", apiversion = R.ID20230720143503.v1.class)
  910. public String updateParameterSiteInfo() throws YosException {
  911. BigDecimal icstockbillrebaterate = content.getBigDecimal("icstockbillrebaterate");
  912. Long icstockbillrebateaccount = content.getLong("icstockbillrebateaccount");
  913. dbConnect.runSqlUpdate("update sys_site_parameter set icstockbillrebaterate='" + icstockbillrebaterate + "',icstockbillrebateaccount='" + icstockbillrebateaccount + "' where siteid='" + siteid + "'");
  914. return getSucReturnObject().toString();
  915. }
  916. @API(title = "站点信息详情", apiversion = R.ID20230720143603.v1.class)
  917. public String queryParameterSiteInfo() throws YosException {
  918. Rows rows = dbConnect.runSqlQuery("select icstockbillrebateaccount,icstockbillrebaterate from sys_site_parameter where siteid='" + siteid + "'");
  919. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  920. return getSucReturnObject().setData(row).toString();
  921. }
  922. public CashbillEntity getCashbillEntity(BigDecimal amount, BigDecimal discountamount, Long ownerid, String source, String sourcenotes, String remarks) throws YosException {
  923. CashbillEntity entity = new CashbillEntity();
  924. entity.setAmount(amount);
  925. entity.setDiscountamountamount(discountamount);
  926. entity.setOwnerid(ownerid);
  927. entity.setOwnertable("st_stockbill");
  928. entity.setSource(source);
  929. entity.setRemarks(remarks);
  930. entity.setSourcenote(sourcenotes);
  931. return entity;
  932. }
  933. /**
  934. * @param type
  935. * @param rb
  936. * @param fischeck
  937. * @return
  938. */
  939. public boolean isinstock(String type, String rb, boolean fischeck) {
  940. if (type.equals("其他出库") || type.equals("销售出库")
  941. || type.equals("生产领料出库") || type.equals("委外领料出库")
  942. || type.equals("返修出库")) {
  943. if ((fischeck && rb.equals("1")) || (!fischeck && rb.equals("0"))) {
  944. return false;
  945. } else {
  946. return true;
  947. }
  948. } else if (type.equals("其他入库") || type.equals("外购入库")
  949. || type.equals("生产入库") || type.equals("委外入库")
  950. || type.equals("返修入库")) {
  951. if ((fischeck && rb.equals("1")) || (!fischeck && rb.equals("0"))) {
  952. return true;
  953. } else {
  954. return false;
  955. }
  956. }
  957. return false;
  958. }
  959. /**
  960. * @param isinstock 是否增加库存
  961. * @param type 库存更新类型 0为默认形式。1表示生产领料更新现场仓 2表示委外领料更新现场仓
  962. * @throws YosException
  963. */
  964. // public void updateIcinvbal(boolean isinstock, int type,Long st_stockbillid) throws YosException {
  965. // ArrayList<String> sqlList =new ArrayList();
  966. // Rows icstockbilldetail =dbConnect.runSqlQuery("select t1.*,t2.skucontrol from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid where t1.st_stockbillid ='"
  967. // + st_stockbillid + "' and t1.siteid='" + siteid + "'");// 出入库表体
  968. // ArrayList<Long> itemids = new ArrayList<Long>();
  969. // itemids = icstockbilldetail.toArrayList("itemid",new ArrayList<>());
  970. // itemids.add((long) 0);
  971. // int i = 0;
  972. // String sql="select * from st_invbal where itemid in"+itemids;
  973. // sql = sql.replace("[", "(").replace("]", ")");
  974. // Rows invbals = dbConnect.runSqlQuery(sql);
  975. // RowsMap invbalsRowsMap=invbals.toRowsMap("itemid");
  976. // for(Row row : icstockbilldetail){
  977. // String itemid = row.getString("itemid");
  978. // //String batchno = row.getString("batchno");
  979. // //String fdcspno = row.getString("fdcspno");
  980. // String stockid = row.getString("stockid");
  981. //
  982. //// if (type == 1 && !getSysVars().getBoolean("FISBATCHFORXC")) {
  983. //// fdcspno = "**********";
  984. //// fbatchno = "**********";
  985. //// fstockno = getPaoSet("TDEPARTMENT").getPao(0)
  986. //// .getPaoSet("TSTOCKXC").getPao(0).getString("fstockno");
  987. //// icinvbal = detailpao.getPaoSet("$icinvbal", "icinvbal",
  988. //// "fitemno='" + fitemno + "' and fstockno='" + fstockno
  989. //// + "' and fdcspno='" + fdcspno
  990. //// + "' and fbatchno='" + fbatchno + "'");
  991. //// } else if (type == 2 && !getSysVars().getBoolean("FISBATCHFORXC")) {
  992. //// fdcspno = "**********";
  993. //// fbatchno = "**********";
  994. //// fstockno = getPaoSet("TSUPPLIER").getPao(0)
  995. //// .getPaoSet("TSTOCKXC").getPao(0).getString("fstockno");
  996. //// icinvbal = detailpao.getPaoSet("$icinvbal", "icinvbal",
  997. //// "fitemno='" + fitemno + "' and fstockno='" + fstockno
  998. //// + "' and fdcspno='" + fdcspno
  999. //// + "' and fbatchno='" + fbatchno + "'");
  1000. //// }
  1001. // BigDecimal qty = isinstock ? row.getBigDecimal("qty") : row.getBigDecimal("qty").negate();
  1002. // if(!invbalsRowsMap.containsKey(itemid)){
  1003. // SQLFactory sqlFactory = new SQLFactory(this, "即时库存新增");
  1004. // sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
  1005. // sqlFactory.addParameter("qty", qty);
  1006. // sqlFactory.addParameter("itemid", itemid);
  1007. // sqlFactory.addParameter("stockid", stockid);
  1008. // sqlFactory.addParameter("siteid",siteid);
  1009. // sqlFactory.addParameter("userid", userid);
  1010. // sqlFactory.addParameter("username", username);
  1011. // sqlList.add(sqlFactory.getSQL());
  1012. // }else{
  1013. // if(invbalsRowsMap.get(itemid).toRowsMap("stockid").containsKey(stockid)){
  1014. // SQLFactory sqlFactory = new SQLFactory(this, "即时库存更新");
  1015. // sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
  1016. // sqlFactory.addParameter("qty", invbalsRowsMap.get(itemid).toRowsMap("stockid").get(stockid).get(0).getBigDecimal("qty").add(qty));
  1017. // sqlFactory.addParameter("itemid", itemid);
  1018. // sqlFactory.addParameter("stockid", stockid);
  1019. // sqlFactory.addParameter("siteid",siteid);
  1020. // sqlFactory.addParameter("userid", userid);
  1021. // sqlFactory.addParameter("username", username);
  1022. // sqlList.add(sqlFactory.getSQL());
  1023. // }else{
  1024. // SQLFactory sqlFactory = new SQLFactory(new Invbal(), "即时库存新增");
  1025. // sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
  1026. // sqlFactory.addParameter("qty", qty);
  1027. // sqlFactory.addParameter("itemid", itemid);
  1028. // sqlFactory.addParameter("stockid", stockid);
  1029. // sqlFactory.addParameter("siteid",siteid);
  1030. // sqlFactory.addParameter("userid", userid);
  1031. // sqlFactory.addParameter("username", username);
  1032. // sqlList.add(sqlFactory.getSQL());
  1033. // }
  1034. // }
  1035. // }
  1036. // dbConnect.runSqlUpdate(sqlList);
  1037. // }
  1038. /**
  1039. * 账户余额冻结
  1040. *
  1041. * @param addorsub
  1042. */
  1043. public ArrayList<String> updateAccountbalance_freez(long st_stockbillid, boolean addorsub) throws YosException {
  1044. ArrayList<String> sqllist = new ArrayList<>();
  1045. /******** 冻结数据 ********/
  1046. Rows rows = dbConnect.runSqlQuery("select t4.sa_accountbalanceid,t3.sa_orderid,t3.sonum,ROUND(sum(t1.qty*t2.price*ifnull(t2.pricerate,1)*ifnull(t2.rwpricerate,1)), 2) amount from st_stockbill_items t1 \n" +
  1047. " inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid\n" +
  1048. " inner join sa_order t3 on t2.sa_orderid=t3.sa_orderid and t2.siteid=t3.siteid\n" +
  1049. "\t\t\t\t\t\t\t\t\tleft join sa_accountbalance t4 on t4.sa_accountclassid=t3.sa_accountclassid and t4.sys_enterpriseid=t3.sys_enterpriseid and t4.siteid=t3.siteid\n" +
  1050. " where t1.st_stockbillid=" + st_stockbillid + " group by t4.sa_accountbalanceid,t3.sa_orderid,t3.sonum");
  1051. if (addorsub) {
  1052. for (Row row : rows) {
  1053. String sonum = row.getString("sonum");
  1054. long sa_orderid = row.getLong("sa_orderid");
  1055. long sa_accountbalanceid = row.getLong("sa_accountbalanceid");
  1056. BigDecimal amount = row.getBigDecimal("amount");
  1057. Rows accountbalancefreezrows = dbConnect.runSqlQuery("select sa_accountbalance_freezid from sa_accountbalance_freez where sourceid=" + sa_orderid + " and sourcetable='sa_order' and siteid='" + siteid + "'");
  1058. sqllist.add("update sa_accountbalance set freezamount=ifnull(freezamount,0)+" + amount + " where sa_accountbalanceid=" + sa_accountbalanceid + " and siteid='" + siteid + "'");
  1059. if (accountbalancefreezrows.isNotEmpty()) {
  1060. sqllist.add("update sa_accountbalance_freez set amount=amount+" + amount + " where sa_accountbalance_freezid=" + accountbalancefreezrows.get(0).getLong("sa_accountbalance_freezid"));
  1061. } else {
  1062. long sa_accountbalance_freezid = createTableID("sa_accountbalance_freez");
  1063. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_accountbalance_freez");
  1064. insertSQL.setUniqueid(sa_accountbalance_freezid);
  1065. insertSQL.setSiteid(siteid);
  1066. insertSQL.setValue("sa_accountbalanceid", sa_accountbalanceid);
  1067. insertSQL.setValue("sourcetable", "sa_order");
  1068. insertSQL.setValue("sourceid", sa_orderid);
  1069. insertSQL.setValue("amount", amount);
  1070. insertSQL.setValue("remarks", "由销售订单" + sonum + "审核时冻结");
  1071. insertSQL.setValue("createby", username);
  1072. insertSQL.setDateValue("createdate");
  1073. sqllist.add(insertSQL.getSQL());
  1074. }
  1075. }
  1076. } else {
  1077. for (Row row : rows) {
  1078. long sa_orderid = row.getLong("sa_orderid");
  1079. long sa_accountbalanceid = row.getLong("sa_accountbalanceid");
  1080. BigDecimal amount = row.getBigDecimal("amount");
  1081. Rows accountbalancefreezrows = dbConnect.runSqlQuery("select sa_accountbalance_freezid,amount from sa_accountbalance_freez where sourceid=" + sa_orderid + " and sourcetable='sa_order' and siteid='" + siteid + "'");
  1082. if (accountbalancefreezrows.size() > 0) {
  1083. sqllist.add("update sa_accountbalance set freezamount=ifnull(freezamount,0)-" + amount + " where sa_accountbalanceid=" + sa_accountbalanceid);
  1084. sqllist.add("update sa_accountbalance_freez set amount=amount-" + amount + " where sa_accountbalance_freezid=" + accountbalancefreezrows.get(0).getLong("sa_accountbalance_freezid"));
  1085. }
  1086. }
  1087. }
  1088. return sqllist;
  1089. }
  1090. public String[] getDistinctArray(String[] arrays) {
  1091. ArrayList<String> a = new ArrayList<String>();
  1092. for (String array : arrays) {
  1093. if (!a.contains(array)) {
  1094. a.add(array);
  1095. }
  1096. }
  1097. int size = a.size();
  1098. return (String[]) a.toArray(new String[size]);
  1099. }
  1100. }