OrderItems.java 76 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398
  1. package restcontroller.webmanage.sale.order;
  2. import beans.accountbalance.Accountbalance;
  3. import beans.accountbalance.CashbillEntity;
  4. import beans.brand.Brand;
  5. import beans.datacontrllog.DataContrlLog;
  6. import beans.enterprise.Enterprise;
  7. import beans.itemprice.ItemPrice;
  8. import beans.parameter.Parameter;
  9. import beans.uploaderpdata.UploadDataToERP;
  10. import com.alibaba.fastjson.JSONArray;
  11. import com.alibaba.fastjson.JSONObject;
  12. import common.Controller;
  13. import common.DataFunction;
  14. import common.YosException;
  15. import common.annotation.API;
  16. import common.annotation.CACHEING;
  17. import common.annotation.CACHEING_CLEAN;
  18. import common.data.*;
  19. import restcontroller.R;
  20. import restcontroller.webmanage.sale.aftersalesmag.twriteoffbill_orderchange;
  21. import restcontroller.webmanage.sale.rebate.Rebate;
  22. import restcontroller.webmanage.sale.toolbill.ToolBill;
  23. import utility.ERPDocking;
  24. import java.io.IOException;
  25. import java.math.BigDecimal;
  26. import java.util.ArrayList;
  27. import java.util.HashMap;
  28. import static beans.order.Order.*;
  29. /**
  30. * 销售订单商品明细表
  31. */
  32. public class OrderItems extends Controller {
  33. /**
  34. * 构造函数
  35. *
  36. * @param content
  37. */
  38. public OrderItems(JSONObject content) throws YosException {
  39. super(content);
  40. }
  41. @API(title = "新增或更新", apiversion = R.ID20221109093602.v1.class, intervaltime = 200)
  42. @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class})
  43. public String insertOrUpdate() throws YosException {
  44. Long sa_orderid = content.getLong("sa_orderid");
  45. Long sys_enterpriseid = content.getLong("sys_enterpriseid");
  46. JSONArray items = content.getJSONArray("items");
  47. //辅助类
  48. OrderItemsHelper orderItemsHelper = new OrderItemsHelper(this);
  49. ArrayList<String> sqlList = new ArrayList<>();
  50. Rows orderRows = getOrderRows(this, sa_orderid);
  51. if (orderRows.isEmpty()) {
  52. return getErrReturnObject().setErrMsg("数据不存在,无法添加").toString();
  53. } else {
  54. if (!orderRows.get(0).getString("status").equals("新建") && !orderRows.get(0).getString("status").equals("预提交")) {
  55. return getErrReturnObject().setErrMsg("非新建或预提交状态无法操作").toString();
  56. }
  57. }
  58. //通过版本更新订单表头数据
  59. beans.order.Order.updateOrderWithVersion(this);
  60. String type = orderRows.get(0).getString("type");
  61. Long sa_promotionid = orderRows.get(0).getLong("sa_promotionid");
  62. //查询活动
  63. Rows promotionitems = dbConnect.runSqlQuery("select * from sa_promotion_items where siteid='" + siteid + "' and sa_promotionid=" + sa_promotionid);
  64. //批量查询商品信息
  65. RowsMap itemRowsMap = orderItemsHelper.getItemRowsMap(items);
  66. BigDecimal sumqty = BigDecimal.ZERO;
  67. for (Object obj : items) {
  68. JSONObject item = (JSONObject) obj;
  69. Long itemid = item.getLong("itemid");
  70. Long sa_orderitemsid = item.getLong("sa_orderitemsid");
  71. BigDecimal qty = item.getBigDecimalValue("qty");
  72. sumqty = sumqty.add(qty);
  73. //商品信息
  74. Row itemRow = getItemRow(itemid);
  75. //是否符合商品起订量和增量判断
  76. orderItemsHelper.compareQty(type, itemRowsMap, item, itemRow, promotionitems);
  77. BigDecimal price1 = new BigDecimal(0);
  78. // SQLFactory sqlFactory = new SQLFactory(this, "订单商品明细_新增");
  79. Boolean isInsert = true;
  80. JSONArray customproperties = new JSONArray();
  81. String spec = "";
  82. if (sa_orderitemsid <= 0) {
  83. //获取定制属性
  84. customproperties = orderItemsHelper.getCustomProperties(itemRowsMap, item);
  85. spec = orderItemsHelper.getCustomSpec(itemRowsMap, item);
  86. Rows rows = dbConnect.runSqlQuery("SELECT sa_orderitemsid,price from sa_orderitems WHERE siteid='" + siteid + "' and itemid=" + itemid + " and sa_orderid=" + sa_orderid + " and sa_promotion_itemsid=" + item.getLongValue("sa_promotion_itemsid"));
  87. if (rows.isEmpty()) {
  88. sa_orderitemsid = createTableID("sa_orderitems");
  89. } else {
  90. //System.out.println(beans.order.Order.getDefaultIsRepeatValue(siteid, type));
  91. if (beans.order.Order.getDefaultIsRepeatValue(siteid, type)) {
  92. sa_orderitemsid = createTableID("sa_orderitems");
  93. isInsert = true;
  94. } else {
  95. price1 = rows.get(0).getBigDecimal("price");
  96. sa_orderitemsid = rows.get(0).getLong("sa_orderitemsid");
  97. isInsert = false;
  98. }
  99. }
  100. } else {
  101. Rows rows = dbConnect.runSqlQuery("SELECT sa_orderitemsid,price from sa_orderitems WHERE siteid='" + siteid + "' and sa_orderitemsid=" + sa_orderitemsid);
  102. if (rows.isNotEmpty()) {
  103. price1 = rows.get(0).getBigDecimal("price");
  104. }
  105. isInsert = false;
  106. }
  107. BigDecimal defaultprice;
  108. BigDecimal price;
  109. BigDecimal saleprice;
  110. //价格
  111. ItemPrice itemPrice = ItemPrice.getItemPrice(this, sys_enterpriseid, itemid);
  112. if (!item.containsKey("defaultprice")) {
  113. defaultprice = orderItemsHelper.getDefaultprice(itemPrice);
  114. price = orderItemsHelper.getPrice(orderRows.get(0), itemPrice, item, itemRowsMap);
  115. saleprice = orderItemsHelper.getSalePrice(orderRows.get(0), itemPrice);
  116. } else {
  117. defaultprice = item.getBigDecimalValue("defaultprice");
  118. price = item.getBigDecimalValue("price");
  119. saleprice = orderItemsHelper.getSalePrice(orderRows.get(0), itemPrice);
  120. if (price.compareTo(price1) != 0) {
  121. sqlList.add(DataContrlLog.createLog(this, "sa_order", sa_orderid, "订单商品【" + itemRow.getString("itemname") + "】由单价:" + price1 + "修改为单价:" + price, "订单修改单价").getSQL());
  122. }
  123. }
  124. if (price.compareTo(BigDecimal.ZERO) < 0) {
  125. return getErrReturnObject().setErrMsg("价格不可小于0").toString();
  126. }
  127. if (isInsert) {
  128. sqlList.add(orderItemsHelper.getInsertSQL(customproperties, sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice, itemPrice.getMarketprice(), spec, promotionitems).getSQL());
  129. } else {
  130. sqlList.add(orderItemsHelper.getUpdateSQL(sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice).getSQL());
  131. }
  132. }
  133. if (type.equals("促销订单")) {
  134. Rows promotionRows = dbConnect.runSqlQuery("select * from sa_promotion where siteid='" + siteid + "' and sa_promotionid=" + sa_promotionid);
  135. if (!promotionRows.isEmpty()) {
  136. if (promotionRows.get(0).getString("type").equals("打包促销")) {
  137. BigDecimal orderaddqty = promotionRows.get(0).getBigDecimal("orderaddqty");
  138. BigDecimal orderminqty = promotionRows.get(0).getBigDecimal("orderminqty");
  139. if (((sumqty.subtract(orderminqty)).remainder(orderaddqty)).compareTo(BigDecimal.ZERO) != 0 || sumqty.compareTo(orderminqty) < 0) {
  140. return getErrReturnObject().setErrMsg("不符合促销活动订购数量规则,修改不成功").toString();
  141. }
  142. }
  143. }
  144. }
  145. dbConnect.runSqlUpdate(sqlList);
  146. //重新排序
  147. updateRowNo(sa_orderid);
  148. //居间费设置
  149. updateRebateFee(sa_orderid);
  150. //调整价格(返利金)
  151. if (orderRows.get(0).getBoolean("rebate_used")) {
  152. setRebateAmount(this, sa_orderid, getMaxUsedRebateAmount(this, sa_orderid));
  153. adjustLastRebateAmount(this, sa_orderid);
  154. }
  155. //更新订单扣款信息
  156. updateAccountclassinfos(sa_orderid);
  157. if (systemclient.equalsIgnoreCase("wechatsaletool")) {
  158. Rows rows = dbConnect.runSqlQuery("SELECT sa_orderitemsid,sa_orderitems_v,itemid from sa_orderitems WHERE sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'");
  159. return getSucReturnObject().setData(rows).toString();
  160. }
  161. //查询商品费用方案方法
  162. SQLFactory sqlFactory = new SQLFactory(this, "查询商品费用方案方法");
  163. sqlFactory.addParameter("siteid", siteid);
  164. sqlFactory.addParameter("sa_orderid", sa_orderid);
  165. Rows rows = dbConnect.runSqlQuery(sqlFactory);
  166. for (Row row : rows) {
  167. DataFunction df = DataFunction.get(this, row.getString("functionname"));
  168. df.addParameter("sa_orderid", sa_orderid);
  169. df.action();
  170. }
  171. return getSucReturnObject().toString();
  172. }
  173. /**
  174. * 更新订单扣款信息
  175. */
  176. public String updateAccountclassinfos(Long sa_orderid) throws YosException {
  177. Rows orderRows = getOrderRows(this, sa_orderid);
  178. if (orderRows.isEmpty()) {
  179. return "订单不存在";
  180. }
  181. String type = "";
  182. Rows promotionrows = dbConnect.runSqlQuery("select * from sa_promotion where siteid='" + siteid + "' and sa_promotionid=" + orderRows.get(0).getLong("sa_promotionid"));
  183. Rows promotionenterpriserows = dbConnect.runSqlQuery("select * from sa_promotion_auth where siteid='" + siteid + "'and sys_enterpriseid=" + orderRows.get(0).getLong("pay_enterpriseid") + " and sa_promotionid=" + orderRows.get(0).getLong("sa_promotionid"));
  184. if (promotionrows.isNotEmpty()) {
  185. type = promotionrows.get(0).getString("type");
  186. }
  187. JSONArray jsonArray = new JSONArray();
  188. BigDecimal orderamount = getAmount(this, sa_orderid);
  189. //System.out.println(orderamount);
  190. Rows accountclassrows = dbConnect.runSqlQuery("select t1.*,ifnull(t2.balance,0) balance,ifnull(t2.creditquota,0) creditquota from sa_accountclass t1 left join sa_accountbalance t2 on t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid and t2.sys_enterpriseid=" + orderRows.get(0).getLong("pay_enterpriseid") + " where isused=1 and t1.siteid='" + siteid + "' and t1.sa_accountclassid=" + orderRows.get(0).getLong("sa_accountclassid"));
  191. if (accountclassrows.isEmpty()) {
  192. return "未找到扣款账户";
  193. }
  194. JSONObject jsonObject = new JSONObject();
  195. if (type.equals("返利促销")) {
  196. BigDecimal associationamount = promotionrows.get(0).getBigDecimal("associationamount");
  197. long associationaccountclassid = promotionrows.get(0).getLong("associationaccountclassid");
  198. Rows associationaccountclassrows = dbConnect.runSqlQuery("select t1.*,ifnull(t2.balance,0) balance,ifnull(t2.creditquota,0) creditquota from sa_accountclass t1 left join sa_accountbalance t2 on t1.sa_accountclassid=t2.sa_accountclassid and t1.siteid=t2.siteid and t2.sys_enterpriseid=" + orderRows.get(0).getLong("pay_enterpriseid") + " where isused=1 and t1.siteid='" + siteid + "' and t1.sa_accountclassid=" + associationaccountclassid);
  199. if (promotionenterpriserows.isNotEmpty()) {
  200. if (promotionenterpriserows.get(0).getBoolean("islimit")) {
  201. BigDecimal limitamount = promotionenterpriserows.get(0).getBigDecimal("limitamount");
  202. BigDecimal saledamount = promotionenterpriserows.get(0).getBigDecimal("saledamount");
  203. if (orderamount.compareTo(limitamount.subtract(saledamount)) <= 0) {
  204. //全部优先账户扣款
  205. jsonObject.put("amount", orderamount);
  206. jsonObject.put("sa_accountclassid", accountclassrows.get(0).getLong("sa_accountclassid"));
  207. jsonObject.put("accountname", accountclassrows.get(0).getString("accountname"));
  208. jsonObject.put("balance", accountclassrows.get(0).getBigDecimal("balance"));
  209. jsonObject.put("creditquota", accountclassrows.get(0).getBigDecimal("creditquota"));
  210. jsonArray.add(jsonObject);
  211. } else if (orderamount.compareTo(limitamount.subtract(saledamount)) > 0) {
  212. //全部优先账户扣款
  213. jsonObject.put("amount", limitamount.subtract(saledamount));
  214. jsonObject.put("sa_accountclassid", accountclassrows.get(0).getLong("sa_accountclassid"));
  215. jsonObject.put("accountname", accountclassrows.get(0).getString("accountname"));
  216. jsonObject.put("balance", accountclassrows.get(0).getBigDecimal("balance"));
  217. jsonObject.put("creditquota", accountclassrows.get(0).getBigDecimal("creditquota"));
  218. jsonArray.add(jsonObject);
  219. JSONObject associationjsonObject = new JSONObject();
  220. associationjsonObject.put("amount", orderamount.subtract((limitamount.subtract(saledamount))));
  221. associationjsonObject.put("sa_accountclassid", associationaccountclassrows.get(0).getLong("sa_accountclassid"));
  222. associationjsonObject.put("accountname", associationaccountclassrows.get(0).getString("accountname"));
  223. associationjsonObject.put("balance", associationaccountclassrows.get(0).getBigDecimal("balance"));
  224. associationjsonObject.put("creditquota", associationaccountclassrows.get(0).getBigDecimal("creditquota"));
  225. jsonArray.add(associationjsonObject);
  226. } else {
  227. return "未知错误,请联系管理员";
  228. }
  229. }
  230. } else {
  231. //全部优先账户扣款
  232. jsonObject.put("amount", orderamount);
  233. jsonObject.put("sa_accountclassid", accountclassrows.get(0).getLong("sa_accountclassid"));
  234. jsonObject.put("accountname", accountclassrows.get(0).getString("accountname"));
  235. jsonObject.put("balance", accountclassrows.get(0).getBigDecimal("balance"));
  236. jsonObject.put("creditquota", accountclassrows.get(0).getBigDecimal("creditquota"));
  237. jsonArray.add(jsonObject);
  238. }
  239. } else {
  240. //全部优先账户扣款
  241. jsonObject.put("amount", orderamount);
  242. jsonObject.put("sa_accountclassid", accountclassrows.get(0).getLong("sa_accountclassid"));
  243. jsonObject.put("accountname", accountclassrows.get(0).getString("accountname"));
  244. jsonObject.put("balance", accountclassrows.get(0).getBigDecimal("balance"));
  245. jsonObject.put("creditquota", accountclassrows.get(0).getBigDecimal("creditquota"));
  246. jsonArray.add(jsonObject);
  247. }
  248. //System.out.println(jsonArray.toJSONString());
  249. dbConnect.runSqlUpdate("update sa_order set sa_accountclassinfos='" + jsonArray + "' where sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'");
  250. return "true";
  251. }
  252. /**
  253. * 更新居间费信息
  254. */
  255. public void updateRebateFee(Long sa_orderid) throws YosException {
  256. Rows orderRows = getOrderRows(this, sa_orderid);
  257. if (orderRows.isEmpty()) {
  258. return;
  259. }
  260. Long sa_projectid = orderRows.get(0).getLong("sa_projectid");
  261. Rows contractRows = dbConnect.runSqlQuery("SELECT * from sa_contract WHERE sa_projectid = " + sa_projectid + " and type='居间' and status='审核'");
  262. if (contractRows.isEmpty()) {
  263. return;
  264. }
  265. Long sa_contractid = contractRows.get(0).getLong("sa_contractid");
  266. Rows partiesRows = dbConnect.runSqlQuery("SELECT sys_enterpriseid from sa_project_parties WHERE type ='居间服务商' and sa_projectid = " + sa_projectid + " and siteid ='" + siteid + "'");
  267. if (partiesRows.isEmpty()) {
  268. return;
  269. }
  270. Long sys_enterpriseid_temp = partiesRows.get(0).getLong("sys_enterpriseid");
  271. content.put("sys_enterpriseid", sys_enterpriseid_temp);
  272. content.put("ownertable", "sa_order");
  273. content.put("ownerid", sa_orderid);
  274. content.put("billdate", "");
  275. content.put("remarks", "");
  276. content.put("sa_contractid", sa_contractid);
  277. content.put("settlementmode", "线上");
  278. content.put("sa_rebatesettlementid", 0);
  279. new Rebate(content).insertOrUpdate();
  280. }
  281. @API(title = "详情", apiversion = R.ID20221110134302.v1.class)
  282. @CACHEING
  283. public String selectDetail() throws YosException {
  284. Long sa_orderitemsid = content.getLong("sa_orderitemsid");
  285. SQLFactory sqlFactory = new SQLFactory(this, "订单商品明细_详情");
  286. sqlFactory.addParameter("siteid", siteid);
  287. sqlFactory.addParameter_in("sa_orderitemsid", sa_orderitemsid);
  288. String sql = sqlFactory.getSQL();
  289. Rows rows = dbConnect.runSqlQuery(sql);
  290. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  291. return getSucReturnObject().setData(row).toString();
  292. }
  293. @API(title = "删除", apiversion = R.ID20221109093702.v1.class)
  294. @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class})
  295. public String delete() throws YosException {
  296. Long sa_orderid = content.getLong("sa_orderid");
  297. Rows orderRows = getOrderRows(this, sa_orderid);
  298. if (orderRows.isEmpty()) {
  299. return getErrReturnObject().setErrMsg("数据不存在,无法添加").toString();
  300. } else {
  301. if (!orderRows.get(0).getString("status").equals("新建")) {
  302. return getErrReturnObject().setErrMsg("非新建状态无法删除").toString();
  303. }
  304. }
  305. //通过版本更新订单表头数据
  306. beans.order.Order.updateOrderWithVersion(this);
  307. JSONArray sa_orderitemsids = content.getJSONArray("sa_orderitemsids");
  308. SQLFactory sqlFactory = new SQLFactory(this, "订单商品明细_删除");
  309. sqlFactory.addParameter("siteid", siteid);
  310. sqlFactory.addParameter_in("sa_orderitemsid", sa_orderitemsids.toArray());
  311. String sql = sqlFactory.getSQL();
  312. dbConnect.runSqlUpdate(sql);
  313. //重新排序
  314. updateRowNo(sa_orderid);
  315. //居间费设置
  316. updateRebateFee(sa_orderid);
  317. //调整价格(返利金)
  318. if (orderRows.get(0).getBoolean("rebate_used")) {
  319. setRebateAmount(this, sa_orderid, getMaxUsedRebateAmount(this, sa_orderid));
  320. adjustLastRebateAmount(this, sa_orderid);
  321. }
  322. // else {
  323. // dbConnect.runSqlUpdate("UPDATE sa_orderitems SET amount=amount-rebateamount,price=amount/qty WHERE sa_orderid='" + sa_orderid + "' and siteid='" + siteid + "' and qty!=0");
  324. // dbConnect.runSqlUpdate("UPDATE sa_orderitems SET amount=0 WHERE sa_orderid='" + sa_orderid + "' and siteid='" + siteid + "' and qty=0");
  325. // }
  326. updateAccountclassinfos(sa_orderid);
  327. return getSucReturnObject().toString();
  328. }
  329. @API(title = "商品行冻结", apiversion = R.ID20230508093003.v1.class)
  330. @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class})
  331. public String freeze() throws YosException {
  332. Long sa_orderid = content.getLong("sa_orderid");
  333. //通过版本更新订单表头数据
  334. beans.order.Order.updateOrderWithVersion(this);
  335. JSONArray sa_orderitemsids = content.getJSONArray("sa_orderitemsids");
  336. boolean isfreeze = content.getBooleanValue("isfreeze");
  337. Rows orderRows = dbConnect.runSqlQuery("select * from sa_order where sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'");
  338. if (!orderRows.isEmpty()) {
  339. if (!orderRows.get(0).getString("status").equals("审核")) {
  340. if (isfreeze) {
  341. return getErrReturnObject().setErrMsg("非审核状态无法进行冻结").toString();
  342. } else {
  343. return getErrReturnObject().setErrMsg("非审核状态无法进行反冻结").toString();
  344. }
  345. }
  346. } else {
  347. return getErrReturnObject().setErrMsg("该订单不存在").toString();
  348. }
  349. SQLFactory sqlFactory;
  350. if (isfreeze) {
  351. sqlFactory = new SQLFactory(this, "订单商品明细_冻结");
  352. } else {
  353. sqlFactory = new SQLFactory(this, "订单商品明细_反冻结");
  354. }
  355. sqlFactory.addParameter("siteid", siteid);
  356. sqlFactory.addParameter_in("sa_orderitemsid", sa_orderitemsids.toArray());
  357. String sql = sqlFactory.getSQL();
  358. //System.out.println(sql);
  359. dbConnect.runSqlUpdate(sql);
  360. return getSucReturnObject().toString();
  361. }
  362. @API(title = "商品行折扣变更", apiversion = R.ID20230508101703.v1.class)
  363. @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class})
  364. public String updateOrderItemsDiscountrate() throws YosException {
  365. Long sa_orderid = content.getLong("sa_orderid");
  366. BigDecimal discountrate = content.getBigDecimal("discountrate");
  367. JSONArray itemids = content.getJSONArray("itemids");
  368. Rows orderRows = dbConnect.runSqlQuery("select * from sa_order where sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'");
  369. if (!orderRows.isEmpty()) {
  370. if (!orderRows.get(0).getString("status").equals("新建") && !orderRows.get(0).getString("status").equals("预提交")) {
  371. return getErrReturnObject().setErrMsg("非新建或预提交状态无法进行商品行折扣变更").toString();
  372. }
  373. } else {
  374. return getErrReturnObject().setErrMsg("该订单不存在").toString();
  375. }
  376. if (!(discountrate.compareTo(BigDecimal.ZERO) > 0 && discountrate.compareTo(new BigDecimal(1)) <= 0)) {
  377. return getErrReturnObject().setErrMsg("折扣必须在0-1之间").toString();
  378. }
  379. //通过版本更新订单表头数据
  380. beans.order.Order.updateOrderWithVersion(this);
  381. String sql;
  382. if (itemids.size() == 0) {
  383. sql = "select * from sa_orderitems where sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'";
  384. } else {
  385. sql = "select * from sa_orderitems where sa_orderid=" + sa_orderid + " and siteid='" + siteid + "' and itemid in " + itemids.toJSONString();
  386. sql = sql.replace("[", "(").replace("]", ")");
  387. }
  388. Rows orderItemsRows = dbConnect.runSqlQuery(sql);
  389. ArrayList<String> sqlList = new ArrayList<>();
  390. if (!orderItemsRows.isEmpty()) {
  391. for (Row row : orderItemsRows) {
  392. BigDecimal price = row.getBigDecimal("price").multiply(discountrate);
  393. BigDecimal amount = row.getBigDecimal("amount").multiply(discountrate);
  394. sqlList.add("update sa_orderitems set price=" + price + ",amount=" + amount + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
  395. }
  396. }
  397. sqlList.add(DataContrlLog.createLog(this, "sa_order", sa_orderid, "订单整单折扣变更【" + discountrate + "】", "整单折扣").getSQL());
  398. dbConnect.runSqlUpdate(sqlList);
  399. updateAccountclassinfos(sa_orderid);
  400. return getSucReturnObject().toString();
  401. }
  402. @API(title = "商品行价格刷新(变为原价)", apiversion = R.ID20230518151803.v1.class)
  403. @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class})
  404. public String updateOrderItemsPrice() throws YosException {
  405. Long sa_orderid = content.getLong("sa_orderid");
  406. JSONArray itemids = content.getJSONArray("itemids");
  407. Rows orderRows = dbConnect.runSqlQuery("select * from sa_order where sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'");
  408. if (!orderRows.isEmpty()) {
  409. if (!orderRows.get(0).getString("status").equals("新建") && !orderRows.get(0).getString("status").equals("预提交")) {
  410. return getErrReturnObject().setErrMsg("非新建或预提交状态无法进行商品行价格刷新").toString();
  411. }
  412. } else {
  413. return getErrReturnObject().setErrMsg("该订单不存在").toString();
  414. }
  415. //通过版本更新订单表头数据
  416. beans.order.Order.updateOrderWithVersion(this);
  417. String sql;
  418. if (itemids.size() == 0) {
  419. sql = "select * from sa_orderitems where sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'";
  420. } else {
  421. sql = "select * from sa_orderitems where sa_orderid=" + sa_orderid + " and siteid='" + siteid + "' and itemid in " + itemids.toJSONString();
  422. sql = sql.replace("[", "(").replace("]", ")");
  423. }
  424. Rows orderItemsRows = dbConnect.runSqlQuery(sql);
  425. ArrayList<String> sqlList = new ArrayList<>();
  426. if (!orderItemsRows.isEmpty()) {
  427. for (Row row : orderItemsRows) {
  428. //价格
  429. ItemPrice itemPrice = ItemPrice.getItemPrice(this, orderRows.get(0).getLong("sys_enterpriseid"), row.getLong("itemid"));
  430. BigDecimal price = itemPrice.getPrice();
  431. BigDecimal amount = row.getBigDecimal("qty").multiply(price);
  432. sqlList.add("update sa_orderitems set price=" + price + ",amount=" + amount + " where sa_orderitemsid=" + row.getLong("sa_orderitemsid"));
  433. }
  434. }
  435. sqlList.add(DataContrlLog.createLog(this, "sa_order", sa_orderid, "订单商品行价格刷新(恢复原价)", "订单商品行价格刷新").getSQL());
  436. dbConnect.runSqlUpdate(sqlList);
  437. updateAccountclassinfos(sa_orderid);
  438. return getSucReturnObject().toString();
  439. }
  440. @API(title = "关闭", apiversion = R.ID20221109093802.v1.class)
  441. @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class})
  442. public String close() throws YosException {
  443. Long sa_orderid = content.getLong("sa_orderid");
  444. //通过版本更新订单表头数据
  445. beans.order.Order.updateOrderWithVersion(this);
  446. JSONArray sa_orderitemsids = content.getJSONArray("sa_orderitemsids");
  447. SQLFactory sqlFactory = new SQLFactory(this, "订单商品明细_行关闭");
  448. sqlFactory.addParameter("siteid", siteid);
  449. sqlFactory.addParameter("userid", userid);
  450. sqlFactory.addParameter("username", username);
  451. sqlFactory.addParameter("closereason", content.getStringValue("closereason"));
  452. sqlFactory.addParameter_in("sa_orderitemsid", sa_orderitemsids.toArray());
  453. dbConnect.runSqlUpdate(sqlFactory);
  454. //重新排序
  455. updateRowNo(sa_orderid);
  456. return getSucReturnObject().toString();
  457. }
  458. @API(title = "查询列表", apiversion = R.ID20221109093902.v1.class)
  459. public String selectList() throws YosException, IOException {
  460. StringBuffer where = new StringBuffer(" 1=1 ");
  461. if (content.containsKey("where")) {
  462. JSONObject whereObject = content.getJSONObject("where");
  463. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  464. where.append(" and(");
  465. where.append("t1.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  466. where.append("or t1.itemname like'%").append(whereObject.getString("condition")).append("%' ");
  467. where.append("or t1.model like'%").append(whereObject.getString("condition")).append("%' ");
  468. where.append("or t3.spec like'%").append(whereObject.getString("condition")).append("%' ");
  469. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  470. where.append(")");
  471. }
  472. }
  473. Long sa_orderid = content.getLong("sa_orderid");
  474. Rows orderRows = getOrderRows(this, sa_orderid);
  475. if (orderRows.isNotEmpty()) {
  476. sys_enterpriseid = orderRows.get(0).getLong("sys_enterpriseid");
  477. }
  478. boolean isExport = content.getBooleanValue("isExport");
  479. // SQLFactory sqlFactory = new SQLFactory(this, "订单商品明细_列表", pageSize, pageNumber, pageSorting);
  480. // if (isExport) {
  481. // sqlFactory = new SQLFactory(this, "订单商品明细_列表");
  482. // }
  483. // sqlFactory.addParameter("siteid", siteid);
  484. // sqlFactory.addParameter("sa_orderid", sa_orderid);
  485. // sqlFactory.addParameter_SQL("where", where);
  486. // Rows rows = dbConnect.runSqlQuery(sqlFactory);
  487. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems");
  488. querySQL.addJoinTable(JOINTYPE.left, "st_invbal_sale", "t2", "t2.siteid = t1.siteid AND t2.itemid = t1.itemid");
  489. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid = t1.itemid and t3.siteid = t1.siteid",
  490. "orderminqty_auxunit", "orderminqty", "orderaddqty_auxunit", "orderaddqty", "spec", "iscustomsize", "widthschemeid", "lengthschemeid", "standards", "k3outcode");
  491. // querySQL.addJoinTable(JOINTYPE.left, "plm_itemextend", "t4", "t4.itemid = t1.itemid and t4.siteid = t1.siteid",
  492. // "erpitemno", "erpitemname", "material", "prodline", "device", "specalnote");
  493. querySQL.addQueryFields("candispatchqty", "ifnull(t2.candispatchqty, 0)");
  494. querySQL.addQueryFields("cansaleqty", "ifnull(t2.cansaleqty, 0)");
  495. querySQL.addQueryFields("totalaty", "ifnull(t2.qty, 0)");
  496. querySQL.addQueryFields("stockstatus", "(SELECT (CASE WHEN t2.cansaleqty>=t3.stockstatus1 THEN '充足' WHEN t2.cansaleqty<=t3.stockstatus2 THEN '缺货' ELSE '紧缺' END))");
  497. querySQL.addQueryFields("packageqty", "ifnull(t3.packageqty, 0)");
  498. querySQL.addQueryFields("delivery", "ifnull(t3.delivery, 0)");
  499. querySQL.setWhere(where.toString()).setTableAlias("t1");
  500. querySQL.setWhere("t1.siteid", siteid);
  501. querySQL.setWhere("t1.sa_orderid", sa_orderid);
  502. querySQL.setPage(pageSize, pageNumber).setOrderBy(pageSorting);
  503. Rows rows = querySQL.query();
  504. ArrayList<Long> ids = rows.toArrayList("itemid", new ArrayList<>());
  505. ArrayList<Long> itemnos = rows.toArrayList("itemno", new ArrayList<>());
  506. RowsMap rowsMap = rows.toRowsMap("itemno");
  507. SQLFactory sqlFactory1 = new SQLFactory(this, "商品发货数量汇总");
  508. sqlFactory1.addParameter("siteid", siteid);
  509. sqlFactory1.addParameter_in("itemnos", itemnos);
  510. Rows sumQtyRows = dbConnect.runSqlQuery(sqlFactory1);
  511. RowsMap sumQtyRowsMap = sumQtyRows.toRowsMap("itemno");
  512. SQLFactory sqlFactory2 = new SQLFactory(this, "商品未发货数量汇总");
  513. sqlFactory2.addParameter("siteid", siteid);
  514. sqlFactory2.addParameter_in("itemnos", itemnos);
  515. Rows sumUnQtyRows = dbConnect.runSqlQuery(sqlFactory2);
  516. RowsMap sumUnQtyRowsMap = sumUnQtyRows.toRowsMap("itemno");
  517. SQLFactory sqlFactory3 = new SQLFactory(this, "商品原价汇总");
  518. sqlFactory3.addParameter("siteid", siteid);
  519. sqlFactory3.addParameter("sys_enterpriseid", sys_enterpriseid);
  520. sqlFactory3.addParameter_in("itemnos", itemnos);
  521. Rows itempriceRows = dbConnect.runSqlQuery(sqlFactory3);
  522. RowsMap itempriceRowsMap = itempriceRows.toRowsMap("itemno");
  523. JSONArray jsonArray = new JSONArray();
  524. // JSONObject object = new JSONObject();
  525. // object.put("classname", "getIcinvbal");
  526. // object.put("method", "getMsg");
  527. //
  528. // JSONObject content = new JSONObject();
  529. // content.put("fitemnos", rows.toJsonArray("itemno"));
  530. // object.put("content", content);
  531. //
  532. // WebRequest request = new WebRequest();
  533. // String result = request.doPost(object.toString(),
  534. // "http://60.190.151.198:8089/BYESB/jaxrs/webclientrest");
  535. // if (isJSONArray(result)) {
  536. // jsonArray = JSONArray.parseArray(result);
  537. // }
  538. // for (Object obj : jsonArray) {
  539. // JSONObject jsonObject = (JSONObject) obj;
  540. // if (rowsMap.containsKey(jsonObject.getString("fitemno"))) {
  541. // if (rowsMap.get(jsonObject.getString("fitemno")).isNotEmpty()) {
  542. // rowsMap.get(jsonObject.getString("fitemno")).get(0).put("invbalqty", jsonObject.getBigDecimalValue("FQty"));
  543. // }
  544. // }
  545. // }
  546. ERPDocking erpDocking = new ERPDocking();
  547. if (rows.toJsonArray("itemno").size() != 0) {
  548. if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true") && siteid.equalsIgnoreCase("ccyosg")) {
  549. jsonArray = erpDocking.getErpIcinvbalRows(1000, 1, rows.toJsonArray("itemno"));
  550. }
  551. }
  552. if (!jsonArray.isEmpty()) {
  553. for (Object object : jsonArray) {
  554. JSONObject jsonObject = (JSONObject) object;
  555. if (rowsMap.containsKey(jsonObject.getString("fitemno"))) {
  556. if (rowsMap.get(jsonObject.getString("fitemno")).isNotEmpty()) {
  557. rowsMap.get(jsonObject.getString("fitemno")).get(0).put("invbalqty", jsonObject.getBigDecimalValue("fqty"));
  558. }
  559. }
  560. }
  561. }
  562. //查询附件
  563. RowsMap attinfoRowsMap = getAttachmentUrl("plm_item", ids);
  564. for (Row row : rows) {
  565. if (itempriceRowsMap.get(row.getString("itemno")).isNotEmpty()) {
  566. row.put("originalprice", itempriceRowsMap.get(row.getString("itemno")).get(0).getBigDecimal("price"));
  567. } else {
  568. row.put("originalprice", BigDecimal.ZERO);
  569. }
  570. if (sumQtyRowsMap.get(row.getString("itemno")).isNotEmpty()) {
  571. row.put("unsoldqty", sumQtyRowsMap.get(row.getString("itemno")).get(0).getBigDecimal("qty"));
  572. } else {
  573. row.put("unsoldqty", BigDecimal.ZERO);
  574. }
  575. if (sumUnQtyRowsMap.get(row.getString("itemno")).isNotEmpty()) {
  576. row.put("undeliqtysum", sumUnQtyRowsMap.get(row.getString("itemno")).get(0).getBigDecimal("undeliqty"));
  577. } else {
  578. row.put("undeliqtysum", BigDecimal.ZERO);
  579. }
  580. if (!row.containsKey("invbalqty")) {
  581. row.put("invbalqty", BigDecimal.ZERO);
  582. }
  583. row.put("attinfos", attinfoRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  584. row.put("contractprice", 0);
  585. //处理日期字段空的情况
  586. row.putIfAbsent("needdate", "");
  587. row.putIfAbsent("deliverydate", "");
  588. }
  589. // if (isExport) {
  590. // //去除不需要导出项
  591. // String[] removeFieldList = {"sa_orderitemsid", "itemid", "sa_orderid", "candispatchqty", "cansaleqty",
  592. // "totalaty", "orderminqty_auxunit", "orderminqty", "orderaddqty_auxunit", "orderaddqty",
  593. // "spec", "delivery", "erpitemno", "erpitemname", "material", "standards", "stockstatus"};
  594. // for (String key : removeFieldList) {
  595. // rows.getFieldList().remove(key);
  596. // }
  597. //
  598. // Rows uploadRows = uploadExcelToObs("order", "订单商品明细_列表", rows, getTitleMap());
  599. // return getSucReturnObject().setData(uploadRows).toString();
  600. // }
  601. return getSucReturnObject().setData(rows).toString();
  602. }
  603. @API(title = "查询订单所有明细列表", apiversion = R.ID20230508111703.v1.class)
  604. public String selectAllList() throws YosException, IOException {
  605. StringBuffer where = new StringBuffer(" 1=1 ");
  606. if (sys_enterpriseid > 0) {
  607. where.append(" and t5.sys_enterpriseid ='").append(sys_enterpriseid).append("' ");
  608. }
  609. if (content.containsKey("where")) {
  610. JSONObject whereObject = content.getJSONObject("where");
  611. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  612. where.append(" and(");
  613. where.append(" t5.sonum like'%").append(whereObject.getString("condition")).append("%' ");
  614. where.append("or t1.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  615. where.append("or t1.itemname like'%").append(whereObject.getString("condition")).append("%' ");
  616. where.append("or t6.agentnum like'%").append(whereObject.getString("condition")).append("%' ");
  617. where.append("or t7.enterprisename like'%").append(whereObject.getString("condition")).append("%' ");
  618. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  619. where.append(")");
  620. }
  621. if (whereObject.containsKey("iteminfo") && !"".equals(whereObject.getString("iteminfo"))) {
  622. where.append(" and(");
  623. where.append("t1.itemno like'%").append(whereObject.getString("iteminfo")).append("%' ");
  624. where.append("or t1.itemname like'%").append(whereObject.getString("iteminfo")).append("%' ");
  625. where.append(")");
  626. }
  627. if (whereObject.containsKey("agentinfo") && !"".equals(whereObject.getString("agentinfo"))) {
  628. where.append(" and(");
  629. where.append("t6.agentnum like'%").append(whereObject.getString("agentinfo")).append("%' ");
  630. where.append("or t7.enterprisename like'%").append(whereObject.getString("agentinfo")).append("%' ");
  631. where.append(")");
  632. }
  633. if (whereObject.containsKey("begindate") && !"".equals(whereObject.getString("begindate"))) {
  634. where.append(" and DATE_FORMAT(t5.billdate, '%Y-%m-%d') >='").append(whereObject.getString("begindate")).append("' ");
  635. }
  636. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  637. where.append(" and DATE_FORMAT(t5.billdate, '%Y-%m-%d') <='").append(whereObject.getString("enddate")).append("' ");
  638. }
  639. if (whereObject.containsKey("begindate1") && !"".equals(whereObject.getString("begindate1"))) {
  640. where.append(" and DATE_FORMAT(t5.submitdate, '%Y-%m-%d') >='").append(whereObject.getString("begindate1")).append("' ");
  641. }
  642. if (whereObject.containsKey("enddate1") && !"".equals(whereObject.getString("enddate1"))) {
  643. where.append(" and DATE_FORMAT(t5.submitdate, '%Y-%m-%d') <='").append(whereObject.getString("enddate1")).append("' ");
  644. }
  645. if (whereObject.containsKey("begindate2") && !"".equals(whereObject.getString("begindate2"))) {
  646. where.append(" and DATE_FORMAT(t5.checkdate, '%Y-%m-%d') >='").append(whereObject.getString("begindate2")).append("' ");
  647. }
  648. if (whereObject.containsKey("enddate2") && !"".equals(whereObject.getString("enddate2"))) {
  649. where.append(" and DATE_FORMAT(t5.checkdate, '%Y-%m-%d') <='").append(whereObject.getString("enddate2")).append("' ");
  650. }
  651. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  652. where.append(" and t5.status ='").append(whereObject.getString("status")).append("' ");
  653. }
  654. if (whereObject.containsKey("isfreeze") && !"".equals(whereObject.getString("isfreeze"))) {
  655. where.append(" and t1.isfreeze ='").append(whereObject.getString("isfreeze")).append("' ");
  656. }
  657. if (whereObject.containsKey("typemx") && !"".equals(whereObject.getString("typemx"))) {
  658. where.append(" and t5.typemx ='").append(whereObject.getString("typemx")).append("' ");
  659. }
  660. if (whereObject.containsKey("isuncheckout") && !"".equals(whereObject.getString("isuncheckout"))) {
  661. String begindate = "";
  662. String enddate = "";
  663. if (whereObject.containsKey("datetype") && !"".equals(whereObject.getString("datetype"))) {
  664. String datetype = whereObject.getStringValue("datetype");
  665. switch (datetype) {
  666. case "7":
  667. begindate = getDate_Str(-7);
  668. enddate = getDate_Str();
  669. break;
  670. case "30":
  671. begindate = getDate_Str(-30);
  672. enddate = getDate_Str();
  673. break;
  674. case "90":
  675. begindate = getDate_Str(-90);
  676. enddate = getDate_Str();
  677. break;
  678. default:
  679. break;
  680. }
  681. }
  682. if (!begindate.equals("")) {
  683. where.append(" and DATE_FORMAT(t5.submitdate, '%Y-%m-%d') >='").append(begindate).append("' ");
  684. }
  685. if (!enddate.equals("")) {
  686. where.append(" and DATE_FORMAT(t5.submitdate, '%Y-%m-%d') <='").append(enddate).append("' ");
  687. }
  688. String isuncheckout = whereObject.getStringValue("isuncheckout");
  689. if (isuncheckout.equals("1")) {
  690. where.append(" and t1.sa_orderitemsid in (select t1.sa_orderitemsid from sa_orderitems t1 inner join (select t2.sa_orderitemsid,t2.siteid,sum(outwarehouseqty) sumoutwarehouseqty from sa_dispatch_items t2 inner join sa_dispatch t3 on t2.sa_dispatchid=t3.sa_dispatchid and t2.siteid=t3.siteid GROUP BY sa_orderitemsid,siteid) t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid where t1.qty>ifnull(t2.sumoutwarehouseqty,0) or t1.undeliqty>0)");
  691. } else {
  692. where.append(" and t1.sa_orderitemsid not in (select t1.sa_orderitemsid from sa_orderitems t1 inner join (select t2.sa_orderitemsid,t2.siteid,sum(outwarehouseqty) sumoutwarehouseqty from sa_dispatch_items t2 inner join sa_dispatch t3 on t2.sa_dispatchid=t3.sa_dispatchid and t2.siteid=t3.siteid GROUP BY sa_orderitemsid,siteid) t2 on t1.sa_orderitemsid=t2.sa_orderitemsid and t1.siteid=t2.siteid where t1.qty>ifnull(t2.sumoutwarehouseqty,0) or t1.undeliqty>0)");
  693. }
  694. }
  695. if (whereObject.containsKey("iscancel") && !"".equals(whereObject.getString("iscancel"))) {
  696. String iscancel = whereObject.getStringValue("iscancel");
  697. if (iscancel.equals("1")) {
  698. where.append(" and t5.status ='手工关闭' and not exists(select 1 from st_stockbill_items s1 inner join st_stockbill s2 on s1.st_stockbillid=s2.st_stockbillid and s1.siteid=s2.siteid where s2.status='审核' and s2.rb=1 and s1.sa_orderitemsid=t1.sa_orderitemsid)");
  699. }
  700. }
  701. if (whereObject.containsKey("convenient") && !"".equals(whereObject.getString("convenient"))) {
  702. String convenient = whereObject.getStringValue("convenient");
  703. if (convenient.equals("待确认")) {
  704. where.append(" and t5.status ='预提交' ");
  705. } else if (convenient.equals("待审核")) {
  706. where.append(" and t5.status ='提交' ");
  707. } else if (convenient.equals("待发货")) {
  708. where.append(" and t5.status in ('审核') and not exists(select 1 from st_stockbill_items s1 inner join st_stockbill s2 on s1.st_stockbillid=s2.st_stockbillid and s1.siteid=s2.siteid where s2.status='审核' and s2.rb=1 and s1.sa_orderitemsid=t1.sa_orderitemsid)");
  709. } else if (convenient.equals("已发货")) {
  710. where.append(" and exists(select 1 from st_stockbill_items s1 inner join st_stockbill s2 on s1.st_stockbillid=s2.st_stockbillid and s1.siteid=s2.siteid where s2.status='审核' and s2.rb=1 and s1.sa_orderitemsid=t1.sa_orderitemsid)");
  711. } else if (convenient.equals("已取消")) {
  712. where.append(" and t5.status ='手工关闭' and exists(select 1 from (\n" +
  713. "select s1.sa_orderitemsid,s1.siteid,sum(s1.qty) qty from st_stockbill_items s1 inner join st_stockbill s2 on s1.st_stockbillid=s2.st_stockbillid and s1.siteid=s2.siteid where s2.status='审核' and s2.rb=1 group by s1.sa_orderitemsid,s1.siteid) s right join sa_orderitems s1 on s.sa_orderitemsid=s1.sa_orderitemsid and s.siteid=s1.siteid where s1.qty>ifnull(s.qty,0) and s1.sa_orderitemsid=t1.sa_orderitemsid)");
  714. }
  715. }
  716. }
  717. boolean isExport = content.getBooleanValue("isExport");
  718. // SQLFactory sqlFactory = new SQLFactory(this, "订单商品明细_所有列表", pageSize, pageNumber, pageSorting);
  719. // if (isExport) {
  720. // sqlFactory = new SQLFactory(this, "订单商品明细_所有列表");
  721. // }
  722. // sqlFactory.addParameter("siteid", siteid);
  723. // sqlFactory.addParameter_SQL("where", where);
  724. // Rows rows = dbConnect.runSqlQuery(sqlFactory);
  725. QuerySQL querySQL = queryAllListManage(where.toString());
  726. querySQL.setOrderBy(pageSorting);
  727. querySQL.setPage(pageSize, pageNumber);
  728. Rows rows = querySQL.query();
  729. ArrayList<Long> ids = rows.toArrayList("itemid", new ArrayList<>());
  730. RowsMap rowsMap = rows.toRowsMap("itemno");
  731. SQLFactory sqlFactory1 = new SQLFactory(this, "订单明细出库数量汇总");
  732. sqlFactory1.addParameter("siteid", siteid);
  733. sqlFactory1.addParameter_in("sa_orderitemsids", rows.toArrayList("sa_orderitemsid", new ArrayList<>()));
  734. Rows sumQtyRows = dbConnect.runSqlQuery(sqlFactory1);
  735. RowsMap sumQtyRowsMap = sumQtyRows.toRowsMap("sa_orderitemsid");
  736. ERPDocking erpDocking = new ERPDocking();
  737. JSONArray jsonArray = new JSONArray();
  738. if (rows.toJsonArray("itemno").size() != 0) {
  739. if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true") && siteid.equalsIgnoreCase("ccyosg")) {
  740. jsonArray = erpDocking.getErpIcinvbalRows(200000, 1, rows.toJsonArray("itemno"));
  741. }
  742. }
  743. if (!jsonArray.isEmpty()) {
  744. for (Object object : jsonArray) {
  745. JSONObject jsonObject = (JSONObject) object;
  746. if (rowsMap.containsKey(jsonObject.getString("fitemno"))) {
  747. if (rowsMap.get(jsonObject.getString("fitemno")).isNotEmpty()) {
  748. rowsMap.get(jsonObject.getString("fitemno")).get(0).put("invbalqty", jsonObject.getBigDecimalValue("fqty"));
  749. }
  750. }
  751. }
  752. }
  753. //查询附件
  754. RowsMap attinfoRowsMap = getAttachmentUrl("plm_item", ids);
  755. for (Row row : rows) {
  756. if (sumQtyRowsMap.get(row.getString("sa_orderitemsid")).isNotEmpty()) {
  757. row.put("unsoldqty", row.getBigDecimal("qty").subtract(sumQtyRowsMap.get(row.getString("sa_orderitemsid")).get(0).getBigDecimal("sumqty")));
  758. } else {
  759. row.put("unsoldqty", row.getBigDecimal("qty"));
  760. }
  761. if (!row.containsKey("invbalqty")) {
  762. row.put("invbalqty", BigDecimal.ZERO);
  763. }
  764. row.put("attinfos", attinfoRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  765. row.put("contractprice", 0);
  766. }
  767. // if (isExport) {
  768. // //去除不需要导出项
  769. // rows.getFieldList().remove("sa_orderitemsid");
  770. // rows.getFieldList().remove("itemid");
  771. // rows.getFieldList().remove("batchcontrol");
  772. // rows.getFieldList().remove("model");
  773. // rows.getFieldList().remove("conversionrate");
  774. // rows.getFieldList().remove("marketprice");
  775. // rows.getFieldList().remove("defaultprice");
  776. // rows.getFieldList().remove("defaultamount");
  777. // rows.getFieldList().remove("auxqty");
  778. // rows.getFieldList().remove("needdate");
  779. // rows.getFieldList().remove("deliedqty");
  780. // rows.getFieldList().remove("rebateamount");
  781. // rows.getFieldList().remove("invoiceamount");
  782. // rows.getFieldList().remove("writeoffamount");
  783. // rows.getFieldList().remove("auxunit");
  784. // rows.getFieldList().remove("sa_orderid");
  785. // rows.getFieldList().remove("deliverydate");
  786. // rows.getFieldList().remove("returnqty");
  787. // rows.getFieldList().remove("stockno");
  788. // rows.getFieldList().remove("position");
  789. // rows.getFieldList().remove("batchno");
  790. // rows.getFieldList().remove("isfreeze");
  791. // rows.getFieldList().remove("candispatchqty");
  792. // rows.getFieldList().remove("cansaleqty");
  793. // rows.getFieldList().remove("totalaty");
  794. // rows.getFieldList().remove("orderminqty_auxunit");
  795. // rows.getFieldList().remove("orderminqty");
  796. // rows.getFieldList().remove("orderaddqty_auxunit");
  797. // rows.getFieldList().remove("orderaddqty");
  798. // rows.getFieldList().remove("spec");
  799. // rows.getFieldList().remove("packageqty");
  800. // rows.getFieldList().remove("delivery");
  801. // rows.getFieldList().remove("erpitemno");
  802. // rows.getFieldList().remove("erpitemname");
  803. // rows.getFieldList().remove("prodline");
  804. // rows.getFieldList().remove("material");
  805. // rows.getFieldList().remove("device");
  806. // rows.getFieldList().remove("specalnote");
  807. // rows.getFieldList().remove("standards");
  808. // rows.getFieldList().remove("agentnum");
  809. // rows.getFieldList().remove("enterprisename");
  810. // rows.getFieldList().remove("agentnum");
  811. // rows.getFieldList().remove("stockstatus");
  812. // rows.getFieldList().remove("submitdate");
  813. // rows.getFieldList().remove("checkdate");
  814. // Rows rowsrolename = dbConnect.runSqlQuery("select * from sys_userrole t1 inner join sys_role t2 on t1.roleid=t2.roleid and t1.siteid=t2.siteid where t2.rolename='经销商员工' and t1.userid=" + userid);
  815. // if (!rowsrolename.isEmpty()) {
  816. // rows.getFieldList().remove("price");
  817. // rows.getFieldList().remove("amount");
  818. // }
  819. //
  820. // Rows uploadRows = uploadExcelToObs("orderdetail", "订单明细列表", rows, getTitleMapAgent());
  821. // return getSucReturnObject().setData(uploadRows).toString();
  822. // }
  823. return getSucReturnObject().setData(rows).toString();
  824. }
  825. //查询订单列表(管理端)
  826. public QuerySQL queryAllListManage(String where) throws YosException {
  827. QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_orderitems",
  828. "sa_orderitemsid", "itemid", "rowno", "itemno", "itemname", "unit", "qty", "undeliqty", "saleprice", "defaultprice", "price", "amount", "remarks", "customproperties", "batchcontrol", "model",
  829. "conversionrate", "marketprice", "defaultprice", "defaultamount", "auxqty", "needdate", "deliedqty", "rebateamount", "invoiceamount", "writeoffamount", "auxunit", "sa_orderid",
  830. "deliverydate", "returnqty", "stockno", "position", "batchno", "isfreeze", "decorationrebateflag");
  831. querySQL.setTableAlias("t1");
  832. querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t3", "t3.itemid = t1.itemid and t3.siteid = t1.siteid",
  833. "orderminqty_auxunit", "orderminqty", "orderaddqty_auxunit", "orderaddqty", "spec", "standards", "packageqty", "delivery", "k3outcode");
  834. querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t5", "t5.sa_orderid = t1.sa_orderid and t5.siteid = t1.siteid",
  835. "sonum", "type", "typemx", "status", "billdate", "submitdate", "checkdate", "tradefield", "closedate", "remarks");
  836. querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t6", "t6.sys_enterpriseid = t5.sys_enterpriseid and t6.siteid = t5.siteid",
  837. "agentnum");
  838. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t7", "t7.sys_enterpriseid = t5.sys_enterpriseid and t7.siteid = t5.siteid",
  839. "enterprisename");
  840. querySQL.addJoinTable(JOINTYPE.left, "plm_itemclass", "t8", "t8.itemclassid = t3.marketingcategory and t8.siteid = t3.siteid",
  841. "itemclassname");
  842. querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise_tradefield", "t9", "t9.sys_enterpriseid = t5.sys_enterpriseid and t9.tradefield=t5.tradefield and t9.siteid = t5.siteid",
  843. "sys_enterprise_tradefieldid");
  844. querySQL.addJoinTable(JOINTYPE.left, "sa_salearea", "t10", "t10.sa_saleareaid = t9.sa_saleareaid and t10.siteid = t9.siteid",
  845. "areaname");
  846. querySQL.addQueryFields("orderremarks", "t5.remarks");
  847. //querySQL.addQueryFields("accountclassinfos", "REPLACE(SUBSTRING(JSON_EXTRACT(t5.sa_accountclassinfos, '$[*].accountname'), 2, CHAR_LENGTH(JSON_EXTRACT(t5.sa_accountclassinfos, '$[*].accountname'))-2),'\"','')");
  848. querySQL.setWhere("t1.siteid", siteid);
  849. querySQL.setWhere(where);
  850. querySQL.setWhere("t5.status in ('审核', '关闭','手工关闭')");
  851. return querySQL;
  852. }
  853. //返回导出的标题
  854. public HashMap<String, String> getTitleMap() {
  855. HashMap<String, String> titleMap = new HashMap<>();
  856. titleMap.put("rowno", "行号");
  857. titleMap.put("batchcontrol", "是否批次管理");
  858. titleMap.put("itemno", "产品编号");
  859. titleMap.put("itemname", "产品名称");
  860. titleMap.put("model", "型号");
  861. titleMap.put("conversionrate", "换算率(辅助数量=主单位数量/换算率)");
  862. titleMap.put("price", "单价,折后价(元)");
  863. titleMap.put("amount", "金额,折后金额(元)");
  864. titleMap.put("marketprice", "牌价、市场价(元)");
  865. titleMap.put("defaultprice", "折前价(元)");
  866. titleMap.put("defaultamount", "折前金额(元)");
  867. titleMap.put("qty", "订购数量");
  868. titleMap.put("auxqty", "辅助单位数量");
  869. titleMap.put("needdate", "需求日期");
  870. titleMap.put("deliedqty", "已交货量(主单位)");
  871. titleMap.put("rebateamount", "返利分摊金额");
  872. titleMap.put("undeliqty", "未交货量(主单位)");
  873. titleMap.put("invoiceamount", "已开票金额");
  874. titleMap.put("writeoffamount", "已核销金额");
  875. titleMap.put("unit", "计量单位名称");
  876. titleMap.put("auxunit", "辅助计量单位名称");
  877. titleMap.put("deliverydate", "交货日期");
  878. titleMap.put("returnqty", "退货数量");
  879. titleMap.put("remarks", "备注");
  880. titleMap.put("submitdate", "提交时间");
  881. titleMap.put("checkdate", "审核时间");
  882. return titleMap;
  883. }
  884. //返回导出的标题
  885. public HashMap<String, String> getTitleMapAgent() throws YosException {
  886. HashMap<String, String> titleMap = new HashMap<>();
  887. titleMap.put("rowno", "行号");
  888. titleMap.put("sonum", "订单号");
  889. titleMap.put("status", "订单状态");
  890. titleMap.put("type", "订单类型");
  891. titleMap.put("billdate", "单据日期");
  892. titleMap.put("tradefield", "领域");
  893. titleMap.put("itemno", "产品编码");
  894. titleMap.put("itemname", "品名");
  895. titleMap.put("unit", "单位");
  896. titleMap.put("qty", "数量");
  897. titleMap.put("undeliqty", "未发货数量");
  898. Rows rowsrolename = dbConnect.runSqlQuery("select * from sys_userrole t1 inner join sys_role t2 on t1.roleid=t2.roleid and t1.siteid=t2.siteid where t2.rolename='经销商员工' and t1.userid=" + userid);
  899. if (rowsrolename.isEmpty()) {
  900. titleMap.put("price", "单价");
  901. titleMap.put("amount", "金额");
  902. }
  903. titleMap.put("remarks", "订单行备注");
  904. return titleMap;
  905. }
  906. @API(title = "查询可添加商品列表", apiversion = R.ID20221109153502.v1.class)
  907. @CACHEING
  908. public String selectItemList() throws YosException {
  909. StringBuffer where = new StringBuffer(" 1=1 ");
  910. if (content.containsKey("where")) {
  911. JSONObject whereObject = content.getJSONObject("where");
  912. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  913. where.append(" and(");
  914. where.append("t1.itemno like'%").append(whereObject.getString("condition")).append("%' ");
  915. where.append("or t1.itemname like'%").append(whereObject.getString("condition")).append("%' ");
  916. where.append("or t1.model like'%").append(whereObject.getString("condition")).append("%' ");
  917. where.append("or t1.spec like'%").append(whereObject.getString("condition")).append("%' ");
  918. where.append("or t3.material like'%").append(whereObject.getString("condition")).append("%' ");
  919. where.append("or t3.erpitemno like'%").append(whereObject.getString("condition")).append("%' ");
  920. where.append(")");
  921. }
  922. if (whereObject.containsKey("isonsale") && !"".equals(whereObject.getString("isonsale"))) {
  923. where.append(" and t1.isonsale ='").append(whereObject.getString("isonsale")).append("' ");
  924. }
  925. }
  926. Long sa_orderid = content.getLong("sa_orderid");
  927. Long sys_enterpriseid1 = sys_enterpriseid;
  928. Rows orderRows = getOrderRows(this, sa_orderid);
  929. Long sa_brandid = 0L;
  930. String tradefield = "";
  931. String type = "";
  932. String typemx = "";
  933. Long sys_enterpriseid = 0L;
  934. if (orderRows.isNotEmpty()) {
  935. sa_brandid = orderRows.get(0).getLong("sa_brandid");
  936. tradefield = orderRows.get(0).getString("tradefield");
  937. type = orderRows.get(0).getString("type");
  938. typemx = orderRows.get(0).getString("typemx");
  939. sys_enterpriseid = orderRows.get(0).getLong("sys_enterpriseid");
  940. }
  941. SQLFactory sqlFactory = new SQLFactory(this, "查询可添加商品列表", pageSize, pageNumber, pageSorting);
  942. switch (type) {
  943. // case "总部订单":
  944. // sqlFactory = new SQLFactory(this, "查询可添加商品列表_总部订单", pageSize, pageNumber, pageSorting);
  945. // break;
  946. case "特殊订单":
  947. if (typemx.equals("电商") || typemx.equals("工程")) {
  948. sqlFactory = new SQLFactory(this, "查询可添加商品列表_总部订单", pageSize, pageNumber, pageSorting);
  949. } else {
  950. sqlFactory = new SQLFactory(this, "查询可添加商品列表_特殊订单", pageSize, pageNumber, pageSorting);
  951. }
  952. sqlFactory.addParameter("tradefield", tradefield);
  953. if (sys_enterpriseid1 > 0) {
  954. where.append(" and t1.isonsale ='1' ");
  955. }
  956. break;
  957. default:
  958. StringBuffer where2 = new StringBuffer(" 1=1 ");
  959. Row enterpriseRow = Enterprise.getEnterprise(this, sys_enterpriseid);
  960. boolean saleclassauth = enterpriseRow.getBoolean("saleclassauth");
  961. //需要经营授权
  962. if (saleclassauth) {
  963. where2.append(" and t1.itemclassid in (SELECT itemclassid from sys_enterprise_saleclass WHERE sys_enterpriseid = " + sys_enterpriseid + " and siteid = '" + siteid + "')");
  964. }
  965. sqlFactory.addParameter("sa_brandid", sa_brandid);
  966. sqlFactory.addParameter("tradefield", tradefield);
  967. sqlFactory.addParameter_SQL("where2", where2);
  968. break;
  969. }
  970. sqlFactory.addParameter("siteid", siteid);
  971. sqlFactory.addParameter_SQL("where", where);
  972. String sql = sqlFactory.getSQL(false);
  973. Rows rows = dbConnect.runSqlQuery(sql);
  974. ArrayList<Long> ids = rows.toArrayList("itemid", new ArrayList<>());
  975. //查询附件
  976. RowsMap attinfoRowsMap = getAttachmentUrl("plm_item", ids);
  977. //商品领域
  978. RowsMap tradefieldRowsMap = beans.Item.Item.getTradefieldRowsMap(this, ids);
  979. //品牌
  980. RowsMap brandRowsMap = Brand.getBrandRowsMap(this, ids);
  981. //价格
  982. HashMap<Long, ItemPrice> itemPriceRowsMap = ItemPrice.getItemPrice(this, sys_enterpriseid, ids);
  983. Rows sizecustomizedschemes = dbConnect.runSqlQuery("select * from sa_sizecustomizedscheme where siteid='" + siteid + "' ");
  984. RowsMap sizecustomizedschemesRowsMap = sizecustomizedschemes.toRowsMap("sa_sizecustomizedschemeid");
  985. Rows sizeschemedetails = dbConnect.runSqlQuery("select * from sa_sizeschemedetail where siteid='" + siteid + "' ");
  986. RowsMap sizeschemedetailsRowsMap = sizeschemedetails.toRowsMap("sa_sizecustomizedschemeid");
  987. for (Row row : rows) {
  988. row.put("attinfos", attinfoRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  989. row.put("tradefield", tradefieldRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  990. row.put("brand", brandRowsMap.getOrDefault(row.getString("itemid"), new Rows()));
  991. if (itemPriceRowsMap.containsKey(row.getLong("itemid"))) {
  992. row.put("price", itemPriceRowsMap.get(row.getLong("itemid")).getPrice());
  993. } else {
  994. row.put("price", 0);
  995. }
  996. if (row.getLong("widthschemeid") != 0) {
  997. if (sizecustomizedschemesRowsMap.containsKey(row.getString("widthschemeid"))) {
  998. if (sizecustomizedschemesRowsMap.get(row.getString("widthschemeid")).isNotEmpty()) {
  999. row.put("widthtype", sizecustomizedschemesRowsMap.get(row.getString("widthschemeid")).get(0).getString("type"));
  1000. row.put("widthmin", sizecustomizedschemesRowsMap.get(row.getString("widthschemeid")).get(0).getBigDecimal("min"));
  1001. row.put("widthmax", sizecustomizedschemesRowsMap.get(row.getString("widthschemeid")).get(0).getBigDecimal("max"));
  1002. row.put("widthdecimalplaces", sizecustomizedschemesRowsMap.get(row.getString("widthschemeid")).get(0).getBigDecimal("decimalplaces"));
  1003. if (sizeschemedetailsRowsMap.containsKey(row.getString("widthschemeid"))) {
  1004. row.put("widthschemedetails", sizeschemedetailsRowsMap.get(row.getString("widthschemeid")));
  1005. } else {
  1006. row.put("widthschemedetails", new JSONArray());
  1007. }
  1008. }
  1009. }
  1010. }
  1011. if (row.getLong("lengthschemeid") != 0) {
  1012. if (sizecustomizedschemesRowsMap.containsKey(row.getString("lengthschemeid"))) {
  1013. if (sizecustomizedschemesRowsMap.get(row.getString("lengthschemeid")).isNotEmpty()) {
  1014. row.put("lengthtype", sizecustomizedschemesRowsMap.get(row.getString("lengthschemeid")).get(0).getString("type"));
  1015. row.put("lengthmin", sizecustomizedschemesRowsMap.get(row.getString("lengthschemeid")).get(0).getBigDecimal("min"));
  1016. row.put("lengthmax", sizecustomizedschemesRowsMap.get(row.getString("lengthschemeid")).get(0).getBigDecimal("max"));
  1017. row.put("lengthdecimalplaces", sizecustomizedschemesRowsMap.get(row.getString("lengthschemeid")).get(0).getBigDecimal("decimalplaces"));
  1018. if (sizeschemedetailsRowsMap.containsKey(row.getString("lengthschemeid"))) {
  1019. row.put("lengthschemedetails", sizeschemedetailsRowsMap.get(row.getString("lengthschemeid")));
  1020. } else {
  1021. row.put("lengthschemedetails", new JSONArray());
  1022. }
  1023. }
  1024. }
  1025. }
  1026. }
  1027. return getSucReturnObject().setData(rows).toString();
  1028. }
  1029. //获取非工具数据
  1030. public String getOrderItemsList(Long sa_orderid, String tradefield, Long sys_enterpriseid, Long sa_brandid) throws YosException {
  1031. StringBuffer where = new StringBuffer(" 1=1 ");
  1032. Row enterpriseRow = Enterprise.getEnterprise(this, sys_enterpriseid);
  1033. boolean saleclassauth = enterpriseRow.getBoolean("saleclassauth");
  1034. //需要经营授权
  1035. if (saleclassauth) {
  1036. where.append(" and itemclassid in (SELECT itemclassid from sys_enterprise_saleclass WHERE sys_enterpriseid = " + sys_enterpriseid + " and siteid = '" + siteid + "')");
  1037. }
  1038. SQLFactory sqlFactory = new SQLFactory(this, "商品范围");
  1039. sqlFactory.addParameter("siteid", siteid);
  1040. sqlFactory.addParameter("sa_orderid", sa_orderid);
  1041. sqlFactory.addParameter_in("tradefield", tradefield);
  1042. sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  1043. sqlFactory.addParameter("sa_brandid", sa_brandid);
  1044. sqlFactory.addParameter_SQL("where", where);
  1045. return sqlFactory.getSQL(false);
  1046. }
  1047. // //获取特殊数据
  1048. // public String getOrderItemsListSpec(Long sa_orderid, String tradefield, Long sys_enterpriseid) throws YosException {
  1049. // SQLFactory sqlFactory = new SQLFactory(this, "商品范围_特殊");
  1050. // sqlFactory.addParameter("siteid", siteid);
  1051. // sqlFactory.addParameter("sa_orderid", sa_orderid);
  1052. // sqlFactory.addParameter_in("tradefield", tradefield);
  1053. // sqlFactory.addParameter("sys_enterpriseid", sys_enterpriseid);
  1054. // return sqlFactory.getSQL(false);
  1055. // }
  1056. @API(title = "订单商品变更", apiversion = R.ID20221110145302.v1.class)
  1057. @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class})
  1058. public String changeItem() throws YosException {
  1059. boolean isjiean = content.getBooleanValue("isjiean");
  1060. Long sa_orderid = content.getLong("sa_orderid");
  1061. //通过版本更新订单表头数据
  1062. beans.order.Order.updateOrderWithVersion(this);
  1063. String type = content.getString("type");
  1064. Long sa_orderitems_changeid = createTableID("sa_orderitems_change");
  1065. JSONArray itemifnos = content.getJSONArray("itemifnos");
  1066. BigDecimal oldValue = new BigDecimal(0);
  1067. Rows Rowstatus = dbConnect.runSqlQuery(
  1068. "select * from sa_order where sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'");
  1069. if (Rowstatus.isEmpty()) {
  1070. return "订单不存在";
  1071. } else {
  1072. if (!Rowstatus.get(0).getString("status").equals("审核")) {
  1073. return getErrReturnObject().setErrMsg("非审核状态的订单无法进行商品变更").toString();
  1074. }
  1075. }
  1076. ArrayList<String> sqlList = new ArrayList<>();
  1077. // 订单商品变更
  1078. SQLFactory sqlFactory = new SQLFactory(this, "订单商品变更_新增");
  1079. sqlFactory.addParameter("siteid", siteid);
  1080. sqlFactory.addParameter("userid", userid);
  1081. sqlFactory.addParameter("username", username);
  1082. sqlFactory.addParameter("sa_orderitems_changeid", sa_orderitems_changeid);
  1083. sqlFactory.addParameter("sa_orderid", sa_orderid);
  1084. sqlFactory.addParameter("remarks", content.getStringValue("remarks"));
  1085. sqlList.add(sqlFactory.getSQL());
  1086. HashMap<Long, Row> orderdetailmap = new HashMap<>();
  1087. HashMap<Long, BigDecimal> orderdetailchangeamount = new HashMap<>();
  1088. Rows rowsOrder = dbConnect.runSqlQuery("select * from sa_order t1 where t1.sa_orderid=" + sa_orderid);
  1089. BigDecimal ce = new BigDecimal(0);
  1090. for (Object obj : itemifnos) {
  1091. JSONObject jsonObject = (JSONObject) obj;
  1092. Rows rows = dbConnect.runSqlQuery(
  1093. "SELECT sa_orderitemsid,qty,deliedqty,undeliqty,writeoffamount,price from sa_orderitems WHERE sa_orderitemsid="
  1094. + jsonObject.getLongValue("sa_orderitemsid"));
  1095. if (rows.isNotEmpty()) {
  1096. oldValue = rows.get(0).getBigDecimal("qty");
  1097. } else {
  1098. return getErrReturnObject().setErrMsg("订单行不存在").toString();
  1099. }
  1100. if (type.equals("数量")) {
  1101. // 更新数量
  1102. BigDecimal newqty = jsonObject.getBigDecimal("newvalue");
  1103. BigDecimal oldqty = rows.get(0).getBigDecimal("qty");
  1104. BigDecimal oldundeliqty = rows.get(0).getBigDecimal("undeliqty");
  1105. BigDecimal addqty = newqty.subtract(oldqty);// 新增的数量
  1106. if (newqty.compareTo(oldqty) >= 0) {
  1107. return getErrReturnObject().setErrMsg("修改数量必须小于原订单数量" + oldqty).toString();
  1108. }
  1109. if (newqty.compareTo(oldqty.subtract(oldundeliqty)) < 0) {
  1110. return getErrReturnObject().setErrMsg("修改数量必须大于等于已发货数量" + oldqty.subtract(oldundeliqty)).toString();
  1111. }
  1112. if (newqty.compareTo(BigDecimal.ZERO) < 0) {
  1113. return getErrReturnObject().setErrMsg("修改数量不可小于0").toString();
  1114. }
  1115. sqlFactory = new SQLFactory(this, "订单商品明细变更_更新");
  1116. sqlFactory.addParameter("siteid", siteid);
  1117. sqlFactory.addParameter("sa_orderitemsid", jsonObject.getLongValue("sa_orderitemsid"));
  1118. sqlFactory.addParameter("qty", jsonObject.getStringValue("newvalue"));
  1119. // sqlFactory.addParameter("undeliqty", oldundeliqty.add(addqty));
  1120. ce = ce.add(addqty.multiply(rows.get(0).getBigDecimal("price")));
  1121. sqlList.add(sqlFactory.getSQL());
  1122. /**
  1123. * * 核销对冲计算
  1124. */
  1125. {
  1126. /**
  1127. * * 核销对冲计算
  1128. */
  1129. BigDecimal writeoffamount = rows.get(0).getBigDecimal("writeoffamount");// 订单行已核销金额
  1130. //System.out.println(newqty.multiply(rows.get(0).getBigDecimal("price")));
  1131. //System.out.println(writeoffamount);
  1132. if (writeoffamount.compareTo(BigDecimal.ZERO) > 0
  1133. && (newqty.multiply(rows.get(0).getBigDecimal("price"))).compareTo(writeoffamount) < 0) {
  1134. // 如果已核销金额大于0 且调整后折后金额小于已核销金额,则需要将差价进行回冲
  1135. orderdetailmap.put(rows.get(0).getLong("sa_orderitemsid"), rows.get(0));
  1136. //System.out.println(writeoffamount.subtract(newqty.multiply(rows.get(0).getBigDecimal("price"))));
  1137. //System.out.println("sa_orderitemsid:"+rows.get(0).getLong("sa_orderitemsid"));
  1138. orderdetailchangeamount.put(rows.get(0).getLong("sa_orderitemsid"),
  1139. writeoffamount.subtract(newqty.multiply(rows.get(0).getBigDecimal("price"))));
  1140. }
  1141. }
  1142. }
  1143. // 订单商品变更明细
  1144. sqlFactory = new SQLFactory(this, "订单商品变更明细_新增");
  1145. sqlFactory.addParameter("siteid", siteid);
  1146. sqlFactory.addParameter("sa_orderitems_changemxid", createTableID("sa_orderitems_changemx"));
  1147. sqlFactory.addParameter("itemid", jsonObject.getLongValue("itemid"));
  1148. sqlFactory.addParameter("sa_orderitemsid", jsonObject.getLongValue("sa_orderitemsid"));
  1149. sqlFactory.addParameter("sa_orderitems_changeid", sa_orderitems_changeid);
  1150. sqlFactory.addParameter("type", type);
  1151. sqlFactory.addParameter("oldvalue", oldValue);
  1152. sqlFactory.addParameter("newvalue", jsonObject.getStringValue("newvalue"));
  1153. sqlList.add(sqlFactory.getSQL());
  1154. // content.put("sa_orderitemsid", sa_orderitemsid);
  1155. }
  1156. Long sa_cashbillid = 0L;
  1157. if (ce.compareTo(BigDecimal.ZERO) != 0) {
  1158. CashbillEntity cashbillEntity = new CashbillEntity();
  1159. cashbillEntity.setAmount(ce);
  1160. cashbillEntity.setOwnerid(sa_orderid);
  1161. cashbillEntity.setOwnertable("sa_order");
  1162. cashbillEntity
  1163. .setRemarks("订单变更:" + rowsOrder.get(0).getString("sonum") + "订单变更单id:" + sa_orderitems_changeid);
  1164. JSONObject cashbillPay = Accountbalance.createCashbillPay(this, rowsOrder.get(0).getLong("sys_enterpriseid"),
  1165. rowsOrder.get(0).getLong("sa_accountclassid"), cashbillEntity, true);
  1166. sqlList.addAll(cashbillPay.getJSONArray("sqlList").toJavaList(String.class));
  1167. sa_cashbillid = cashbillPay.getLong("sa_cashbillid");
  1168. }
  1169. /**
  1170. * * 核销对冲
  1171. */
  1172. if (!orderdetailmap.isEmpty()) {
  1173. //System.out.println("测试");
  1174. sqlList.addAll(
  1175. new twriteoffbill_orderchange(rowsOrder.get(0), orderdetailmap, orderdetailchangeamount).hedging());
  1176. }
  1177. for (String string : sqlList) {
  1178. //System.out.println(string);
  1179. }
  1180. dbConnect.runSqlUpdate(sqlList);
  1181. // 居间费设置
  1182. updateRebateFee(sa_orderid);
  1183. if (!isjiean) {
  1184. if (Parameter.get("system.erp_dockswitch").equalsIgnoreCase("true")) {
  1185. UploadDataToERP uploadDataToERP = new UploadDataToERP(this, sa_orderitems_changeid, "订单变更");
  1186. boolean issuccess = uploadDataToERP.upload();
  1187. if (!issuccess) {
  1188. return getErrReturnObject().setErrMsg("上传ERP失败,请检查!").toString();
  1189. }
  1190. }
  1191. }
  1192. if (ce.compareTo(BigDecimal.ZERO) != 0) {
  1193. Accountbalance.remindSend(this, rowsOrder.get(0).getLong("sys_enterpriseid"), sa_cashbillid);
  1194. }
  1195. return getSucReturnObject().toString();
  1196. }
  1197. @API(title = "订单商品变更(手动推erp)", apiversion = R.ID20230306161703.v1.class)
  1198. @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class})
  1199. public String changeItem1() throws YosException {
  1200. if (Parameter.get("system.erp_dockswitch").equalsIgnoreCase("true")) {
  1201. UploadDataToERP uploadDataToERP = new UploadDataToERP(this, content.getLong("sa_orderitems_changeid"), "订单变更");
  1202. boolean issuccess = uploadDataToERP.upload();
  1203. if (!issuccess) {
  1204. return getErrReturnObject().setErrMsg("上传ERP失败,请检查!").toString();
  1205. } else {
  1206. return getSucReturnObject().toString();
  1207. }
  1208. } else {
  1209. return getErrReturnObject().setErrMsg("erp对接开关未开!").toString();
  1210. }
  1211. }
  1212. /**
  1213. * 获取当前订单的最大行号
  1214. *
  1215. * @param sa_orderid
  1216. * @return
  1217. * @throws YosException
  1218. */
  1219. public Long getRowNo(Long sa_orderid) throws YosException {
  1220. Rows rows = dbConnect.runSqlQuery("SELECT COUNT(0) count from sa_orderitems WHERE sa_orderid = " + sa_orderid + " AND siteid = '" + siteid + "'");
  1221. return rows.get(0).getLong("count") + 1;
  1222. }
  1223. /**
  1224. * 查询商品信息
  1225. *
  1226. * @param itemid
  1227. * @return
  1228. * @throws YosException
  1229. */
  1230. public Row getItemRow(Long itemid) throws YosException {
  1231. SQLFactory sqlFactory = new SQLFactory(this, "查询商品信息");
  1232. sqlFactory.addParameter("siteid", siteid);
  1233. sqlFactory.addParameter("itemid", itemid);
  1234. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL(false));
  1235. return rows.isNotEmpty() ? rows.get(0) : new Row();
  1236. }
  1237. /**
  1238. * 重新对商品行排序
  1239. *
  1240. * @param sa_orderid
  1241. * @throws YosException
  1242. */
  1243. public void updateRowNo(Long sa_orderid) throws YosException {
  1244. String sql = "SELECT sa_orderitemsid from sa_orderitems WHERE sa_orderid= " + sa_orderid + " and siteid = '" + siteid + "' ORDER BY createdate ";
  1245. ArrayList<Long> sa_orderitemsids = dbConnect.runSqlQuery(sql).toArrayList("sa_orderitemsid", new ArrayList<>());
  1246. if (sa_orderitemsids.size() > 0) {
  1247. int rowno = 1;
  1248. StringBuffer where = new StringBuffer("");
  1249. for (Long id : sa_orderitemsids) {
  1250. where.append(" WHEN " + id + " THEN " + rowno);
  1251. rowno++;
  1252. }
  1253. SQLFactory sqlFactory = new SQLFactory(this, "更新行号");
  1254. sqlFactory.addParameter("siteid", siteid);
  1255. sqlFactory.addParameter_SQL("where", where);
  1256. sqlFactory.addParameter_in("sa_orderitemsid", sa_orderitemsids);
  1257. sql = sqlFactory.getSQL(false);
  1258. dbConnect.runSqlUpdate(sql);
  1259. }
  1260. }
  1261. }