stockbill.java 129 KB

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