OrderItems.java 75 KB

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