stockbill.java 123 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063
  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.itemprice.ItemPrice;
  7. import beans.parameter.Parameter;
  8. import beans.report.Report;
  9. import beans.stockbill.Stockbill;
  10. import com.alibaba.fastjson2.JSONArray;
  11. import com.alibaba.fastjson2.JSONObject;
  12. import common.Controller;
  13. import common.YosException;
  14. import common.annotation.API;
  15. import common.annotation.CACHEING;
  16. import common.annotation.CACHEING_CLEAN;
  17. import common.data.*;
  18. import org.apache.commons.lang.StringUtils;
  19. import org.apache.poi.ss.usermodel.CellStyle;
  20. import org.apache.poi.ss.usermodel.DataFormat;
  21. import org.apache.poi.xssf.usermodel.*;
  22. import restcontroller.R;
  23. import restcontroller.webmanage.sale.order.Order;
  24. import restcontroller.webmanage.sale.order.OrderItems;
  25. import restcontroller.webmanage.sale.sendrepair.sendrepair;
  26. import restcontroller.webmanage.sale.sendrepair.sendrepair_pj;
  27. import java.math.BigDecimal;
  28. import java.text.SimpleDateFormat;
  29. import java.util.ArrayList;
  30. import java.util.Date;
  31. import java.util.HashMap;
  32. /**
  33. * 出入库单
  34. */
  35. @API(title = "出入库单")
  36. public class stockbill extends Controller {
  37. /**
  38. * 构造函数
  39. *
  40. * @param content
  41. */
  42. public stockbill(JSONObject content) throws YosException {
  43. super(content);
  44. }
  45. @API(title = "新增销售出库单", apiversion = R.ID2025043010105603.v1.class)
  46. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
  47. public String insertormodify_stockbill() throws YosException {
  48. ArrayList<String> sqlList = new ArrayList<>();
  49. // 表名
  50. String tableName = "st_stockbill";
  51. Long st_stockbillid = content.getLong("st_stockbillid");
  52. Long sys_enterpriseid = content.getLong("sys_enterpriseid");
  53. Rows contactrows = dbConnect.runSqlQuery("select * from sys_enterprise_contacts where sys_enterpriseid=" + sys_enterpriseid + " and ifnull(deleted,0)=0");
  54. Long rec_contactsid = content.getLongValue("rec_contactsid");
  55. if (contactrows.isNotEmpty()) {
  56. rec_contactsid = contactrows.get(0).getLong("contactsid");
  57. }
  58. Long departmentid = content.getLongValue("departmentid");
  59. String type = content.getStringValue("type");
  60. long stockid = content.getLongValue("stockid");
  61. String typemx = content.getStringValue("typemx");
  62. String remarks = content.getStringValue("remarks");
  63. String billdate = content.getStringValue("billdate");
  64. String outplace = content.getStringValue("outplace");
  65. String delivery = content.getStringValue("delivery");
  66. String logisticsmethod = content.getStringValue("logisticsmethod");
  67. Rows invoicerows = dbConnect.runSqlQuery("select * from sys_enterprise_finance where sys_enterpriseid=" + sys_enterpriseid + " order by isdefault desc");
  68. Rows addressrows = dbConnect.runSqlQuery("select * from sys_enterprise_contacts where sys_enterpriseid=" + sys_enterpriseid + " order by isdefault desc");
  69. RowsMap addressrowsMap = addressrows.toRowsMap("type");
  70. Rows departmentrows = dbConnect.runSqlQuery("select depname from sys_department where departmentid=" + departmentid);
  71. String depname = "";
  72. if (departmentrows.isNotEmpty()) {
  73. depname = departmentrows.get(0).getString("depname");
  74. }
  75. String invoice_enterprisename = content.getStringValue("invoice_enterprisename");
  76. String invoice_address = content.getStringValue("invoice_address");
  77. String invoice_taxno = content.getStringValue("invoice_taxno");
  78. if (invoicerows.isNotEmpty()) {
  79. invoice_enterprisename = invoicerows.get(0).getString("enterprisename");
  80. invoice_address = invoicerows.get(0).getString("address");
  81. invoice_taxno = invoicerows.get(0).getString("taxno");
  82. }
  83. String tracknumber = content.getStringValue("tracknumber");
  84. boolean isconfirm = content.getBooleanValue("isconfirm");
  85. if (st_stockbillid <= 0) {
  86. st_stockbillid = createTableID(tableName);
  87. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
  88. insertSQL.setUniqueid(st_stockbillid);
  89. insertSQL.setSiteid(siteid);
  90. insertSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  91. insertSQL.setValue("rec_contactsid", rec_contactsid);
  92. insertSQL.setValue("departmentid", departmentid);
  93. insertSQL.setValue("stockid", stockid);
  94. insertSQL.setValue("type", type);
  95. insertSQL.setValue("typemx", typemx);
  96. insertSQL.setValue("sa_supplierid", content.getLongValue("sa_supplierid"));
  97. insertSQL.setValue("rb", content.getString("rb"));
  98. insertSQL.setValue("remarks", remarks);
  99. if (StringUtils.isBlank(billdate)) {
  100. insertSQL.setDateValue("billdate");
  101. insertSQL.setValue("period", getPeriod(false, new Date()));
  102. } else {
  103. insertSQL.setValue("billdate", billdate);
  104. insertSQL.setValue("period", getPeriod(false, content.getDate("billdate")));
  105. }
  106. if (type.equals("销售出库")) {
  107. insertSQL.setValue("billno", createBillCode("stockbill"));
  108. } else if (type.equals("其他出库单")) {
  109. insertSQL.setValue("billno", createBillCode("STOCKBILL1"));
  110. } else if (type.equals("其他入库单")) {
  111. insertSQL.setValue("billno", createBillCode("STOCKBILL2"));
  112. } else {
  113. insertSQL.setValue("billno", createBillCode("stockbill"));
  114. }
  115. String name = "";
  116. String phonenumber = "";
  117. String address = "";
  118. if (content.getString("rb").equals("1") && type.equals("销售出库")) {
  119. if (depname.equals("售后部")) {
  120. if (addressrowsMap.containsKey("配件")) {
  121. name = addressrowsMap.get("配件").get(0).getString("name");
  122. phonenumber = addressrowsMap.get("配件").get(0).getString("phonenumber");
  123. address = addressrowsMap.get("配件").get(0).getString("address");
  124. } else if (addressrowsMap.containsKey("收货")) {
  125. name = addressrowsMap.get("收货").get(0).getString("name");
  126. phonenumber = addressrowsMap.get("收货").get(0).getString("phonenumber");
  127. address = addressrowsMap.get("收货").get(0).getString("address");
  128. }
  129. } else {
  130. if (addressrowsMap.containsKey("收货")) {
  131. name = addressrowsMap.get("收货").get(0).getString("name");
  132. phonenumber = addressrowsMap.get("收货").get(0).getString("phonenumber");
  133. address = addressrowsMap.get("收货").get(0).getString("address");
  134. }
  135. }
  136. }
  137. insertSQL.setValue("name", name);
  138. insertSQL.setValue("phonenumber", phonenumber);
  139. insertSQL.setValue("address", address);
  140. insertSQL.setValue("outplace", outplace);
  141. insertSQL.setValue("delivery", delivery);
  142. insertSQL.setValue("logisticsmethod", logisticsmethod);
  143. insertSQL.setValue("invoice_enterprisename", invoice_enterprisename);
  144. insertSQL.setValue("invoice_address", invoice_address);
  145. insertSQL.setValue("invoice_taxno", invoice_taxno);
  146. insertSQL.setValue("tracknumber", tracknumber);
  147. insertSQL.setValue("isconfirm", isconfirm);
  148. insertSQL.setValue("createby", username);
  149. insertSQL.setDateValue("createdate");
  150. insertSQL.setValue("changeby", username);
  151. insertSQL.setDateValue("changedate");
  152. insertSQL.setValue("status", "新建");
  153. insertSQL.setValue("payamount", 0);
  154. insertSQL.setValue("paydiscountamount", 0);
  155. sqlList.add(insertSQL.getSQL());
  156. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新增", "销售出库单新增成功").getSQL());
  157. } else {
  158. Rows rows = dbConnect.runSqlQuery(
  159. "SELECT status,sys_enterpriseid,paydiscountamount,payamount,sourceobject from st_stockbill WHERE st_stockbillid = "
  160. + st_stockbillid);
  161. if (rows.isNotEmpty()) {
  162. if (rows.get(0).getString("status").equals("新建")) {
  163. if (rows.get(0).getString("sourceobject").equals("tpartreimbursement")) {
  164. return getErrReturnObject().setErrMsg("由核销生成的出入库单无法编辑").toString();
  165. }
  166. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, tableName);
  167. updateSQL.setUniqueid(st_stockbillid);
  168. updateSQL.setSiteid(siteid);
  169. updateSQL.setValue("sys_enterpriseid", sys_enterpriseid);
  170. updateSQL.setValue("rec_contactsid", rec_contactsid);
  171. updateSQL.setValue("departmentid", departmentid);
  172. updateSQL.setValue("stockid", stockid);
  173. updateSQL.setValue("remarks", remarks);
  174. updateSQL.setValue("rb", content.getString("rb"));
  175. updateSQL.setValue("typemx", typemx);
  176. updateSQL.setValue("billdate", billdate);
  177. updateSQL.setValue("outplace", outplace);
  178. updateSQL.setValue("delivery", delivery);
  179. updateSQL.setValue("logisticsmethod", logisticsmethod);
  180. updateSQL.setValue("invoice_enterprisename", content.getStringValue("invoice_enterprisename"));
  181. updateSQL.setValue("invoice_address", content.getStringValue("invoice_address"));
  182. updateSQL.setValue("invoice_taxno", content.getStringValue("invoice_taxno"));
  183. updateSQL.setValue("tracknumber", tracknumber);
  184. updateSQL.setValue("isconfirm", isconfirm);
  185. if (type.equals("销售出库")) {
  186. updateSQL.setValue("payamount", content.getBigDecimal("payamount"));
  187. updateSQL.setValue("paydiscountamount", content.getBigDecimal("paydiscountamount"));
  188. if (content.getBigDecimal("payamount").compareTo(rows.get(0).getBigDecimal("payamount")) != 0
  189. || content.getBigDecimal("paydiscountamount").compareTo(rows.get(0).getBigDecimal("paydiscountamount")) != 0) {
  190. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "金额更新变更", "销售出库单更支付金额:" + content.getBigDecimal("payamount") + ",优惠金额:" + content.getBigDecimal("paydiscountamount")).getSQL());
  191. }
  192. }
  193. updateSQL.setValue("period", content.getStringValue("period"));
  194. updateSQL.setValue("changeby", username);
  195. updateSQL.setDateValue("changedate");
  196. sqlList.add(updateSQL.getSQL());
  197. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "更新", "销售出库单更新成功").getSQL());
  198. } else {
  199. return getErrReturnObject().setErrMsg("非新建状态下无法编辑").toString();
  200. }
  201. } else {
  202. return getErrReturnObject().setErrMsg("该销售出库单不存在").toString();
  203. }
  204. }
  205. dbConnect.runSqlUpdate(sqlList);
  206. content.put("st_stockbillid", st_stockbillid);
  207. return queryStockbillMain();
  208. }
  209. @API(title = "单据日期调整", apiversion = R.ID2025102215133403.v1.class)
  210. public String billdateChange() throws YosException {
  211. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  212. Date billdate = content.getDate("billdate");
  213. String period = getPeriod(false, billdate);
  214. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, st_stockbillids.size());
  215. ArrayList<String> sqlList = new ArrayList<>();
  216. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "*").setTableAlias("t1");
  217. querySQL.setSiteid(siteid);
  218. querySQL.setWhere("t1.st_stockbillid", st_stockbillids);
  219. Rows rows = querySQL.query();
  220. RowsMap rowsMap = rows.toRowsMap("st_stockbillid");
  221. RowsMap periodrowsMap = dbConnect.runSqlQuery("select CONCAT(year, '-',LPAD(month, 2, '0')) period,isclose from st_period").toRowsMap("isclose");
  222. // if(periodrowsMap.get("1").toRowsMap("period").containsKey(period)){
  223. // return getErrReturnObject().setErrMsg("原单据会计期间已关闭,不可调整").toString();
  224. // }
  225. for (Object o : st_stockbillids) {
  226. long st_stockbillid = Long.parseLong(o.toString());
  227. if (rowsMap.containsKey(st_stockbillid)) {
  228. if (rowsMap.get(st_stockbillid).get(0).getString("status").equals("审核")) {
  229. if (periodrowsMap.get("1").toRowsMap("period").containsKey(period)) {
  230. batchDeleteErr.addErr(rowsMap.get(st_stockbillid).get(0).getString("billno"), "原单据会计期间已关闭,不可调整");
  231. continue;
  232. } else if (!periodrowsMap.get("0").toRowsMap("period").containsKey(period)) {
  233. batchDeleteErr.addErr(rowsMap.get(st_stockbillid).get(0).getString("billno"), "原单据会计期间未生成,不可调整");
  234. continue;
  235. }
  236. }
  237. } else {
  238. batchDeleteErr.addErr(String.valueOf(st_stockbillid), "该单据不存在");
  239. continue;
  240. }
  241. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "更新", "单据日期【" + content.getString("billdate") + "】调整成功").getSQL());
  242. sqlList.add("update st_stockbill set billdate='" + content.getString("billdate") + "',period='" + period + "' where st_stockbillid=" + st_stockbillid);
  243. }
  244. dbConnect.runSqlUpdate(sqlList);
  245. HashMap<String, Object> result = new HashMap<>();
  246. String success = "共需" + st_stockbillids.size() + "张单据日期调整,其中失败" + batchDeleteErr.size() + "张!";
  247. result.put("success", success);
  248. result.put("errinfo", batchDeleteErr.getReturnObject());
  249. return getSucReturnObject().setData(result).toString();
  250. }
  251. @API(title = "出入库单详情", apiversion = R.ID20230719153803.v1.class)
  252. @CACHEING
  253. public String queryStockbillMain() throws YosException {
  254. Long st_stockbillid = content.getLong("st_stockbillid");
  255. SQLFactory sqlFactory = new SQLFactory(this, "出入库单详情");
  256. sqlFactory.addParameter("st_stockbillid", st_stockbillid);
  257. sqlFactory.addParameter("siteid", siteid);
  258. Rows rows = dbConnect.runSqlQuery(sqlFactory);
  259. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  260. Rows rowsdetail = dbConnect.runSqlQuery("select amount,qty from st_stockbill_items where st_stockbillid=" + st_stockbillid);
  261. row.put("receivableamount", rowsdetail.sum("amount"));
  262. 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"));
  263. Rows stockbillrows_hong = dbConnect.runSqlQuery("select billno from st_stockbill t1 where t1.rb=0 and t1.sourceobject='st_stockbill' and t1.sourceid=" + st_stockbillid);
  264. Rows expressformrows = dbConnect.runSqlQuery("select t1.* from expressform t1 inner join sa_expressform_stockbill t2 on t1.expressformid=t2.expressformid and t1.siteid=t2.siteid where t2.st_stockbillid ='"
  265. + st_stockbillid + "' and t1.siteid='" + siteid + "' order by t1.createdate desc");
  266. if (accountbalancerows.isNotEmpty()) {
  267. row.put("discountamount_xjzh", accountbalancerows.get(0).getBigDecimal("discountamount"));
  268. } else {
  269. row.put("discountamount_xjzh", 0);
  270. }
  271. if (stockbillrows_hong.isNotEmpty()) {
  272. row.put("billno_hong", stockbillrows_hong.get(0).getString("billno"));
  273. } else {
  274. row.put("billno_hong", "");
  275. }
  276. row.put("qty", rowsdetail.sum("qty"));
  277. if (expressformrows.isEmpty()) {
  278. row.put("expressform",new Rows());
  279. row.put("expressform_mailno", "");
  280. row.put("expressform_txlogisticid", "");
  281. } else {
  282. row.put("expressform", expressformrows);
  283. row.put("expressform_mailno", expressformrows.get(0).getString("mailno"));
  284. row.put("expressform_txlogisticid", expressformrows.get(0).getString("txlogisticid"));
  285. }
  286. return getSucReturnObject().setData(row).toString();
  287. }
  288. @API(title = "查询出入库单列表", apiversion = R.ID20230719153903.v1.class)
  289. @CACHEING
  290. public String queryStockbillList() throws YosException {
  291. ArrayList<String> billtypes = new ArrayList<>();
  292. StringBuffer where = new StringBuffer(" 1=1 ");
  293. if (content.containsKey("where")) {
  294. JSONObject whereObject = content.getJSONObject("where");
  295. if (whereObject.containsKey("type") && !"".equals(whereObject.getString("type"))) {
  296. JSONArray jsonArray = whereObject.getJSONArray("type");
  297. billtypes = (ArrayList<String>) jsonArray.toJavaList(String.class);
  298. }
  299. if (whereObject.containsKey("typemx") && !"".equals(whereObject.getString("typemx"))) {
  300. where.append(" and t1.typemx ='").append(whereObject.getString("typemx")).append("' ");
  301. }
  302. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  303. where.append(" and t1.status ='").append(whereObject.getString("status")).append("' ");
  304. }
  305. if (whereObject.containsKey("rb") && !"".equals(whereObject.getString("rb"))) {
  306. where.append(" and t1.rb ='").append(whereObject.getString("rb")).append("' ");
  307. }
  308. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  309. where.append(" and t1.billdate >='").append(whereObject.getString("begindate")).append("' ");
  310. }
  311. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  312. where.append(" and t1.billdate <='").append(whereObject.getString("enddate")).append("' ");
  313. }
  314. if (whereObject.containsKey("remarks") && !"".equals(whereObject.getString("remarks"))) {
  315. where.append(" and t1.remarks like'%").append(whereObject.getString("remarks")).append("%' ");
  316. }
  317. if (whereObject.containsKey("dateinterval") && !"".equals(whereObject.getString("dateinterval"))) {
  318. if (whereObject.getString("dateinterval").equals("past30days")) {
  319. where.append(" and t1.billdate >=DATE_SUB(CURDATE(), INTERVAL 30 DAY)");
  320. } else if (whereObject.getString("dateinterval").equals("past15days")) {
  321. where.append(" and t1.billdate >=DATE_SUB(CURDATE(), INTERVAL 15 DAY)");
  322. } else if (whereObject.getString("dateinterval").equals("today")) {
  323. where.append(" and t1.billdate >=CURDATE()");
  324. }
  325. }
  326. if (whereObject.containsKey("checknoprint") && !"".equals(whereObject.getString("checknoprint"))) {
  327. if (whereObject.getBooleanValue("checknoprint")) {
  328. where.append(" and t1.status ='审核' and isreport=0");
  329. }
  330. }
  331. if (whereObject.containsKey("nowaybillgenerated") && !"".equals(whereObject.getString("nowaybillgenerated"))) {
  332. if (whereObject.getBooleanValue("checknoprint")) {
  333. where.append(" and t1.isreceiver=0 and ifnull(txlogisticid,'')='' ");
  334. }
  335. }
  336. if (whereObject.containsKey("paynocheck") && !"".equals(whereObject.getString("paynocheck"))) {
  337. where.append(" and t1.status ='新建' and delivery='到付'");
  338. }
  339. if (whereObject.containsKey("jfnocheck") && !"".equals(whereObject.getString("jfnocheck"))) {
  340. where.append(" and t1.status ='新建' and delivery='寄付'");
  341. }
  342. }
  343. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "*").setTableAlias("t1");
  344. if (billtypes.contains("销售出库") || billtypes.contains("返修入库") || billtypes.contains("返修出库")) {
  345. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t2", "t1.sys_enterpriseid = t2.sys_enterpriseid AND t1.siteid = t2.siteid",
  346. "enterprisename", "abbreviation");
  347. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t3", "t1.sys_enterpriseid = t3.sys_enterpriseid AND t1.siteid = t3.siteid",
  348. "agentnum");
  349. }
  350. if (billtypes.contains("销售出库")) {
  351. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_contacts", "t4", "t1.rec_contactsid=t4.contactsid and t1.siteid = t4.siteid");
  352. 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='现金账户')",
  353. "discountamount");
  354. querySQL.addQueryFields("recname", "t4.name");
  355. querySQL.addQueryFields("recphonenumber", "t4.phonenumber");
  356. querySQL.addQueryFields("recaddress", "t4.address");
  357. }
  358. querySQL.addJoinTable(JOINTYPE.left, "sys_department", "t6", "t1.departmentid=t6.departmentid and t1.siteid = t6.siteid",
  359. "depno", "depname");
  360. if (billtypes.contains("其他入库")) {
  361. querySQL.addJoinTable(JOINTYPE.left, "sa_supplier", "t7", "t1.sa_supplierid=t7.sa_supplierid and t1.siteid = t7.siteid",
  362. "suppno", "suppname", "suppshortname");
  363. }
  364. querySQL.addJoinTable(JOINTYPE.left, "st_stock", "t8", "t1.stockid=t8.stockid and t1.siteid = t8.siteid",
  365. "stockname");
  366. if (billtypes.contains("其他入库") || billtypes.contains("其他出库")) {
  367. querySQL.addJoinTable(JOINTYPE.left, "st_dbstockbill", "t9", "t1.sourceid=t9.st_dbstockbillid and t1.siteid = t9.siteid and t1.sourceobject='st_dbstockbill'");
  368. querySQL.addQueryFields("dbbillno", "t9.billno");
  369. }
  370. if (billtypes.contains("返修出库")) {
  371. querySQL.addJoinTable(JOINTYPE.left, "sa_sendrepair", "t10", "t10.sourceid=t1.st_stockbillid and t10.siteid = t1.siteid and t10.sourcetable='st_stockbill'", "instockdate");
  372. }
  373. querySQL.setWhere("t1.siteid", siteid);
  374. querySQL.setWhere("t1.type", billtypes);
  375. querySQL.setWhere(where);
  376. querySQL.setCondition("t1.billno", "t1.outplace", "t3.agentnum", " t2.enterprisename", "t6.depname");
  377. querySQL.setPage(pageSize, pageNumber);
  378. Rows rows = querySQL.query();
  379. ArrayList<Long> ids = rows.toArrayList("st_stockbillid", new ArrayList<>());
  380. HashMap<Long, Integer> reportMap = Report.getViewCount(this, "st_stockbill", ids);
  381. for (Row row : rows) {
  382. if (reportMap.containsKey(row.getLong("st_stockbillid"))) {
  383. row.put("printcount", reportMap.get(row.getLong("st_stockbillid")));
  384. }
  385. }
  386. if (billtypes.contains("返修出库")) {
  387. QuerySQL querySQLDatail = SQLFactory.createQuerySQL(this, "st_stockbill_items", "sku", "st_stockbillid").setTableAlias("t1");
  388. querySQLDatail.addJoinTable(JOINTYPE.left, "st_stockbill_items_sku", "t2", "t1.st_stockbill_itemsid=t2.st_stockbill_itemsid and t1.siteid = t2.siteid");
  389. querySQLDatail.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid=t1.itemid and t3.siteid = t1.siteid ", "itemno", "itemname", "spec", "model");
  390. querySQLDatail.setWhere("t1.st_stockbillid", ids);
  391. Rows rowsdatail = querySQLDatail.query();
  392. RowsMap rowsdatailMap = rowsdatail.toRowsMap("st_stockbillid");
  393. for (Row row : rows) {
  394. if (rowsdatailMap.containsKey(row.getString("st_stockbillid"))) {
  395. row.put("itemskus", rowsdatailMap.get(row.getString("st_stockbillid")));
  396. }
  397. }
  398. }
  399. if (billtypes.contains("返修入库")) {
  400. //querySQL.addJoinTable(JOINTYPE.left, "(SELECT st_stockbillid,itemno,itemname,model,sku,siteid FROM (SELECT *,ROW_NUMBER() OVER (PARTITION BY st_stockbillid ORDER BY st_stockbill_itemsid ASC) AS szrowno FROM st_stockbill_items) t WHERE szrowno = 1)", "t11", "t1.st_stockbillid=t11.st_stockbillid and t1.siteid = t11.siteid","itemno","itemname","model","sku");
  401. QuerySQL querySQLDatail = SQLFactory.createQuerySQL(this, "st_stockbill_items", "itemname", "itemno", "model", "sku", "st_stockbillid").setTableAlias("t1");
  402. querySQLDatail.setWhere("t1.st_stockbillid", ids);
  403. Rows rowsdatail = querySQLDatail.query();
  404. RowsMap rowsdatailMap = rowsdatail.toRowsMap("st_stockbillid");
  405. for (Row row : rows) {
  406. if (rowsdatailMap.containsKey(row.getString("st_stockbillid"))) {
  407. row.put("itemno", rowsdatailMap.get(row.getString("st_stockbillid")).get(0).getString("itemno"));
  408. row.put("itemname", rowsdatailMap.get(row.getString("st_stockbillid")).get(0).getString("itemname"));
  409. row.put("model", rowsdatailMap.get(row.getString("st_stockbillid")).get(0).getString("model"));
  410. row.put("sku", rowsdatailMap.get(row.getString("st_stockbillid")).get(0).getString("sku"));
  411. } else {
  412. row.put("itemno", "");
  413. row.put("itemname", "");
  414. row.put("model", "");
  415. row.put("sku", "");
  416. }
  417. }
  418. }
  419. if (billtypes.contains("销售出库")) {
  420. //querySQL.addJoinTable(JOINTYPE.left, "(SELECT st_stockbillid,itemno,itemname,model,sku,siteid FROM (SELECT *,ROW_NUMBER() OVER (PARTITION BY st_stockbillid ORDER BY st_stockbill_itemsid ASC) AS szrowno FROM st_stockbill_items) t WHERE szrowno = 1)", "t11", "t1.st_stockbillid=t11.st_stockbillid and t1.siteid = t11.siteid","itemno","itemname","model","sku");
  421. QuerySQL expressformQuery = SQLFactory.createQuerySQL(this, "expressform", "*").setTableAlias("t1");
  422. expressformQuery.addJoinTable(JOINTYPE.inner, "sa_expressform_stockbill", "t2", "t2.expressformid = t1.expressformid");
  423. expressformQuery.addJoinTable(JOINTYPE.inner, "st_stockbill", "t3", "t3.st_stockbillid = t2.st_stockbillid", "tracknumber", "st_stockbillid");
  424. expressformQuery.setWhere("t3.st_stockbillid", ids);
  425. expressformQuery.setOrderBy("t1.createdate desc");
  426. expressformQuery.setDistinct(true);
  427. Rows expressformrows = expressformQuery.query();
  428. RowsMap expressformrowsMap = expressformrows.toRowsMap("st_stockbillid");
  429. for (Row row : rows) {
  430. if (expressformrowsMap.containsKey(row.getString("st_stockbillid"))) {
  431. row.put("expressform_mailno", expressformrowsMap.get(row.getString("st_stockbillid")).get(0).getString("mailno"));
  432. row.put("expressform_txlogisticid", expressformrowsMap.get(row.getString("st_stockbillid")).get(0).getString("txlogisticid"));
  433. } else {
  434. row.put("expressform_mailno", "");
  435. row.put("expressform_txlogisticid", "");
  436. }
  437. }
  438. }
  439. return getSucReturnObject().setData(rows).toString();
  440. }
  441. @API(title = "删除", apiversion = R.ID20230719154003.v1.class)
  442. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
  443. public String delete() throws YosException {
  444. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  445. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, st_stockbillids.size());
  446. for (Object o : st_stockbillids) {
  447. long st_stockbillid = Long.parseLong(o.toString());
  448. Rows RowsStatus = dbConnect.runSqlQuery("select st_stockbillid,status from st_stockbill where siteid='"
  449. + siteid + "' and st_stockbillid='" + st_stockbillid + "'");
  450. if (RowsStatus.isNotEmpty()) {
  451. if (!RowsStatus.get(0).getString("status").equals("新建")) {
  452. batchDeleteErr.addErr(st_stockbillid, "非新建状态的出入库单无法删除");
  453. continue;
  454. }
  455. }
  456. dbConnect.runSqlUpdate(
  457. "delete from st_stockbill where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
  458. dbConnect.runSqlUpdate(
  459. "delete from st_stockbill_items where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
  460. dbConnect.runSqlUpdate(
  461. "delete from st_stockbill_items_sku where siteid='" + siteid + "' and st_stockbillid=" + st_stockbillid);
  462. }
  463. return batchDeleteErr.getReturnObject().toString();
  464. }
  465. @API(title = "审核", apiversion = R.ID20230719154103.v1.class)
  466. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, Order.class, OrderItems.class, restcontroller.sale.stockbill.stockbill.class})
  467. public String check() throws YosException {
  468. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  469. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "billno", "st_stockbillid");
  470. querySQL.setTableAlias("t1");
  471. querySQL.setSiteid(siteid);
  472. querySQL.setWhere("t1.st_stockbillid", st_stockbillids);
  473. Rows stockbillrows = querySQL.query();
  474. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, stockbillrows.size());
  475. for (Row row : stockbillrows) {
  476. long st_stockbillid = row.getLong("st_stockbillid");
  477. String billno = row.getString("billno");
  478. try {
  479. Stockbill.check(this, st_stockbillid, true);
  480. } catch (Exception e) {
  481. batchDeleteErr.addErr(billno, e.getMessage());
  482. }
  483. }
  484. HashMap<String, Object> result = new HashMap<>();
  485. String success = "共审核" + st_stockbillids.size() + "张出入库单,其中失败" + batchDeleteErr.size() + "张!";
  486. result.put("success", success);
  487. result.put("errinfo", batchDeleteErr.getReturnObject());
  488. return getSucReturnObject().setData(result).toString();
  489. }
  490. @API(title = "批量反审核(仅刷数据)", apiversion = R.ID2025121320093303.v1.class)
  491. public String uncheck_pl() throws YosException {
  492. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  493. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "billno", "st_stockbillid");
  494. querySQL.setTableAlias("t1");
  495. querySQL.setSiteid(siteid);
  496. querySQL.setWhere("t1.st_stockbillid", st_stockbillids);
  497. Rows stockbillrows = querySQL.query();
  498. BatchDeleteErr batchDeleteErr = BatchDeleteErr.create(this, stockbillrows.size());
  499. for (Row row : stockbillrows) {
  500. long st_stockbillid = row.getLong("st_stockbillid");
  501. String billno = row.getString("billno");
  502. try {
  503. Stockbill.check(this, st_stockbillid, false);
  504. } catch (Exception e) {
  505. batchDeleteErr.addErr(billno, e.getMessage());
  506. }
  507. }
  508. HashMap<String, Object> result = new HashMap<>();
  509. String success = "共审核" + st_stockbillids.size() + "张出入库单,其中失败" + batchDeleteErr.size() + "张!";
  510. result.put("success", success);
  511. result.put("errinfo", batchDeleteErr.getReturnObject());
  512. return getSucReturnObject().setData(result).toString();
  513. }
  514. @API(title = "反审核", apiversion = R.ID20230719154203.v1.class)
  515. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, Order.class, OrderItems.class, stockbill.class, restcontroller.sale.stockbill.stockbill.class})
  516. public String uncheck() throws YosException {
  517. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  518. for (Object o : st_stockbillids) {
  519. long st_stockbillid = Long.parseLong(o.toString());
  520. Stockbill.check(this, st_stockbillid, false);
  521. }
  522. return getSucReturnObject().toString();
  523. }
  524. @API(title = "生成送修单", apiversion = R.ID2025070415073603.v1.class)
  525. @CACHEING_CLEAN(apiClass = {sendrepair.class, sendrepair_pj.class})
  526. public String sendrepair() throws YosException {
  527. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  528. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "st_stockbillid", "status", "type", "typemx", "remarks", "sys_enterpriseid", "isrepair");
  529. querySQL.setTableAlias("t1");
  530. querySQL.setSiteid(siteid);
  531. querySQL.setWhere("t1.st_stockbillid", st_stockbillids.toJavaList(Long.class));
  532. Rows rows = querySQL.query();
  533. QuerySQL querySQLDetail = SQLFactory.createQuerySQL(this, "st_stockbill_items", "*");
  534. querySQLDetail.setTableAlias("t1");
  535. 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");
  536. querySQLDetail.addQueryFields("sku", "t2.machinecode");
  537. querySQLDetail.setSiteid(siteid);
  538. querySQLDetail.setWhere("t1.st_stockbillid", st_stockbillids.toJavaList(Long.class));
  539. RowsMap rowsMapDetail = querySQLDetail.query().toRowsMap("st_stockbillid");
  540. ArrayList<Long> sa_sendrepairids = new ArrayList<>();
  541. ArrayList<String> sqlList = new ArrayList<>();
  542. for (Row row : rows) {
  543. if (!row.getString("type").equals("返修入库")) {
  544. return getErrReturnObject().setErrMsg("非返修入库单无法生成送修单").toString();
  545. }
  546. if (row.getBoolean("isrepair")) {
  547. return getErrReturnObject().setErrMsg("已生成送修单,无法再次生成").toString();
  548. }
  549. if (!row.getString("type").equals("返修入库")) {
  550. return getErrReturnObject().setErrMsg("非返修入库单无法生成送修单").toString();
  551. }
  552. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_sendrepair");
  553. long sa_sendrepairid = createTableID("sa_sendrepair");
  554. sa_sendrepairids.add(sa_sendrepairid);
  555. insertSQL.setUniqueid(sa_sendrepairid);
  556. insertSQL.setSiteid(siteid);
  557. insertSQL.setValue("billno", createBillCode("sendrepair"));
  558. insertSQL.setValue("remarks", row.getString("remarks"));
  559. insertSQL.setValue("sys_enterpriseid", row.getLong("sys_enterpriseid"));
  560. insertSQL.setValue("sourcetable", "st_stockbill");
  561. insertSQL.setValue("sourceid", row.getLong("st_stockbillid"));
  562. insertSQL.setValue("status", "新建");
  563. insertSQL.setValue("createby", username);
  564. insertSQL.setDateValue("createdate");
  565. insertSQL.setDateValue("billdate");
  566. sqlList.add(insertSQL.getSQL());
  567. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", row.getLong("st_stockbillid"), "转送修单", "转送修单成功").getSQL());
  568. ArrayList<Long> ids = rowsMapDetail.get(row.getString("st_stockbillid")).toArrayList("itemid", new ArrayList<>());
  569. HashMap<Long, ItemPrice> itemPriceRowsMap = ItemPrice.getItemPrice(this, sys_enterpriseid, ids);
  570. for (Row rowdetail : rowsMapDetail.get(row.getString("st_stockbillid"))) {
  571. insertSQL = SQLFactory.createInsertSQL(this, "sa_sendrepair_detail");
  572. long sa_sendrepair_detailid = createTableID("sa_sendrepair_detail");
  573. insertSQL.setUniqueid(sa_sendrepair_detailid);
  574. insertSQL.setSiteid(siteid);
  575. insertSQL.setValue("sa_sendrepairid", sa_sendrepairid);
  576. insertSQL.setValue("name", rowdetail.getString("name"));
  577. insertSQL.setValue("phonenumber", rowdetail.getString("phonenumber"));
  578. insertSQL.setValue("address", rowdetail.getString("address"));
  579. insertSQL.setValue("stockdate", StringUtils.isBlank(rowdetail.getString("stockdate")) ? "null" : rowdetail.getString("stockdate"));
  580. insertSQL.setValue("enddate", StringUtils.isBlank(rowdetail.getString("enddate")) ? "null" : rowdetail.getString("enddate"));
  581. insertSQL.setValue("remarks", rowdetail.getString("remarks"));
  582. insertSQL.setValue("duty", rowdetail.getString("duty"));
  583. insertSQL.setValue("demand", rowdetail.getString("demand"));
  584. insertSQL.setValue("reason", rowdetail.getString("reason"));
  585. insertSQL.setValue("qty", rowdetail.getBigDecimal("qty"));
  586. insertSQL.setValue("sku", rowdetail.getString("sku"));
  587. insertSQL.setValue("itemid", rowdetail.getString("itemid"));
  588. if (itemPriceRowsMap.containsKey(rowdetail.getLong("itemid"))) {
  589. insertSQL.setValue("price", itemPriceRowsMap.get(rowdetail.getLong("itemid")).getPrice());
  590. } else {
  591. insertSQL.setValue("price", 0);
  592. }
  593. sqlList.add(insertSQL.getSQL());
  594. sqlList.add("update st_stockbill_items set isrepair=1 where st_stockbill_itemsid=" + rowdetail.getLong("st_stockbill_itemsid"));
  595. }
  596. sqlList.add("update st_stockbill set isrepair=1 where st_stockbillid=" + row.getLong("st_stockbillid"));
  597. }
  598. dbConnect.runSqlUpdate(sqlList);
  599. return getSucReturnObject().setData(sa_sendrepairids).toString();
  600. }
  601. // public String xsckcheck(Long st_stockbillid, boolean isinstock) throws YosException {
  602. // Rows rows = dbConnect.runSqlQuery("select * from st_stockbill where st_stockbillid ='"
  603. // + st_stockbillid + "' and siteid='" + siteid + "'");
  604. // 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 ='"
  605. // + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  606. // long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid");
  607. //
  608. // if (rows.isEmpty()) {
  609. // return "该出入库单不存在";
  610. // } else {
  611. // if (!rows.get(0).getString("status").equals("新建")) {
  612. // return "单号为:【" + rows.get(0).getString("billno") + "】的出入库单为非新建状态,无法审核";
  613. // }
  614. // }
  615. // for (Row row : rowsdetail) {
  616. // if (row.getBigDecimal("qty").compareTo(BigDecimal.ZERO) < 1) {
  617. // return "表体数量不能小于0";
  618. // }
  619. // }
  620. // if (rows.get(0).getBigDecimal("payamount").compareTo(BigDecimal.ZERO) <= 0) {
  621. // return "扣款金额需大于0";
  622. // }
  623. // if (StringUtils.isBlank(rows.get(0).getString("outplace"))) {
  624. // return "发货地不可为空";
  625. // }
  626. // if ((rows.get(0).getBigDecimal("payamount").add(rows.get(0).getBigDecimal("paydiscountamount"))).compareTo(rowsdetail.sum("amount")) != 0) {
  627. // return "扣款金额与应扣金额不符,不能审核";
  628. // }
  629. // 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);
  630. // if (accountbalancerows.isNotEmpty()) {
  631. // BigDecimal discountamount = accountbalancerows.get(0).getBigDecimal("discountamount");
  632. // if (rows.get(0).getBigDecimal("paydiscountamount").compareTo(discountamount) > 0) {
  633. // return "优惠金额不能大于可用优惠金额";
  634. // }
  635. // } else {
  636. // return "账户不存在";
  637. // }
  638. // ArrayList<String> sqlList = new ArrayList<>();
  639. //// Rows stockRows= dbConnect.runSqlQuery("select * from st_stock where siteid='"+siteid+"'");
  640. //// RowsMap stockRowsMap =stockRows.toRowsMap("itemid");
  641. //
  642. // String order_paymentnode = Parameter.getString(siteid, "order_paymentnode");
  643. // if (rows.get(0).getBoolean("rb")) {
  644. // if (rows.get(0).getString("type").equals("销售出库")) {
  645. // if (order_paymentnode.equals("3")) {
  646. // if (Accountbalance.judgeBalance(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), rowsdetail.sum("amount"))) {
  647. // 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") + "审核时生成");
  648. // JSONObject createCashbillPay = Accountbalance.createCashbillPay(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
  649. // sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  650. // } else {
  651. // return "账户余额不足,还差" + Accountbalance.InsufficientBalance(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), rowsdetail.sum("amount")) + "元!";
  652. // }
  653. // }
  654. // 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 + ")");
  655. // RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
  656. // 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");
  657. // 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");
  658. // if (rowsjudge.isNotEmpty()) {
  659. // return "存在商品已完全出库,无法审核";
  660. // }
  661. // for (Row row : rowsDispatchDetailGroup) {
  662. // 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"));
  663. // }
  664. // for (Row row : rowsdetail) {
  665. // if (row.getBoolean("skucontrol")) {
  666. // sqlList.add("update st_stockbill_items set wmsuploadflag2=1 where st_stockbill_itemsid=" + row.getLong("st_stockbill_itemsid"));
  667. // }
  668. //
  669. // }
  670. // }
  671. //// for(Row row :rowsdetail){
  672. //// String itemid= row.getString("itemid");
  673. //// long stockid=row.getLong("stockid");
  674. //// if(stockRowsMap.containsKey(itemid)){
  675. //// for(Row row1 :stockRowsMap.get(itemid)){
  676. //// if(row1.getLong("stockid")==stockid){
  677. //// sqlList.add("update st_stock set qty="+row1.getBigDecimal("qty").add(row.getBigDecimal("qty"))+" where stockid="+stockid);
  678. //// }
  679. //// }
  680. //// }
  681. //// // String batchno = row.getString("batchno");
  682. //// }
  683. // } else {
  684. //// for(Row row :rowsdetail){
  685. //// String itemid= row.getString("itemid");
  686. //// long stockid=row.getLong("stockid");
  687. //// if(stockRowsMap.containsKey(itemid)){
  688. //// for(Row row1 :stockRowsMap.get(itemid)){
  689. //// if(row1.getLong("stockid")==stockid){
  690. //// sqlList.add("update st_stock set qty="+row1.getBigDecimal("qty").subtract(row.getBigDecimal("qty"))+" where stockid="+stockid);
  691. //// }
  692. //// }
  693. //// }
  694. //// // String batchno = row.getString("batchno");
  695. //// }
  696. // }
  697. //// 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");
  698. //// 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+"')");
  699. //// RowsMap orderRowsMap =orderRows.toRowsMap("sa_orderid");
  700. //
  701. // sqlList.addAll(updateAccountbalance_freez(st_stockbillid, isinstock));
  702. //
  703. // dbConnect.runSqlUpdate(sqlList);
  704. //// Accountbalance.remindSend(this, sys_enterpriseid, sa_cashbillid);
  705. // return "success";
  706. //
  707. // }
  708. // public String unxsckcheck(Long st_stockbillid, boolean isinstock) throws YosException {
  709. //
  710. //
  711. // Rows rows = dbConnect.runSqlQuery("select * from st_stockbill where st_stockbillid ='"
  712. // + st_stockbillid + "' and siteid='" + siteid + "'");
  713. // 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 ='"
  714. // + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  715. // long sys_enterpriseid = rows.get(0).getLong("sys_enterpriseid");
  716. //
  717. // if (rows.isEmpty()) {
  718. // return "该出入库单不存在";
  719. // } else {
  720. // if (!rows.get(0).getString("status").equals("审核")) {
  721. // return "单号为:【" + rows.get(0).getString("billno") + "】的出入库单为非审核状态,无法反审核";
  722. // }
  723. // }
  724. // for (Row row : rowsdetail) {
  725. // if (row.getBigDecimal("qty").compareTo(BigDecimal.ZERO) < 1) {
  726. // return "表体数量不能小于0";
  727. // }
  728. // }
  729. // if (rows.get(0).getBigDecimal("paydiscountamount").compareTo(BigDecimal.ZERO) < 0) {
  730. // return "优惠金额不能小于0";
  731. // }
  732. // if (rows.get(0).getBigDecimal("payamount").compareTo(BigDecimal.ZERO) <= 0) {
  733. // return "扣款金额需大于0";
  734. // }
  735. // if (StringUtils.isBlank(rows.get(0).getString("outplace"))) {
  736. // return "发货地不可为空";
  737. // }
  738. // if ((rows.get(0).getBigDecimal("payamount").add(rows.get(0).getBigDecimal("paydiscountamount"))).compareTo(rowsdetail.sum("amount")) != 0) {
  739. // return "扣款金额与应扣金额不符,不能反审核";
  740. // }
  741. // 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);
  742. // if (accountbalancerows.isEmpty()) {
  743. // return "账户不存在";
  744. // }
  745. // if (rows.get(0).getString("type").equals("销售出库") && rows.get(0).getBoolean("isreceiver")) {
  746. // return "经销商已经确认收货,不可进行反审核";
  747. // }
  748. // ArrayList<String> sqlList = new ArrayList<>();
  749. //// Rows stockRows= dbConnect.runSqlQuery("select * from st_stock where siteid='"+siteid+"'");
  750. //// RowsMap stockRowsMap =stockRows.toRowsMap("itemid");
  751. //
  752. // String order_paymentnode = Parameter.getString(siteid, "order_paymentnode");
  753. // if (rows.get(0).getBoolean("rb")) {
  754. // if (rows.get(0).getString("type").equals("销售出库")) {
  755. // if (order_paymentnode.equals("3")) {
  756. // if (Accountbalance.judgeBalance(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), rowsdetail.sum("amount").negate())) {
  757. // 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") + "反审核时生成");
  758. // JSONObject createCashbillPay = Accountbalance.createCashbillPay(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), entity, true);
  759. // sqlList.addAll(createCashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  760. // } else {
  761. // return "账户余额不足,还差" + Accountbalance.InsufficientBalance(this, sys_enterpriseid, accountbalancerows.get(0).getLong("sa_accountclassid"), rowsdetail.sum("amount")) + "元!";
  762. // }
  763. // }
  764. // 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 + ")");
  765. // RowsMap rowsMap = rowsOrderDetail.toRowsMap("sa_orderitemsid");
  766. // 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");
  767. // for (Row row : rowsDispatchDetailGroup) {
  768. // 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"));
  769. // }
  770. // for (Row row : rowsdetail) {
  771. // if (row.getBoolean("skucontrol")) {
  772. // sqlList.add("update st_stockbill_items set wmsuploadflag2=0 where st_stockbill_itemsid=" + row.getLong("st_stockbill_itemsid"));
  773. // }
  774. //
  775. // }
  776. // }
  777. //// for(Row row :rowsdetail){
  778. //// String itemid= row.getString("itemid");
  779. //// long stockid=row.getLong("stockid");
  780. //// if(stockRowsMap.containsKey(itemid)){
  781. //// for(Row row1 :stockRowsMap.get(itemid)){
  782. //// if(row1.getLong("stockid")==stockid){
  783. //// sqlList.add("update st_stock set qty="+row1.getBigDecimal("qty").subtract(row.getBigDecimal("qty"))+" where stockid="+stockid);
  784. //// }
  785. //// }
  786. //// }
  787. //// // String batchno = row.getString("batchno");
  788. //// }
  789. // } else {
  790. //// for(Row row :rowsdetail){
  791. //// String itemid= row.getString("itemid");
  792. //// long stockid=row.getLong("stockid");
  793. //// if(stockRowsMap.containsKey(itemid)){
  794. //// for(Row row1 :stockRowsMap.get(itemid)){
  795. //// if(row1.getLong("stockid")==stockid){
  796. //// sqlList.add("update st_stock set qty="+row1.getBigDecimal("qty").add(row.getBigDecimal("qty"))+" where stockid="+stockid);
  797. //// }
  798. //// }
  799. //// }
  800. //// // String batchno = row.getString("batchno");
  801. //// }
  802. // }
  803. //// 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");
  804. //// 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+"')");
  805. //// RowsMap orderRowsMap =orderRows.toRowsMap("sa_orderid");
  806. // sqlList.addAll(updateAccountbalance_freez(st_stockbillid, isinstock));
  807. // dbConnect.runSqlUpdate(sqlList);
  808. //
  809. /// / Accountbalance.remindSend(this, sys_enterpriseid, sa_cashbillid);
  810. // return "success";
  811. // }
  812. @API(title = "仓库确认", apiversion = R.ID2025050709505703.v1.class)
  813. public String confirm() throws YosException {
  814. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  815. boolean isconfirm = content.getBooleanValue("isconfirm");
  816. if (st_stockbillids.isEmpty()) {
  817. return getErrReturnObject().setErrMsg("请选择需要操作的出入库单")
  818. .toString();
  819. }
  820. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "*");
  821. querySQL.setTableAlias("t1");
  822. querySQL.setSiteid(siteid);
  823. querySQL.setWhere("st_stockbillid", st_stockbillids);
  824. Rows rows = querySQL.query();
  825. ArrayList<String> sqllist = new ArrayList<>();
  826. for (Row row : rows) {
  827. if (!row.getString("status").equals("审核")) {
  828. return getErrReturnObject().setErrMsg("单号为:【" + row.getString("billno") + "】的出入库单为非审核状态,无法进行仓库确认")
  829. .toString();
  830. }
  831. UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "st_stockbill");
  832. updateSQL.setUniqueid(row.getLong("st_stockbillid"));
  833. updateSQL.setSiteid(siteid);
  834. updateSQL.setValue("isconfirm", isconfirm);
  835. updateSQL.setValue("confirmby", username);
  836. updateSQL.setDateValue("confirmdate");
  837. updateSQL.setValue("changeby", username);
  838. updateSQL.setDateValue("changedate");
  839. sqllist.add(updateSQL.getSQL());
  840. if (isconfirm) {
  841. sqllist.add(DataContrlLog.createLog(this, "st_stockbill", row.getLong("st_stockbillid"), "仓库确认", row.getString("type") + "单仓库确认成功").getSQL());
  842. } else {
  843. sqllist.add(DataContrlLog.createLog(this, "st_stockbill", row.getLong("st_stockbillid"), "仓库反确认", row.getString("type") + "单仓库反确认成功").getSQL());
  844. }
  845. }
  846. dbConnect.runSqlUpdate(sqllist);
  847. return getSucReturnObject().toString();
  848. }
  849. @API(title = "红冲", apiversion = R.ID2025072409344603.v1.class)
  850. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class})
  851. public String hongc() throws YosException {
  852. long st_stockbillid = content.getLong("st_stockbillid");
  853. ArrayList<String> sqlList = new ArrayList<>();
  854. 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 ='"
  855. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  856. 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 ='"
  857. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  858. if (rows.isEmpty()) {
  859. return getErrReturnObject().setErrMsg("该出入库单不存在")
  860. .toString();
  861. }
  862. if (!rows.get(0).getString("status").equals("审核")) {
  863. return getErrReturnObject().setErrMsg("非审核的出入库单无法红冲")
  864. .toString();
  865. }
  866. if (rows.get(0).getInteger("rb") == 0) {
  867. return getErrReturnObject().setErrMsg("只能红冲蓝字出入库单")
  868. .toString();
  869. }
  870. if (rows.get(0).getInteger("sa_sendrepairid") != 0) {
  871. return getErrReturnObject().setErrMsg("来源于送修单的出库单不能红冲")
  872. .toString();
  873. }
  874. st_stockbillid = createTableID("st_stockbill");
  875. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill");
  876. insertSQL.setUniqueid(st_stockbillid);
  877. insertSQL.setSiteid(siteid);
  878. insertSQL.setValue("sys_enterpriseid", rows.get(0).getLong("sys_enterpriseid"));
  879. insertSQL.setValue("rec_contactsid", rows.get(0).getLong("rec_contactsid"));
  880. insertSQL.setValue("departmentid", rows.get(0).getLong("departmentid"));
  881. insertSQL.setValue("stockid", rows.get(0).getLong("stockid"));
  882. insertSQL.setValue("type", rows.get(0).getString("type"));
  883. insertSQL.setValue("typemx", rows.get(0).getString("typemx"));
  884. insertSQL.setValue("sa_supplierid", rows.get(0).getLong("sa_supplierid"));
  885. insertSQL.setValue("rb", 0);
  886. insertSQL.setValue("remarks", rows.get(0).getString("remarks"));
  887. insertSQL.setValue("billdate", getDateTime_Str());
  888. String billno = "";
  889. if (rows.get(0).getString("type").equals("销售出库")) {
  890. billno = createBillCode("stockbill");
  891. insertSQL.setValue("billno", billno);
  892. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", rows.get(0).getLong("st_stockbillid"), "红冲", "已生成红字" + rows.get(0).getString("type") + "单【" + billno + "】").getSQL());
  893. } else if (rows.get(0).getString("type").equals("其他出库")) {
  894. billno = createBillCode("STOCKBILL1");
  895. insertSQL.setValue("billno", billno);
  896. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", rows.get(0).getLong("st_stockbillid"), "红冲", "已生成红字" + rows.get(0).getString("type") + "单【" + billno + "】").getSQL());
  897. } else if (rows.get(0).getString("type").equals("其他入库")) {
  898. billno = createBillCode("STOCKBILL2");
  899. insertSQL.setValue("billno", billno);
  900. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", rows.get(0).getLong("st_stockbillid"), "红冲", "已生成红字" + rows.get(0).getString("type") + "单【" + billno + "】").getSQL());
  901. } else {
  902. billno = createBillCode("stockbill");
  903. insertSQL.setValue("billno", billno);
  904. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", rows.get(0).getLong("st_stockbillid"), "红冲", "已生成红字" + rows.get(0).getString("type") + "单【" + billno + "】").getSQL());
  905. }
  906. insertSQL.setValue("outplace", rows.get(0).getString("outplace"));
  907. insertSQL.setValue("delivery", rows.get(0).getString("delivery"));
  908. insertSQL.setValue("invoice_enterprisename", rows.get(0).getString("invoice_enterprisename"));
  909. insertSQL.setValue("invoice_address", rows.get(0).getString("invoice_address"));
  910. insertSQL.setValue("invoice_taxno", rows.get(0).getString("invoice_taxno"));
  911. insertSQL.setValue("tracknumber", rows.get(0).getString("tracknumber"));
  912. insertSQL.setValue("isconfirm", rows.get(0).getString("isconfirm"));
  913. insertSQL.setValue("sourceobject", "st_stockbill");
  914. insertSQL.setValue("sourceid", rows.get(0).getLong("st_stockbillid"));
  915. insertSQL.setValue("period", rows.get(0).getString("period"));
  916. insertSQL.setValue("createby", username);
  917. insertSQL.setDateValue("createdate");
  918. insertSQL.setValue("changeby", username);
  919. insertSQL.setDateValue("changedate");
  920. insertSQL.setValue("status", "新建");
  921. insertSQL.setValue("payamount", rows.get(0).getString("payamount"));
  922. insertSQL.setValue("paydiscountamount", rows.get(0).getString("paydiscountamount"));
  923. sqlList.add(insertSQL.getSQL());
  924. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新建", "由" + rows.get(0).getString("billno") + "单红冲生成").getSQL());
  925. int i = 0;
  926. for (Row row : rowsdetail) {
  927. InsertSQL insertDetailSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
  928. insertDetailSQL.setUniqueid(createTableID("st_stockbill_items"));
  929. insertDetailSQL.setSiteid(siteid);
  930. insertDetailSQL.setValue("rowno", i + 1);
  931. insertDetailSQL.setValue("st_stockbillid", st_stockbillid);
  932. insertDetailSQL.setValue("sa_orderitemsid", row.getLong("sa_orderitemsid"));
  933. insertDetailSQL.setValue("itemid", row.getString("itemid"));
  934. insertDetailSQL.setValue("sa_orderid", row.getString("sa_orderid"));
  935. insertDetailSQL.setValue("qty", row.getString("qty"));
  936. insertDetailSQL.setValue("discountrate", row.getBigDecimal("discountrate"));
  937. insertDetailSQL.setValue("sa_dispatch_itemsid", 0);
  938. insertDetailSQL.setValue("defaultprice", row.getBigDecimal("defaultprice"));
  939. insertDetailSQL.setValue("remarks", row.getString("remarks"));
  940. insertDetailSQL.setValue("sku", row.getString("sku"));
  941. insertDetailSQL.setValue("itemno", row.getString("itemno"));
  942. insertDetailSQL.setValue("itemname", row.getString("itemname"));
  943. insertDetailSQL.setValue("model", row.getString("model"));
  944. insertDetailSQL.setValue("price", row.getBigDecimal("price"));
  945. insertDetailSQL.setValue("stockid", row.getString("stockid"));
  946. insertDetailSQL.setValue("amount", row.getBigDecimal("qty").multiply(row.getBigDecimal("price")));
  947. insertDetailSQL.setValue("untaxedprice", row.getBigDecimal("price").divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP));
  948. insertDetailSQL.setValue("untaxedamount", row.getBigDecimal("qty").multiply(row.getBigDecimal("price").divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP)));
  949. insertDetailSQL.setValue("sourceid", row.getLong("st_stockbill_itemsid"));
  950. insertDetailSQL.setValue("sourceobject", "st_stockbill_items");
  951. sqlList.add(insertDetailSQL.getSQL());
  952. }
  953. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新增", "销售出库单新增成功").getSQL());
  954. dbConnect.runSqlUpdate(sqlList);
  955. content.put("st_stockbillid", st_stockbillid);
  956. return queryStockbillMain();
  957. }
  958. @API(title = "序列号收集", apiversion = R.ID2025101613261703.v1.class, intervaltime = 2000)
  959. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, stockbillitemssku.class})
  960. public String skuCollect() throws YosException {
  961. long stockid = content.getLong("stockid");
  962. String sku = content.getString("sku");
  963. long st_stockbillid = content.getLong("st_stockbillid");
  964. long st_stockbill_itemsid = content.getLong("st_stockbill_itemsid");
  965. String ss = "&&%$&&";
  966. if (sku.contains(",")) {
  967. ss = ",";
  968. } else if (sku.contains(",")) {
  969. ss = ",";
  970. } else if (sku.contains(" ")) {
  971. ss = " ";
  972. } else if (sku.contains(";")) {
  973. ss = ";";
  974. } else if (sku.contains(";")) {
  975. ss = ";";
  976. }
  977. String[] CODE = getDistinctArray(sku.split(ss));
  978. 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 ='"
  979. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  980. QuerySQL skuQuerySQL = SQLFactory.createQuerySQL(this, "sa_itemsku", "*");
  981. skuQuerySQL.setTableAlias("t1");
  982. skuQuerySQL.addJoinTable(JOINTYPE.left, "plm_item", "t2", "t1.itemid=t2.itemid", "itemno", "itemname", "model");
  983. skuQuerySQL.addJoinTable(JOINTYPE.left, "st_stock", "t3", "t1.stockid=t3.stockid", "stockno");
  984. skuQuerySQL.setWhere("t1.siteid", siteid);
  985. skuQuerySQL.setWhere("t1.sku", CODE);
  986. Rows skuRows = skuQuerySQL.query();
  987. RowsMap skuRowsMap = skuRows.toRowsMap("sku");
  988. if (rows.isEmpty()) {
  989. return getErrReturnObject().setErrMsg("该出入库单不存在")
  990. .toString();
  991. }
  992. Row st_stockbill = rows.get(0);
  993. for (String FMACHINECODE : CODE) {
  994. Rows stockbillitemsrows = dbConnect.runSqlQuery("select t1.itemid,t1.qty,t2.skucontrol,t1.st_stockbill_itemsid from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid where t1.st_stockbillid ='"
  995. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  996. Rows stockbillitemskurows = dbConnect.runSqlQuery("select t1.*,t2.itemid from st_stockbill_items_sku t1 left join sa_itemsku t2 on t1.sku=t2.sku where t1.st_stockbillid ='"
  997. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  998. ArrayList<String> sqllist = new ArrayList<>();
  999. if (FMACHINECODE.equals("")) {
  1000. continue;
  1001. }
  1002. if (st_stockbill.getString("type").contains("入库")
  1003. && FMACHINECODE.startsWith("66")) {
  1004. return getErrReturnObject().setErrMsg("序列号" + FMACHINECODE
  1005. + "不可在DRP手工入库").toString();
  1006. }
  1007. if (st_stockbill.getString("status").equals("审核") && stockbillitemskurows.size() == stockbillitemsrows.toRowsMap("skucontrol").get("1").sum("qty").intValue()) {
  1008. return getErrReturnObject().setErrMsg("序列号数量已经满足,不可继续添加").toString();
  1009. }
  1010. if (stockbillitemskurows.toRowsMap("sku").containsKey(FMACHINECODE)) {
  1011. return getErrReturnObject().setErrMsg("序列号" + FMACHINECODE + "重复").toString();
  1012. }
  1013. if (!skuRowsMap.containsKey(FMACHINECODE)) {
  1014. return getErrReturnObject().setErrMsg("序列号" + FMACHINECODE + "不存在").toString();
  1015. } else {
  1016. if (skuRowsMap.get(FMACHINECODE).get(0).getString("status").equals("报废")) {
  1017. return getErrReturnObject().setErrMsg("该序列号已作废").toString();
  1018. }
  1019. long skustockid = skuRowsMap.get(FMACHINECODE).get(0).getLong(
  1020. "stockid");
  1021. long skuitemid = skuRowsMap.get(FMACHINECODE).get(0).getLong("itemid");
  1022. String skuitemno = skuRowsMap.get(FMACHINECODE).get(0).getString("itemno");
  1023. if (st_stockbill.getString("status").equals("审核")) {
  1024. Rows stockbillskucheckRows = dbConnect.runSqlQuery("select * from stockbillskucheck where itemid=" + skuitemid + " and st_stockbillid=" + st_stockbillid);
  1025. if (!stockbillskucheckRows.isEmpty()) {
  1026. return getErrReturnObject().setErrMsg("商品编号" + skuitemno
  1027. + stockbillskucheckRows.get(0)
  1028. .getString("msg")).toString();
  1029. }
  1030. }
  1031. if (skustockid != 0 && isinstock(st_stockbill.getString("type"), st_stockbill.getString("rb"), true)) {
  1032. return getErrReturnObject().setErrMsg("该序列号不可进行入库操作").toString();
  1033. }
  1034. if (skustockid == 0 && !isinstock(st_stockbill.getString("type"), st_stockbill.getString("rb"), true)) {
  1035. return getErrReturnObject().setErrMsg("该序列号不可进行出库操作").toString();
  1036. }
  1037. if (skustockid == 0 && stockid == 0) {
  1038. return getErrReturnObject().setErrMsg("请指定仓库").toString();
  1039. }
  1040. if (st_stockbill.getString("status").equals("审核") && !stockbillitemsrows.toRowsMap("skucontrol").get("1").toRowsMap("itemid").containsKey(
  1041. skuRowsMap.get(FMACHINECODE).get(0).getString("itemid"))) {
  1042. return getErrReturnObject().setErrMsg("序列号所属的商品编号没有包含在单据表体中").toString();
  1043. }
  1044. if (st_stockbill.getString("type").equals("生产入库")
  1045. && skuRowsMap.get("FMACHINECODE").get(0).getString("mono")
  1046. .equals("")) {
  1047. return getErrReturnObject().setErrMsg("序列号非生产订单生成,不可添加").toString();
  1048. }
  1049. // if (st_stockbill.getString("type").equals("其他入库")
  1050. // && st_stockbill.getString("stockno").equals("101")
  1051. // && !getPaoSet(
  1052. // "MACHINECODEUSEVIEW",
  1053. // "MACHINECODEUSEVIEW",
  1054. // "fmachinecode='" + FMACHINECODE
  1055. // + "' and ftype like'%出库%'")
  1056. // .isEmpty()) {
  1057. // ((PaoSet) getThisPaoSet())
  1058. // .addWarning(new P2AppException("", "序列号"
  1059. // + FMACHINECODE + "已存在出库记录,请确认该序列号是否有误"));
  1060. // }
  1061. String stockno = st_stockbill.getString("type").equals("销售出库")
  1062. && (skuRowsMap.get(FMACHINECODE).get(0).getString("stockno")
  1063. .equals("103") || skuRowsMap.get(FMACHINECODE).get(0).getString("stockno").equals("109")) ? "101"
  1064. : skuRowsMap.get(FMACHINECODE).get(0).getString("stockno");
  1065. Rows stockrows = dbConnect.runSqlQuery("select *from st_stock where stockno='" + stockno + "'");
  1066. if (st_stockbill_itemsid > 0 && dbConnect.runSqlQuery("select 1 from st_stockbill_items_sku where st_stockbillid=st_stockbill_itemsid and st_stockbillid=" + st_stockbillid).size() > 0) {
  1067. scanqtyrefresh();
  1068. stockbillitemsrows = dbConnect.runSqlQuery("select t1.itemid,t1.qty,t2.skucontrol,t1.st_stockbill_itemsid from st_stockbill_items t1 left join plm_item t2 on t1.itemid=t2.itemid where t1.st_stockbillid ='"
  1069. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  1070. stockbillitemskurows = dbConnect.runSqlQuery("select t1.*,t2.itemid from st_stockbill_items_sku t1 left join sa_itemsku t2 on t1.sku=t2.sku where t1.st_stockbillid ='"
  1071. + st_stockbillid + "' and t1.siteid='" + siteid + "'");
  1072. }
  1073. if (stockrows.isNotEmpty()) {
  1074. skustockid = stockrows.get(0).getLong("stockid");
  1075. }
  1076. if (stockid == 0) {
  1077. skustockid = st_stockbill.getLong("stockid");
  1078. } else {
  1079. skustockid = stockid;
  1080. }
  1081. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items_sku");
  1082. long st_stockbill_items_skuid = createTableID("st_stockbill_items_sku");
  1083. insertSQL.setUniqueid(st_stockbill_items_skuid);
  1084. insertSQL.setSiteid(siteid);
  1085. insertSQL.setValue("stockid", skustockid);
  1086. insertSQL.setValue("itemid", skuitemid);
  1087. insertSQL.setValue("sku", FMACHINECODE);
  1088. if (!st_stockbill.getString("status").equals("审核")) {
  1089. if (st_stockbill_itemsid == 0) {
  1090. if (!stockbillitemsrows.toRowsMap("itemid").containsKey(skuitemid)) {
  1091. //新建表体
  1092. InsertSQL insertdetailSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
  1093. long st_stockbill_itemsidnew = createTableID("st_stockbill_items");
  1094. insertdetailSQL.setUniqueid(st_stockbill_itemsidnew);
  1095. insertdetailSQL.setSiteid(siteid);
  1096. insertdetailSQL.setValue("rowno", 1);
  1097. insertdetailSQL.setValue("sa_dispatch_itemsid", 0);
  1098. insertdetailSQL.setValue("stockid", skustockid);
  1099. insertdetailSQL.setValue("itemid", skuitemid);
  1100. insertdetailSQL.setValue("itemno", skuRowsMap.get(FMACHINECODE).get(0).getString("itemno"));
  1101. insertdetailSQL.setValue("itemname", skuRowsMap.get(FMACHINECODE).get(0).getString("itemname"));
  1102. insertdetailSQL.setValue("model", skuRowsMap.get(FMACHINECODE).get(0).getString("model"));
  1103. insertdetailSQL.setValue("qty", 1);
  1104. insertdetailSQL.setValue("sku", FMACHINECODE);
  1105. insertdetailSQL.setValue("skucontrol", 1);
  1106. insertdetailSQL.setValue("st_stockbillid", st_stockbillid);
  1107. sqllist.add(insertdetailSQL.getSQL());
  1108. insertSQL.setValue("st_stockbillid", st_stockbillid);
  1109. insertSQL.setValue("st_stockbill_itemsid", st_stockbill_itemsidnew);
  1110. } else {
  1111. if (stockbillitemsrows.toRowsMap("itemid").get(skuitemid).sum("qty").compareTo(BigDecimal.valueOf(stockbillitemskurows.toRowsMap("itemid").get(skuitemid).size())) <= 0) {
  1112. BigDecimal newqty = BigDecimal.valueOf(stockbillitemskurows.toRowsMap("itemid").get(skuitemid).size()).subtract(stockbillitemsrows.toRowsMap("itemid").get(skuitemid).sum("qty")).add(BigDecimal.ONE);
  1113. sqllist.add("update st_stockbill_items set qty=qty+" + newqty + " where st_stockbill_itemsid =" + stockbillitemsrows.toRowsMap("itemid").get(skuitemid).get(0).getLong("st_stockbill_itemsid"));
  1114. }
  1115. insertSQL.setValue("st_stockbillid", st_stockbillid);
  1116. insertSQL.setValue("st_stockbill_itemsid", stockbillitemsrows.toRowsMap("itemid").get(skuitemid).get(0).getLong("st_stockbill_itemsid"));
  1117. }
  1118. } else {
  1119. if (stockbillitemsrows.toRowsMap("st_stockbill_itemsid").get("st_stockbill_itemsid").sum("qty").compareTo(stockbillitemskurows.toRowsMap("st_stockbill_itemsid").get(st_stockbill_itemsid).sum("qty")) <= 0) {
  1120. int newqty = stockbillitemskurows.toRowsMap("st_stockbill_itemsid").get(st_stockbill_itemsid).size() + 1;
  1121. sqllist.add("update st_stockbill_items set qty=" + newqty + " where st_stockbill_itemsid =" + st_stockbill_itemsid);
  1122. }
  1123. insertSQL.setValue("st_stockbillid", st_stockbillid);
  1124. insertSQL.setValue("st_stockbill_itemsid", st_stockbill_itemsid);
  1125. }
  1126. } else {
  1127. if (st_stockbill_itemsid == 0) {
  1128. if (stockbillitemsrows.toRowsMap("itemid").get(skuitemid).sum("qty").compareTo(stockbillitemskurows.toRowsMap("itemid").get(skuitemid).sum("qty")) == 0) {
  1129. return getErrReturnObject().setErrMsg("序列号数量已经满足,不可继续添加").toString();
  1130. } else {
  1131. insertSQL.setValue("st_stockbillid", st_stockbillid);
  1132. insertSQL.setValue("st_stockbill_itemsid", st_stockbillid);
  1133. }
  1134. } else {
  1135. if (stockbillitemsrows.toRowsMap("st_stockbill_itemsid").get(st_stockbill_itemsid).sum("qty").compareTo(stockbillitemskurows.toRowsMap("st_stockbill_itemsid").get(st_stockbill_itemsid).sum("qty")) == 0) {
  1136. return getErrReturnObject().setErrMsg("序列号数量已经满足,不可继续添加").toString();
  1137. } else {
  1138. insertSQL.setValue("st_stockbillid", st_stockbillid);
  1139. insertSQL.setValue("st_stockbill_itemsid", st_stockbill_itemsid);
  1140. }
  1141. }
  1142. }
  1143. sqllist.add(insertSQL.getSQL());
  1144. if (st_stockbill.getString("status").equals("审核")) {
  1145. if (isinstock(st_stockbill.getString("type"), st_stockbill.getString("rb"), true)) {
  1146. sqllist.add("update sa_itemsku set stockid=" + skustockid + " where sku='" + FMACHINECODE + "'");
  1147. if (st_stockbill.getString("type").equals("销售出库")) {
  1148. sqllist.add("update sa_itemsku set sa_agentsid=0 where sku='" + FMACHINECODE + "'");
  1149. }
  1150. } else {
  1151. sqllist.add("update sa_itemsku set stockid=0 where sku='" + FMACHINECODE + "'");
  1152. if (st_stockbill.getString("type").equals("销售出库")) {
  1153. 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 + "'");
  1154. if (st_stockbill.getBoolean("iswx")) {
  1155. sqllist.add("update sa_itemsku set stockid=(select stockid from st_stock where stockno='00') where sku='" + FMACHINECODE + "'");
  1156. }
  1157. }
  1158. }
  1159. }
  1160. }
  1161. dbConnect.runSqlUpdate(sqllist);
  1162. }
  1163. return getSucReturnObject().toString();
  1164. }
  1165. @API(title = "扫描数量刷新", apiversion = R.ID2025102215584903.v1.class)
  1166. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, stockbillitemssku.class})
  1167. public String scanqtyrefresh() throws YosException {
  1168. long st_stockbillid = content.getLong("st_stockbillid");
  1169. ArrayList<String> sqllist = new ArrayList<>();
  1170. 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);
  1171. Rows stockbilldetailRows = dbConnect.runSqlQuery("select t1.itemid,t1.st_stockbill_itemsid,(t1.qty-ifnull(t2.smqty,0)) qty from st_stockbill_items t1 left join (select st_stockbill_itemsid,count(1) smqty from st_stockbill_items_sku where st_stockbillid='" + st_stockbillid + "' and st_stockbillid!=st_stockbill_itemsid group by st_stockbill_itemsid) t2 on t1.st_stockbill_itemsid=t2.st_stockbill_itemsid where t1.st_stockbillid=" + st_stockbillid + " and skucontrol=1");
  1172. RowsMap stockbilldetailRowsMap = stockbilldetailRows.toRowsMap("itemid");
  1173. HashMap<String, Integer> itemqtymap = new HashMap<>();
  1174. for (Row row : stockbillskuRows) {
  1175. String itemid = row.getString("itemid");
  1176. if (itemqtymap.containsKey(itemid)) {
  1177. itemqtymap.put(itemid, itemqtymap.get(itemid) + 1);
  1178. } else {
  1179. itemqtymap.put(itemid, 1);
  1180. }
  1181. long st_stockbill_items_skuid = row.getLong("st_stockbill_items_skuid");
  1182. if (stockbilldetailRowsMap.containsKey(itemid)) {
  1183. for (Row rowdetail : stockbilldetailRowsMap.get(itemid)) {
  1184. if (rowdetail.getInteger("qty") >= itemqtymap.get(itemid)) {
  1185. sqllist.add("update st_stockbill_items_sku set st_stockbill_itemsid=" + rowdetail.getLong("st_stockbill_itemsid") + " where st_stockbill_items_skuid=" + st_stockbill_items_skuid);
  1186. break;
  1187. }
  1188. }
  1189. }
  1190. }
  1191. dbConnect.runSqlUpdate(sqllist);
  1192. return getSucReturnObject().toString();
  1193. }
  1194. @API(title = "批量建快递信息单", apiversion = R.ID2025110810253603.v1.class)
  1195. public String insertexpressforms() throws YosException {
  1196. ArrayList<String> sqlList = new ArrayList<>();
  1197. // 表名
  1198. String tableName = "expressform";
  1199. long expresssdrid = content.getLong("expresssdrid");
  1200. String province = content.getStringValue("province");
  1201. String city = content.getStringValue("city");
  1202. String county = content.getStringValue("county");
  1203. String phonenumber = content.getStringValue("phonenumber");
  1204. String address = content.getStringValue("address");
  1205. BigDecimal agencyfund = content.getBigDecimal("agencyfund");
  1206. String ordertype = content.getStringValue("ordertype");
  1207. JSONArray st_stockbillids = content.getJSONArray("st_stockbillids");
  1208. QuerySQL stockbillQuerySQL = SQLFactory.createQuerySQL(this, "st_stockbill", "*");
  1209. stockbillQuerySQL.setTableAlias("t1");
  1210. stockbillQuerySQL.addQueryFields("rev_name", "t1.name");
  1211. stockbillQuerySQL.addQueryFields("rcv_phone", "t1.phonenumber");
  1212. stockbillQuerySQL.addQueryFields("rcv_mobile", "t1.phonenumber");
  1213. stockbillQuerySQL.addQueryFields("rcv_address", "t1.address");
  1214. stockbillQuerySQL.setWhere("t1.siteid", siteid);
  1215. stockbillQuerySQL.setWhere("t1.st_stockbillid", st_stockbillids);
  1216. stockbillQuerySQL.setWhere("t1.type='销售出库'");
  1217. Rows stockbillRows = stockbillQuerySQL.query();
  1218. QuerySQL orderQuerySQL = SQLFactory.createQuerySQL(this, "sa_order", "province", "city", "county");
  1219. orderQuerySQL.setTableAlias("t1");
  1220. orderQuerySQL.addJoinTable(JOINTYPE.inner, "sa_orderitems", "t2", "t2.sa_orderid=t1.sa_orderid");
  1221. orderQuerySQL.addJoinTable(JOINTYPE.inner, "st_stockbill_items", "t3", "t3.sa_orderitemsid=t2.sa_orderitemsid", "st_stockbillid");
  1222. orderQuerySQL.setWhere("t3.st_stockbillid", st_stockbillids);
  1223. Rows orderRows = orderQuerySQL.query();
  1224. RowsMap orderrowsMap = orderRows.toRowsMap("st_stockbillid");
  1225. for (Row row : stockbillRows) {
  1226. long expressformid = createTableID(tableName);
  1227. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, tableName);
  1228. insertSQL.setUniqueid(expressformid);
  1229. insertSQL.setSiteid(siteid);
  1230. insertSQL.setValue("logisticproviderid", "YTO");
  1231. insertSQL.setValue("ordertype", ordertype);
  1232. insertSQL.setValue("agencyfund", agencyfund);
  1233. insertSQL.setValue("itemname", "配件");
  1234. insertSQL.setValue("number", 1);
  1235. insertSQL.setValue("fpriority_ads", "配件>常规");
  1236. insertSQL.setValue("sys_enterpriseid", row.getLong("sys_enterpriseid"));
  1237. insertSQL.setValue("rcv_name", row.getString("rev_name"));
  1238. insertSQL.setValue("rcv_phone", row.getString("rcv_phone"));
  1239. insertSQL.setValue("rcv_mobile", row.getString("rcv_mobile"));
  1240. insertSQL.setValue("rcv_postcode", "");
  1241. insertSQL.setValue("rcv_prov", orderrowsMap.containsKey(row.getString("st_stockbillid")) ? orderrowsMap.get(row.getString("st_stockbillid")).get(0).getString("province") : province);
  1242. insertSQL.setValue("rcv_city", orderrowsMap.containsKey(row.getString("st_stockbillid")) ? orderrowsMap.get(row.getString("st_stockbillid")).get(0).getString("city") : city);
  1243. insertSQL.setValue("rcv_county", orderrowsMap.containsKey(row.getString("st_stockbillid")) ? orderrowsMap.get(row.getString("st_stockbillid")).get(0).getString("county") : city);
  1244. insertSQL.setValue("rcv_address", row.getString("rcv_address"));
  1245. insertSQL.setValue("expresssdrid", expresssdrid);
  1246. insertSQL.setValue("remarks", "");
  1247. insertSQL.setValue("mailno", "");
  1248. insertSQL.setValue("province", province);
  1249. insertSQL.setValue("city", city);
  1250. insertSQL.setValue("county", county);
  1251. insertSQL.setValue("phonenumber", phonenumber);
  1252. insertSQL.setValue("address", address);
  1253. insertSQL.setValue("txlogisticid", createBillCode("logisticsbill"));
  1254. insertSQL.setValue("createby", username);
  1255. insertSQL.setDateValue("createdate");
  1256. insertSQL.setValue("changeby", username);
  1257. insertSQL.setDateValue("changedate");
  1258. insertSQL.setValue("status", "新建");
  1259. sqlList.add(insertSQL.getSQL());
  1260. sqlList.add(DataContrlLog.createLog(this, "expressform", expressformid, "新增", "快递信息新增成功").getSQL());
  1261. InsertSQL insertBindSQL = SQLFactory.createInsertSQL(this, "sa_expressform_stockbill");
  1262. insertBindSQL.setUniqueid(createTableID("sa_expressform_stockbill"));
  1263. insertBindSQL.setSiteid(siteid);
  1264. insertBindSQL.setValue("st_stockbillid", row.getLong("st_stockbillid"));
  1265. insertBindSQL.setValue("expressformid", expressformid);
  1266. sqlList.add(insertBindSQL.getSQL());
  1267. }
  1268. dbConnect.runSqlUpdate(sqlList);
  1269. return getSucReturnObject().toString();
  1270. }
  1271. @API(title = "更新站点信息详情详情", apiversion = R.ID20230720143503.v1.class)
  1272. public String updateParameterSiteInfo() throws YosException {
  1273. BigDecimal icstockbillrebaterate = content.getBigDecimal("icstockbillrebaterate");
  1274. Long icstockbillrebateaccount = content.getLong("icstockbillrebateaccount");
  1275. dbConnect.runSqlUpdate("update sys_site_parameter set icstockbillrebaterate='" + icstockbillrebaterate + "',icstockbillrebateaccount='" + icstockbillrebateaccount + "' where siteid='" + siteid + "'");
  1276. return getSucReturnObject().toString();
  1277. }
  1278. @API(title = "站点信息详情", apiversion = R.ID20230720143603.v1.class)
  1279. public String queryParameterSiteInfo() throws YosException {
  1280. Rows rows = dbConnect.runSqlQuery("select icstockbillrebateaccount,icstockbillrebaterate from sys_site_parameter where siteid='" + siteid + "'");
  1281. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  1282. return getSucReturnObject().setData(row).toString();
  1283. }
  1284. @API(title = "下载销售出库单导入单模板", apiversion = R.ID2025111309451103.v1.class)
  1285. public String downloadstockbillExcel() throws YosException {
  1286. ExcelFactory excelFactory = new ExcelFactory("ImportTemplateForStockbill");
  1287. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
  1288. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  1289. CellStyle style = xssfFWorkbook.createCellStyle();
  1290. // 设置为文本格式,防止身份证号变成科学计数法
  1291. DataFormat format = xssfFWorkbook.createDataFormat();
  1292. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  1293. style.setDataFormat(format.getFormat("@"));
  1294. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  1295. for (int i = 0; i <= 13; i++) {
  1296. sheet.setDefaultColumnStyle(i, style);
  1297. }
  1298. ExportExcelSpecial.setBatchDetailSheetColumn1(sheet);// 设置工作薄列宽
  1299. XSSFCellStyle titleCellStyle1 = ExportExcelSpecial.createTitleCellStyle1(xssfFWorkbook);
  1300. XSSFCellStyle titleCellStyle2 = ExportExcelSpecial.createTitleCellStyle2(xssfFWorkbook);
  1301. XSSFCellStyle titleCellStyle3 = ExportExcelSpecial.createTitleCellStyle3(xssfFWorkbook);
  1302. XSSFCellStyle titleCellStyle4 = ExportExcelSpecial.createBodyCellStyle4(xssfFWorkbook);
  1303. ExportExcelSpecial.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, titleCellStyle4,
  1304. xssfFWorkbook);// 写入标题
  1305. Rows aa = saveToExcelAttachment(excelFactory);
  1306. String url = "";
  1307. if (!aa.isEmpty()) {
  1308. url = aa.get(0).getString("url");
  1309. }
  1310. return getSucReturnObject().setData(url).toString();
  1311. }
  1312. @API(title = "导入销售出库单", apiversion = R.ID2025111309451703.v1.class)
  1313. @CACHEING_CLEAN(apiClass = {stockbill.class, stockbillitems.class, stockbillitemssku.class})
  1314. public String uploadstockbillByExcel() throws YosException {
  1315. ArrayList<String> sqlList = new ArrayList<>();
  1316. ExcelFactory e;
  1317. try {
  1318. if (content.getLongValue("attachmentid") > 0) {
  1319. e = getExcelAttachment(content.getLongValue("attachmentid"));
  1320. // 本地
  1321. //e = getPostExcelFactory();
  1322. } else {
  1323. e = getPostExcel();
  1324. // 本地
  1325. //e = getPostExcelFactory();
  1326. }
  1327. ArrayList<String> keys = new ArrayList<>();
  1328. keys.add("type");
  1329. keys.add("depno");
  1330. keys.add("agentnum");
  1331. keys.add("remarks");
  1332. keys.add("payamount");
  1333. keys.add("paydiscountamount");
  1334. keys.add("outplace");
  1335. keys.add("rb");
  1336. keys.add("itemno");
  1337. keys.add("stockno");
  1338. keys.add("qty");
  1339. keys.add("defaultprice");
  1340. keys.add("discountrate");
  1341. Rows rows = e.getSheetRows(0, keys, 3);
  1342. boolean iserr = false;
  1343. Rows rowserr = new Rows();
  1344. Rows rowssuc = new Rows();
  1345. RowsMap stockRowsMap = SQLFactory.createQuerySQL(this, "st_stock", "stockid", "stockno").query().toRowsMap("stockno");
  1346. RowsMap depRowsMap = SQLFactory.createQuerySQL(this, "sys_department", "departmentid", "depno").query().toRowsMap("depno");
  1347. QuerySQL agentquerySQL = SQLFactory.createQuerySQL(this, "sa_agents", "agentnum", "sys_enterpriseid");
  1348. agentquerySQL.setTableAlias("t1");
  1349. agentquerySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_contacts", "t2", "t1.sys_enterpriseid=t2.sys_enterpriseid", "contactsid", "name", "phonenumber");
  1350. agentquerySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_finance", "t3", "t1.sys_enterpriseid=t3.sys_enterpriseid", "enterprisename", "taxno", "address");
  1351. agentquerySQL.setSiteid(siteid);
  1352. agentquerySQL.setWhere("t1.agentnum", rows.toArrayList("agentnum"));
  1353. Rows agentsRows = agentquerySQL.query();
  1354. RowsMap agentsRowsMap = agentsRows.toRowsMap("agentnum");
  1355. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "plm_item", "itemid", "itemno", "itemname", "model", "skucontrol");
  1356. querySQL.setTableAlias("t1");
  1357. querySQL.setSiteid(siteid);
  1358. querySQL.setWhere("t1.itemno", rows.toArrayList("itemno"));
  1359. Rows itemrows = querySQL.query();
  1360. RowsMap itemRowsMap = itemrows.toRowsMap("itemno");
  1361. for (Row row : rows) {
  1362. if (!(StringUtils.isBlank(row.getString("type"))
  1363. && StringUtils.isBlank(row.getString("depno"))
  1364. && StringUtils.isBlank(row.getString("agentnum"))
  1365. && StringUtils.isBlank(row.getString("remarks"))
  1366. && StringUtils.isBlank(row.getString("payamount"))
  1367. && StringUtils.isBlank(row.getString("paydiscountamount"))
  1368. && StringUtils.isBlank(row.getString("outplace"))
  1369. && StringUtils.isBlank(row.getString("rb")))) {
  1370. if (StringUtils.isBlank(row.getString("type"))
  1371. || StringUtils.isBlank(row.getString("rb"))
  1372. || StringUtils.isBlank(row.getString("outplace"))
  1373. || StringUtils.isBlank(row.getString("agentnum"))) {
  1374. iserr = true;
  1375. row.put("msg", "错误信息:类型/红蓝字/发货地/经销商编码不能为空");
  1376. rowserr.add(row);
  1377. continue;
  1378. }
  1379. if (!agentsRowsMap.containsKey(row.getString("agentnum"))) {
  1380. iserr = true;
  1381. row.put("msg", "错误信息:经销商编号不存在");
  1382. rowserr.add(row);
  1383. continue;
  1384. }
  1385. if (!row.getString("rb").equals("红") && !row.getString("rb").equals("蓝")) {
  1386. iserr = true;
  1387. row.put("msg", "错误信息:红蓝字只能填写红或蓝");
  1388. rowserr.add(row);
  1389. continue;
  1390. }
  1391. if (!row.getString("outplace").equals("谈桥") && !row.getString("outplace").equals("马桥")) {
  1392. iserr = true;
  1393. row.put("msg", "错误信息:发货地只能填写谈桥或马桥");
  1394. rowserr.add(row);
  1395. continue;
  1396. }
  1397. if (!row.getString("type").equals("销售出库")
  1398. && !row.getString("outplace").equals("其他入库")
  1399. && !row.getString("outplace").equals("其他出库")) {
  1400. iserr = true;
  1401. row.put("msg", "错误信息:出入库单类型错误");
  1402. rowserr.add(row);
  1403. continue;
  1404. }
  1405. if (!itemRowsMap.containsKey(row.getString("itemno"))) {
  1406. iserr = true;
  1407. row.put("msg", "错误信息:品号不存在");
  1408. rowserr.add(row);
  1409. continue;
  1410. }
  1411. if (!isNumeric(row.getString("paydiscountamount"))) {
  1412. iserr = true;
  1413. row.put("msg", "优惠金额不为数字格式,请检查");
  1414. rowserr.add(row);
  1415. continue;
  1416. }
  1417. if (!isNumeric(row.getString("payamount"))) {
  1418. iserr = true;
  1419. row.put("msg", "扣款金额不为数字格式,请检查");
  1420. rowserr.add(row);
  1421. continue;
  1422. }
  1423. if (!isNumeric(row.getString("qty"))) {
  1424. iserr = true;
  1425. row.put("msg", "数量不为数字格式,请检查");
  1426. rowserr.add(row);
  1427. continue;
  1428. }
  1429. if (!isNumeric(row.getString("defaultprice"))) {
  1430. iserr = true;
  1431. row.put("msg", "原价不为数字格式,请检查");
  1432. rowserr.add(row);
  1433. continue;
  1434. }
  1435. if (!isNumeric(row.getString("discountrate"))) {
  1436. iserr = true;
  1437. row.put("msg", "折扣率不为数字格式,请检查");
  1438. rowserr.add(row);
  1439. continue;
  1440. } else {
  1441. if (row.getDouble("discountrate") > 1) {
  1442. iserr = true;
  1443. row.put("msg", "折扣率不能大于1,请检查");
  1444. rowserr.add(row);
  1445. continue;
  1446. }
  1447. }
  1448. } else {
  1449. if (!itemRowsMap.containsKey(row.getString("itemno"))) {
  1450. iserr = true;
  1451. row.put("msg", "错误信息:品号不存在");
  1452. rowserr.add(row);
  1453. continue;
  1454. }
  1455. if (!isNumeric(row.getString("qty"))) {
  1456. iserr = true;
  1457. row.put("msg", "数量不为数字格式,请检查");
  1458. rowserr.add(row);
  1459. continue;
  1460. }
  1461. if (!isNumeric(row.getString("defaultprice"))) {
  1462. iserr = true;
  1463. row.put("msg", "原价不为数字格式,请检查");
  1464. rowserr.add(row);
  1465. continue;
  1466. }
  1467. if (!isNumeric(row.getString("discountrate"))) {
  1468. iserr = true;
  1469. row.put("msg", "折扣率不为数字格式,请检查");
  1470. rowserr.add(row);
  1471. continue;
  1472. } else {
  1473. if (row.getDouble("discountrate") > 1) {
  1474. iserr = true;
  1475. row.put("msg", "折扣率不能大于1,请检查");
  1476. rowserr.add(row);
  1477. continue;
  1478. }
  1479. }
  1480. }
  1481. rowssuc.add(row);
  1482. }
  1483. Rows rowsResult = new Rows();
  1484. Rows rowsdetail = new Rows();
  1485. Row rowresult = new Row();
  1486. int i = 0;
  1487. for (Row row : rowssuc) {
  1488. if (StringUtils.isNotBlank(row.getString("agentnum"))
  1489. && StringUtils.isNotBlank(row.getString("type"))
  1490. && StringUtils.isNotBlank(row.getString("rb"))
  1491. && StringUtils.isNotBlank(row.getString("outplace"))) {
  1492. rowresult.put("iteminfos", rowsdetail);
  1493. rowsResult.add(rowresult);
  1494. rowresult = new Row();
  1495. rowresult.put("type", row.getString("type"));
  1496. rowresult.put("depno", row.getString("depno"));
  1497. rowresult.put("agentnum", row.getString("agentnum"));
  1498. rowresult.put("remarks", row.getString("remarks"));
  1499. rowresult.put("payamount", StringUtils.isNotBlank(row.getString("payamount")) ? row.getDouble("payamount") : 0);
  1500. rowresult.put("paydiscountamount", StringUtils.isNotBlank(row.getString("paydiscountamount")) ? row.getDouble("paydiscountamount") : 0);
  1501. rowresult.put("rb", row.getString("rb"));
  1502. rowresult.put("outplace", row.getString("outplace"));
  1503. rowsdetail = new Rows();
  1504. Row rowdetail = new Row();
  1505. rowdetail.put("itemno", row.getString("itemno"));
  1506. rowdetail.put("stockno", row.getString("stockno"));
  1507. rowdetail.put("qty", row.getString("qty"));
  1508. rowdetail.put("defaultprice", row.getString("defaultprice"));
  1509. rowdetail.put("discountrate", row.getString("discountrate"));
  1510. rowsdetail.add(rowdetail);
  1511. } else {
  1512. Row rowdetail = new Row();
  1513. rowdetail.put("itemno", row.getString("itemno"));
  1514. rowdetail.put("stockno", row.getString("stockno"));
  1515. rowdetail.put("qty", row.getString("qty"));
  1516. rowdetail.put("defaultprice", row.getString("defaultprice"));
  1517. rowdetail.put("discountrate", row.getString("discountrate"));
  1518. rowsdetail.add(rowdetail);
  1519. }
  1520. i++;
  1521. if (i == rows.size()) {
  1522. rowresult.put("iteminfos", rowsdetail);
  1523. rowsResult.add(rowresult);
  1524. }
  1525. }
  1526. if (iserr) {
  1527. ExcelFactory excelFactory = new ExcelFactory("出入库单导入错误信息");
  1528. HashMap<String, String> map = new HashMap<String, String>();
  1529. map.put("type", "类型");
  1530. map.put("depno", "部门编号");
  1531. map.put("agentnum", "经销商编号");
  1532. map.put("remarks", "备注");
  1533. map.put("payamount", "扣款金额");
  1534. map.put("paydiscountamount", "优惠金额");
  1535. map.put("outplace", "发货地");
  1536. map.put("rb", "红蓝字");
  1537. map.put("itemno", "品号");
  1538. map.put("stockno", "仓库编号");
  1539. map.put("qty", "数量");
  1540. map.put("defaultprice", "原价");
  1541. map.put("discountrate", "折扣率");
  1542. map.put("msg", "错误信息");
  1543. ArrayList<String> colNameList = new ArrayList<String>();
  1544. HashMap<String, Class> keytypemap = new HashMap<String, Class>();
  1545. colNameList.add("type");
  1546. colNameList.add("depno");
  1547. colNameList.add("agentnum");
  1548. colNameList.add("remarks");
  1549. colNameList.add("payamount");
  1550. colNameList.add("paydiscountamount");
  1551. colNameList.add("outplace");
  1552. colNameList.add("rb");
  1553. colNameList.add("itemno");
  1554. colNameList.add("stockno");
  1555. colNameList.add("qty");
  1556. colNameList.add("defaultprice");
  1557. colNameList.add("discountrate");
  1558. colNameList.add("msg");
  1559. keytypemap.put("type", String.class);
  1560. keytypemap.put("depno", String.class);
  1561. keytypemap.put("agentnum", String.class);
  1562. keytypemap.put("remarks", String.class);
  1563. keytypemap.put("payamount", String.class);
  1564. keytypemap.put("paydiscountamount", String.class);
  1565. keytypemap.put("outplace", String.class);
  1566. keytypemap.put("rb", String.class);
  1567. keytypemap.put("itemno", String.class);
  1568. keytypemap.put("stockno", String.class);
  1569. keytypemap.put("qty", String.class);
  1570. keytypemap.put("defaultprice", String.class);
  1571. keytypemap.put("discountrate", String.class);
  1572. keytypemap.put("msg", String.class);
  1573. rowserr.setFieldList(colNameList);
  1574. rowserr.setFieldTypeMap(keytypemap);
  1575. addSheet(excelFactory, "Sheet1", rowserr, map);
  1576. Rows aa = saveToExcelAttachment(excelFactory);
  1577. String url = "";
  1578. if (!aa.isEmpty()) {
  1579. url = aa.get(0).getString("url");
  1580. }
  1581. return getSucReturnObject().setData(url).toString();
  1582. }
  1583. if (!rowsResult.isEmpty()) {
  1584. int a = 0;
  1585. for (Row row : rowsResult) {
  1586. if (a == 0) {
  1587. a++;
  1588. continue;
  1589. }
  1590. long st_stockbillid = createTableID("st_stockbill");
  1591. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill");
  1592. insertSQL.setUniqueid(st_stockbillid);
  1593. insertSQL.setSiteid(siteid);
  1594. insertSQL.setValue("sys_enterpriseid", agentsRowsMap.get(row.getString("agentnum")).get(0).getLong("sys_enterpriseid"));
  1595. insertSQL.setValue("rec_contactsid", agentsRowsMap.get(row.getString("agentnum")).get(0).getLong("contactsid"));
  1596. insertSQL.setValue("departmentid", depRowsMap.containsKey(row.getString("depno")) ? depRowsMap.get(row.getString("depno")).get(0).getLong("departmentid") : 0);
  1597. insertSQL.setValue("stockid", 0);
  1598. insertSQL.setValue("type", "销售出库");
  1599. insertSQL.setValue("typemx", "");
  1600. insertSQL.setValue("sa_supplierid", 0);
  1601. insertSQL.setValue("rb", 1);
  1602. insertSQL.setValue("remarks", row.getString("remarks"));
  1603. insertSQL.setDateValue("billdate");
  1604. insertSQL.setValue("billno", createBillCode("stockbill"));
  1605. insertSQL.setValue("outplace", row.getString("outplace"));
  1606. insertSQL.setValue("delivery", "到付");
  1607. insertSQL.setValue("invoice_enterprisename", agentsRowsMap.get(row.getString("agentnum")).get(0).getString("enterprisename"));
  1608. insertSQL.setValue("invoice_address", agentsRowsMap.get(row.getString("agentnum")).get(0).getString("address"));
  1609. insertSQL.setValue("invoice_taxno", agentsRowsMap.get(row.getString("agentnum")).get(0).getString("taxno"));
  1610. insertSQL.setValue("tracknumber", "");
  1611. insertSQL.setValue("isconfirm", 0);
  1612. insertSQL.setValue("period", getDate_Str().substring(0, 7));
  1613. insertSQL.setValue("createby", username);
  1614. insertSQL.setDateValue("createdate");
  1615. insertSQL.setValue("changeby", username);
  1616. insertSQL.setDateValue("changedate");
  1617. insertSQL.setValue("status", "新建");
  1618. insertSQL.setValue("payamount", row.getDouble("payamount"));
  1619. insertSQL.setValue("paydiscountamount", row.getDouble("paydiscountamount"));
  1620. sqlList.add(insertSQL.getSQL());
  1621. sqlList.add(DataContrlLog.createLog(this, "st_stockbill", st_stockbillid, "新增", "销售出库单新增成功").getSQL());
  1622. int j = 1;
  1623. BigDecimal payamount = BigDecimal.ZERO;
  1624. for (Row rowdetail : row.getRows("iteminfos")) {
  1625. payamount = payamount.add(row.getBigDecimal("undeliqty").multiply(row.getBigDecimal("price")));
  1626. insertSQL = SQLFactory.createInsertSQL(this, "st_stockbill_items");
  1627. insertSQL.setUniqueid(createTableID("st_stockbill_items"));
  1628. insertSQL.setSiteid(siteid);
  1629. insertSQL.setValue("rowno", j);
  1630. insertSQL.setValue("st_stockbillid", st_stockbillid);
  1631. insertSQL.setValue("sa_orderitemsid", 0);
  1632. insertSQL.setValue("itemid", itemRowsMap.get(rowdetail.getString("itemno")).get(0).getLong("itemid"));
  1633. insertSQL.setValue("sa_orderid", 0);
  1634. insertSQL.setValue("stockid", stockRowsMap.get(rowdetail.getString("stockno")).get(0).getLong("stockid"));
  1635. insertSQL.setValue("qty", rowdetail.getDouble("qty"));
  1636. insertSQL.setValue("discountrate", rowdetail.getDouble("discountrate"));
  1637. insertSQL.setValue("sa_dispatch_itemsid", 0);
  1638. insertSQL.setValue("defaultprice", rowdetail.getDouble("defaultprice"));
  1639. insertSQL.setValue("remarks", "");
  1640. insertSQL.setValue("itemno", rowdetail.getString("itemno"));
  1641. insertSQL.setValue("itemname", itemRowsMap.get(rowdetail.getString("itemno")).get(0).getString("itemname"));
  1642. insertSQL.setValue("model", itemRowsMap.get(rowdetail.getString("itemno")).get(0).getString("model"));
  1643. insertSQL.setValue("price", new BigDecimal(rowdetail.getDouble("defaultprice")).multiply(new BigDecimal(rowdetail.getDouble("discountrate"))));
  1644. insertSQL.setValue("amount", new BigDecimal(rowdetail.getDouble("defaultprice")).multiply(new BigDecimal(rowdetail.getDouble("discountrate"))).multiply(new BigDecimal(rowdetail.getDouble("qty"))));
  1645. insertSQL.setValue("untaxedprice", new BigDecimal(rowdetail.getDouble("defaultprice")).multiply(new BigDecimal(rowdetail.getDouble("discountrate"))).divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP));
  1646. insertSQL.setValue("untaxedamount", new BigDecimal(rowdetail.getDouble("qty")).multiply(new BigDecimal(rowdetail.getDouble("defaultprice"))).multiply(new BigDecimal(rowdetail.getDouble("discountrate"))).divide(new BigDecimal(1.13), 2, BigDecimal.ROUND_HALF_UP));
  1647. insertSQL.setValue("skucontrol", itemRowsMap.get(rowdetail.getString("itemno")).get(0).getBoolean("skucontrol"));
  1648. j++;
  1649. sqlList.add(insertSQL.getSQL());
  1650. }
  1651. }
  1652. }
  1653. if (!sqlList.isEmpty()) {
  1654. System.err.println(sqlList.toString());
  1655. dbConnect.runSqlUpdate(sqlList);
  1656. }
  1657. } catch (Exception e1) {
  1658. e1.printStackTrace();
  1659. return getErrReturnObject().setErrMsg(e1.getMessage()).toString();
  1660. }
  1661. return getSucReturnObject().toString();
  1662. }
  1663. public CashbillEntity getCashbillEntity(BigDecimal amount, BigDecimal discountamount, Long ownerid, String source, String sourcenotes, String remarks) throws YosException {
  1664. CashbillEntity entity = new CashbillEntity();
  1665. entity.setAmount(amount);
  1666. entity.setDiscountamountamount(discountamount);
  1667. entity.setOwnerid(ownerid);
  1668. entity.setOwnertable("st_stockbill");
  1669. entity.setSource(source);
  1670. entity.setRemarks(remarks);
  1671. entity.setSourcenote(sourcenotes);
  1672. return entity;
  1673. }
  1674. /**
  1675. * @param type
  1676. * @param rb
  1677. * @param fischeck
  1678. * @return
  1679. */
  1680. public boolean isinstock(String type, String rb, boolean fischeck) {
  1681. if (type.equals("其他出库") || type.equals("销售出库")
  1682. || type.equals("生产领料出库") || type.equals("委外领料出库")
  1683. || type.equals("返修出库")) {
  1684. if ((fischeck && rb.equals("1")) || (!fischeck && rb.equals("0"))) {
  1685. return false;
  1686. } else {
  1687. return true;
  1688. }
  1689. } else if (type.equals("其他入库") || type.equals("外购入库")
  1690. || type.equals("生产入库") || type.equals("委外入库")
  1691. || type.equals("返修入库")) {
  1692. if ((fischeck && rb.equals("1")) || (!fischeck && rb.equals("0"))) {
  1693. return true;
  1694. } else {
  1695. return false;
  1696. }
  1697. }
  1698. return false;
  1699. }
  1700. /**
  1701. * @param isinstock 是否增加库存
  1702. * @param type 库存更新类型 0为默认形式。1表示生产领料更新现场仓 2表示委外领料更新现场仓
  1703. * @throws YosException
  1704. */
  1705. // public void updateIcinvbal(boolean isinstock, int type,Long st_stockbillid) throws YosException {
  1706. // ArrayList<String> sqlList =new ArrayList();
  1707. // 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 ='"
  1708. // + st_stockbillid + "' and t1.siteid='" + siteid + "'");// 出入库表体
  1709. // ArrayList<Long> itemids = new ArrayList<Long>();
  1710. // itemids = icstockbilldetail.toArrayList("itemid",new ArrayList<>());
  1711. // itemids.add((long) 0);
  1712. // int i = 0;
  1713. // String sql="select * from st_invbal where itemid in"+itemids;
  1714. // sql = sql.replace("[", "(").replace("]", ")");
  1715. // Rows invbals = dbConnect.runSqlQuery(sql);
  1716. // RowsMap invbalsRowsMap=invbals.toRowsMap("itemid");
  1717. // for(Row row : icstockbilldetail){
  1718. // String itemid = row.getString("itemid");
  1719. // //String batchno = row.getString("batchno");
  1720. // //String fdcspno = row.getString("fdcspno");
  1721. // String stockid = row.getString("stockid");
  1722. //
  1723. //// if (type == 1 && !getSysVars().getBoolean("FISBATCHFORXC")) {
  1724. //// fdcspno = "**********";
  1725. //// fbatchno = "**********";
  1726. //// fstockno = getPaoSet("TDEPARTMENT").getPao(0)
  1727. //// .getPaoSet("TSTOCKXC").getPao(0).getString("fstockno");
  1728. //// icinvbal = detailpao.getPaoSet("$icinvbal", "icinvbal",
  1729. //// "fitemno='" + fitemno + "' and fstockno='" + fstockno
  1730. //// + "' and fdcspno='" + fdcspno
  1731. //// + "' and fbatchno='" + fbatchno + "'");
  1732. //// } else if (type == 2 && !getSysVars().getBoolean("FISBATCHFORXC")) {
  1733. //// fdcspno = "**********";
  1734. //// fbatchno = "**********";
  1735. //// fstockno = getPaoSet("TSUPPLIER").getPao(0)
  1736. //// .getPaoSet("TSTOCKXC").getPao(0).getString("fstockno");
  1737. //// icinvbal = detailpao.getPaoSet("$icinvbal", "icinvbal",
  1738. //// "fitemno='" + fitemno + "' and fstockno='" + fstockno
  1739. //// + "' and fdcspno='" + fdcspno
  1740. //// + "' and fbatchno='" + fbatchno + "'");
  1741. //// }
  1742. // BigDecimal qty = isinstock ? row.getBigDecimal("qty") : row.getBigDecimal("qty").negate();
  1743. // if(!invbalsRowsMap.containsKey(itemid)){
  1744. // SQLFactory sqlFactory = new SQLFactory(this, "即时库存新增");
  1745. // sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
  1746. // sqlFactory.addParameter("qty", qty);
  1747. // sqlFactory.addParameter("itemid", itemid);
  1748. // sqlFactory.addParameter("stockid", stockid);
  1749. // sqlFactory.addParameter("siteid",siteid);
  1750. // sqlFactory.addParameter("userid", userid);
  1751. // sqlFactory.addParameter("username", username);
  1752. // sqlList.add(sqlFactory.getSQL());
  1753. // }else{
  1754. // if(invbalsRowsMap.get(itemid).toRowsMap("stockid").containsKey(stockid)){
  1755. // SQLFactory sqlFactory = new SQLFactory(this, "即时库存更新");
  1756. // sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
  1757. // sqlFactory.addParameter("qty", invbalsRowsMap.get(itemid).toRowsMap("stockid").get(stockid).get(0).getBigDecimal("qty").add(qty));
  1758. // sqlFactory.addParameter("itemid", itemid);
  1759. // sqlFactory.addParameter("stockid", stockid);
  1760. // sqlFactory.addParameter("siteid",siteid);
  1761. // sqlFactory.addParameter("userid", userid);
  1762. // sqlFactory.addParameter("username", username);
  1763. // sqlList.add(sqlFactory.getSQL());
  1764. // }else{
  1765. // SQLFactory sqlFactory = new SQLFactory(new Invbal(), "即时库存新增");
  1766. // sqlFactory.addParameter("st_invbalid", createTableID("st_invbal"));
  1767. // sqlFactory.addParameter("qty", qty);
  1768. // sqlFactory.addParameter("itemid", itemid);
  1769. // sqlFactory.addParameter("stockid", stockid);
  1770. // sqlFactory.addParameter("siteid",siteid);
  1771. // sqlFactory.addParameter("userid", userid);
  1772. // sqlFactory.addParameter("username", username);
  1773. // sqlList.add(sqlFactory.getSQL());
  1774. // }
  1775. // }
  1776. // }
  1777. // dbConnect.runSqlUpdate(sqlList);
  1778. // }
  1779. /**
  1780. * 账户余额冻结
  1781. *
  1782. * @param addorsub
  1783. */
  1784. public ArrayList<String> updateAccountbalance_freez(long st_stockbillid, boolean addorsub) throws YosException {
  1785. ArrayList<String> sqllist = new ArrayList<>();
  1786. /******** 冻结数据 ********/
  1787. 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" +
  1788. " inner join sa_orderitems t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid\n" +
  1789. " inner join sa_order t3 on t2.sa_orderid=t3.sa_orderid and t2.siteid=t3.siteid\n" +
  1790. "\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" +
  1791. " where t1.st_stockbillid=" + st_stockbillid + " group by t4.sa_accountbalanceid,t3.sa_orderid,t3.sonum");
  1792. if (addorsub) {
  1793. for (Row row : rows) {
  1794. String sonum = row.getString("sonum");
  1795. long sa_orderid = row.getLong("sa_orderid");
  1796. long sa_accountbalanceid = row.getLong("sa_accountbalanceid");
  1797. BigDecimal amount = row.getBigDecimal("amount");
  1798. Rows accountbalancefreezrows = dbConnect.runSqlQuery("select sa_accountbalance_freezid from sa_accountbalance_freez where sourceid=" + sa_orderid + " and sourcetable='sa_order' and siteid='" + siteid + "'");
  1799. sqllist.add("update sa_accountbalance set freezamount=ifnull(freezamount,0)+" + amount + " where sa_accountbalanceid=" + sa_accountbalanceid + " and siteid='" + siteid + "'");
  1800. if (accountbalancefreezrows.isNotEmpty()) {
  1801. sqllist.add("update sa_accountbalance_freez set amount=amount+" + amount + " where sa_accountbalance_freezid=" + accountbalancefreezrows.get(0).getLong("sa_accountbalance_freezid"));
  1802. } else {
  1803. long sa_accountbalance_freezid = createTableID("sa_accountbalance_freez");
  1804. InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_accountbalance_freez");
  1805. insertSQL.setUniqueid(sa_accountbalance_freezid);
  1806. insertSQL.setSiteid(siteid);
  1807. insertSQL.setValue("sa_accountbalanceid", sa_accountbalanceid);
  1808. insertSQL.setValue("sourcetable", "sa_order");
  1809. insertSQL.setValue("sourceid", sa_orderid);
  1810. insertSQL.setValue("amount", amount);
  1811. insertSQL.setValue("remarks", "由订单" + sonum + "审核时冻结");
  1812. insertSQL.setValue("createby", username);
  1813. insertSQL.setDateValue("createdate");
  1814. sqllist.add(insertSQL.getSQL());
  1815. }
  1816. }
  1817. } else {
  1818. for (Row row : rows) {
  1819. long sa_orderid = row.getLong("sa_orderid");
  1820. long sa_accountbalanceid = row.getLong("sa_accountbalanceid");
  1821. BigDecimal amount = row.getBigDecimal("amount");
  1822. Rows accountbalancefreezrows = dbConnect.runSqlQuery("select sa_accountbalance_freezid,amount from sa_accountbalance_freez where sourceid=" + sa_orderid + " and sourcetable='sa_order' and siteid='" + siteid + "'");
  1823. if (accountbalancefreezrows.size() > 0) {
  1824. sqllist.add("update sa_accountbalance set freezamount=ifnull(freezamount,0)-" + amount + " where sa_accountbalanceid=" + sa_accountbalanceid);
  1825. sqllist.add("update sa_accountbalance_freez set amount=amount-" + amount + " where sa_accountbalance_freezid=" + accountbalancefreezrows.get(0).getLong("sa_accountbalance_freezid"));
  1826. }
  1827. }
  1828. }
  1829. return sqllist;
  1830. }
  1831. public String[] getDistinctArray(String[] arrays) {
  1832. ArrayList<String> a = new ArrayList<String>();
  1833. for (String array : arrays) {
  1834. if (!a.contains(array)) {
  1835. a.add(array);
  1836. }
  1837. }
  1838. int size = a.size();
  1839. return (String[]) a.toArray(new String[size]);
  1840. }
  1841. public String getPeriod(boolean isjudge, Date date) throws YosException {
  1842. String preioddate = new SimpleDateFormat("yyyy-MM-dd").format(date);
  1843. Rows rows = dbConnect.runSqlQuery("select CONCAT_WS('-', year, LPAD(month, 2, '0')) period from st_period where begdate<='" + preioddate + "' and enddate>='" + preioddate + "'");
  1844. if (rows.size() != 1) {
  1845. if (isjudge) {
  1846. throw new YosException("单据日期所属会计期间未生成");
  1847. } else {
  1848. return "null";
  1849. }
  1850. } else {
  1851. return rows.get(0).getString("period");
  1852. }
  1853. }
  1854. public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows,
  1855. HashMap<String, String> titlemap) {
  1856. ArrayList<String> keylist = datarows.getFieldList();
  1857. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
  1858. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  1859. XSSFCellStyle xssfCellStyle1 = xssfFWorkbook.createCellStyle();
  1860. XSSFFont font = xssfFWorkbook.createFont();
  1861. font.setColor((short) 0xa);
  1862. font.setFontHeightInPoints((short) 12);
  1863. font.setBold(true);
  1864. xssfCellStyle1.setFont(font);
  1865. CellStyle style = xssfFWorkbook.createCellStyle();
  1866. DataFormat format = xssfFWorkbook.createDataFormat();
  1867. style.setDataFormat(format.getFormat("@"));
  1868. // 对单独某一列进行样式赋值,第一个参数为列数,第二个参数为样式
  1869. for (int i = 0; i <= 13; i++) {
  1870. sheet.setDefaultColumnStyle(i, style);
  1871. }
  1872. ExportExcelSpecial.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
  1873. XSSFCellStyle titleCellStyle1 = ExportExcelSpecial.createTitleCellStyle1(xssfFWorkbook);
  1874. XSSFCellStyle titleCellStyle2 = ExportExcelSpecial.createTitleCellStyle2(xssfFWorkbook);
  1875. XSSFCellStyle titleCellStyle3 = ExportExcelSpecial.createTitleCellStyle3(xssfFWorkbook);
  1876. ExportExcelSpecial.batchDetailErr(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook);// 写入标题
  1877. for (int n = 0; n < datarows.size(); n++) {
  1878. Row row = datarows.get(n);
  1879. XSSFRow datarow = sheet.createRow(n + 3);
  1880. for (int i1 = 0; i1 < keylist.size(); i1++) {
  1881. Class fieldclazztype = datarows.getFieldMeta(keylist.get(i1)).getFieldtype();
  1882. if (fieldclazztype == Integer.class) {
  1883. datarow.createCell(i1).setCellValue(row.getInteger((String) keylist.get(i1)));
  1884. } else if (fieldclazztype == Long.class) {
  1885. datarow.createCell(i1).setCellValue(row.getLong((String) keylist.get(i1)));
  1886. } else if (fieldclazztype == Float.class) {
  1887. datarow.createCell(i1).setCellValue(row.getFloat((String) keylist.get(i1)));
  1888. } else if (fieldclazztype == Double.class) {
  1889. datarow.createCell(i1).setCellValue(row.getDouble((String) keylist.get(i1)));
  1890. } else {
  1891. datarow.createCell(i1).setCellValue(row.getString((String) keylist.get(i1)));
  1892. }
  1893. if (i1 == 13) {
  1894. datarow.getCell(i1).setCellStyle(xssfCellStyle1);
  1895. }
  1896. }
  1897. }
  1898. return sheet;
  1899. }
  1900. public static boolean isNumeric(String strNum) {
  1901. if (strNum == null) {
  1902. return false;
  1903. }
  1904. return strNum.matches("-?\\d+(\\.\\d+)?");
  1905. }
  1906. }