OrderItems.java 72 KB

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