OrderItems.java 84 KB

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