stockbill.java 73 KB

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