|
|
@@ -46,6 +46,165 @@ public class OrderItems extends Controller {
|
|
|
super(content);
|
|
|
}
|
|
|
|
|
|
+ @API(title = "配件订单明细新增或更新", apiversion = R.ID2025121314111503.v1.class, intervaltime = 200)
|
|
|
+ @CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class, accessoryorder.class})
|
|
|
+ public String insertOrUpdate_pj() throws YosException {
|
|
|
+ Long sa_orderid = content.getLong("sa_orderid");
|
|
|
+ Long sys_enterpriseid = content.getLong("sys_enterpriseid");
|
|
|
+ JSONArray items = content.getJSONArray("items");
|
|
|
+ //辅助类
|
|
|
+ OrderItemsHelper orderItemsHelper = new OrderItemsHelper(this);
|
|
|
+ ArrayList<String> sqlList = new ArrayList<>();
|
|
|
+
|
|
|
+ Rows orderRows = getOrderRows(this, sa_orderid);
|
|
|
+ if (orderRows.isEmpty()) {
|
|
|
+ return getErrReturnObject().setErrMsg("数据不存在,无法添加").toString();
|
|
|
+ } else {
|
|
|
+ if (!orderRows.get(0).getString("status").equals("新建") && !orderRows.get(0).getString("status").equals("提交") && !orderRows.get(0).getString("status").equals("预提交")) {
|
|
|
+ return getErrReturnObject().setErrMsg("该状态无法操作").toString();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //通过版本更新订单表头数据
|
|
|
+ beans.order.Order.updateOrderWithVersion(this);
|
|
|
+
|
|
|
+ String type = orderRows.get(0).getString("type");
|
|
|
+
|
|
|
+ //批量查询商品信息
|
|
|
+ RowsMap itemRowsMap = orderItemsHelper.getItemRowsMap(items);
|
|
|
+
|
|
|
+ BigDecimal sumqty = BigDecimal.ZERO;
|
|
|
+ ArrayList<Long> sa_orderitemsids_insert =new ArrayList<>();
|
|
|
+ for (Object obj : items) {
|
|
|
+
|
|
|
+ JSONObject item = (JSONObject) obj;
|
|
|
+ Long itemid = item.getLong("itemid");
|
|
|
+ Long sa_orderitemsid = item.getLong("sa_orderitemsid");
|
|
|
+ BigDecimal qty = item.getBigDecimal("qty");
|
|
|
+ sumqty = sumqty.add(qty);
|
|
|
+
|
|
|
+ Row itemRow = getItemRow(itemid);
|
|
|
+
|
|
|
+ Boolean isInsert = true;
|
|
|
+ JSONArray customproperties = new JSONArray();
|
|
|
+ if (sa_orderitemsid <= 0) {
|
|
|
+ Rows rows;
|
|
|
+ if(!type.equals("配件订单")){
|
|
|
+ rows= dbConnect.runSqlQuery("SELECT sa_orderitemsid,price from sa_orderitems WHERE siteid='" + siteid + "' and itemid=" + itemid + " and sa_orderid=" + sa_orderid + " and sa_promotion_itemsid=" + item.getLongValue("sa_promotion_itemsid"));
|
|
|
+ }else{
|
|
|
+ if(StringUtils.isBlank(item.getStringValue("cardno"))){
|
|
|
+ rows= dbConnect.runSqlQuery("SELECT t1.sa_orderitemsid,qty from sa_orderitems t1 WHERE t1.siteid='" + siteid + "' and ifnull(cardno,'')='' and t1.itemid=" + itemid + " and t1.sa_orderid=" + sa_orderid);
|
|
|
+ }else{
|
|
|
+ rows= dbConnect.runSqlQuery("SELECT t1.sa_orderitemsid,qty from sa_orderitems t1 WHERE t1.siteid='" + siteid + "' and t1.itemid=" + itemid + " and t1.sa_orderid=" + sa_orderid + " and ifnull(t1.cardno,'')='"+item.getStringValue("cardno")+"'");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (rows.isEmpty()) {
|
|
|
+ sa_orderitemsid = createTableID("sa_orderitems");
|
|
|
+ } else {
|
|
|
+ //System.out.println(beans.order.Order.getDefaultIsRepeatValue(siteid, type));
|
|
|
+ if (beans.order.Order.getDefaultIsRepeatValue(siteid, type)) {
|
|
|
+ sa_orderitemsid = createTableID("sa_orderitems");
|
|
|
+ isInsert = true;
|
|
|
+ } else {
|
|
|
+ //price1 = rows.get(0).getBigDecimal("price");
|
|
|
+ sa_orderitemsid = rows.get(0).getLong("sa_orderitemsid");
|
|
|
+ item.put("qty",item.getBigDecimal("qty").add(rows.get(0).getBigDecimal("qty")));
|
|
|
+ isInsert = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ isInsert = false;
|
|
|
+ }
|
|
|
+ if (!isInsert) {
|
|
|
+ if (dbConnect.runSqlQuery("SELECT 1 from sa_orderitems WHERE itemid=" + itemid + " and sa_orderid=" + sa_orderid + " and siteid='" + siteid + "'").isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //是否符合商品起订量和增量判断
|
|
|
+ orderItemsHelper.compareQty(type, itemRowsMap, item, itemRow, new Rows());
|
|
|
+
|
|
|
+ BigDecimal defaultprice;
|
|
|
+ BigDecimal price;
|
|
|
+ BigDecimal saleprice;
|
|
|
+
|
|
|
+
|
|
|
+ //价格
|
|
|
+ ItemPrice itemPrice = ItemPrice.getItemPrice(this, sys_enterpriseid, itemid);
|
|
|
+ price = orderItemsHelper.getPrice(orderRows.get(0), itemPrice, item);
|
|
|
+ saleprice = orderItemsHelper.getSalePrice(orderRows.get(0), itemPrice, item, itemRowsMap);
|
|
|
+ if (price.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ return getErrReturnObject().setErrMsg("价格不可小于0").toString();
|
|
|
+ }
|
|
|
+ defaultprice = price;
|
|
|
+ if (isInsert) {
|
|
|
+ sa_orderitemsids_insert.add(sa_orderitemsid);
|
|
|
+ sqlList.add(orderItemsHelper.getInsertSQL(customproperties, sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice, itemPrice.getMarketprice(), "", new Rows(), 0, 0, BigDecimal.ZERO, BigDecimal.valueOf(1), BigDecimal.valueOf(1)).getSQL());
|
|
|
+ if (item.getLongValue("sa_workorderid") != 0) {
|
|
|
+ sqlList.add("update sa_workorder_node_items set sourceid=" + sa_orderid + ",sourcetable='sa_order' where sa_workorderid=" + item.getLongValue("sa_workorderid") + " and itemid=" + item.getLong("itemid"));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ price = item.getBigDecimal("price");
|
|
|
+ defaultprice=item.getBigDecimal("defaultprice");
|
|
|
+ sqlList.add(orderItemsHelper.getUpdateSQL(sa_orderitemsid, item, itemRow, type, defaultprice, price, saleprice, 0,0).getSQL());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ dbConnect.runSqlUpdate(sqlList);
|
|
|
+ //重新排序
|
|
|
+ updateRowNo(sa_orderid);
|
|
|
+ //更新订单扣款信息
|
|
|
+ updateAccountclassinfos(sa_orderid);
|
|
|
+
|
|
|
+ if(type.equals("配件订单")){
|
|
|
+ dbConnect.runSqlUpdate("UPDATE sa_order o JOIN (SELECT sa_orderid,GROUP_CONCAT(DISTINCT delivery SEPARATOR '+') AS delivery FROM sa_orderitems where sa_orderid="+sa_orderid+" GROUP BY sa_orderid) od ON o.sa_orderid = od.sa_orderid SET o.delivery = od.delivery ");
|
|
|
+ }
|
|
|
+ sqlList=new ArrayList<>();
|
|
|
+ if (type.equals("配件订单")) {
|
|
|
+ Rows rowsdetails = dbConnect.runSqlQuery("select t1.price,t1.amount,t1.sa_orderitemsid,t1.itemid,ifnull(t2.iswriteoff,0) iswriteoff,t3.begdate,t3.enddate from sa_orderitems t1 " +
|
|
|
+ "left join plm_item t2 on t1.itemid=t2.itemid and t1.siteid=t2.siteid " +
|
|
|
+ "left join sa_warrantycard t3 on t1.cardno=t3.cardno and t1.siteid=t3.siteid and t3.isvoid=0 and t3.deleted=0 where t1.sa_orderid=" + sa_orderid);
|
|
|
+ for (Row rowsdetail : rowsdetails) {
|
|
|
+ String billingstatus = "";
|
|
|
+ BigDecimal price = rowsdetail.getBigDecimal("price");
|
|
|
+ BigDecimal amount = rowsdetail.getBigDecimal("amount");
|
|
|
+ String begdate = rowsdetail.getString("begdate");
|
|
|
+ String enddate = rowsdetail.getString("enddate");
|
|
|
+ if (StringUtils.isBlank(begdate) || StringUtils.isBlank(enddate)) {
|
|
|
+ billingstatus = "保外收费";
|
|
|
+ } else {
|
|
|
+ Date date = new Date();
|
|
|
+ if (date.before(rowsdetail.getDate("enddate"))) {
|
|
|
+ if (rowsdetail.getBoolean("iswriteoff")) {
|
|
|
+ billingstatus = "保内收费";
|
|
|
+ } else {
|
|
|
+ billingstatus = "保内免费";
|
|
|
+ if(sa_orderitemsids_insert.contains(rowsdetail.getLong("sa_orderitemsid"))){
|
|
|
+ price = BigDecimal.ZERO;
|
|
|
+ amount = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ billingstatus = "保外收费";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!billingstatus.equals("保内收费")){
|
|
|
+ sqlList.add("update sa_orderitems set canoffqty=0 where sa_orderitemsid=" + rowsdetail.getLong("sa_orderitemsid"));
|
|
|
+ }
|
|
|
+ sqlList.add("update sa_orderitems set price=" + price + ",amount=" + amount + ",billingstatus='" + billingstatus + "' where sa_orderitemsid=" + rowsdetail.getLong("sa_orderitemsid"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dbConnect.runSqlUpdate(sqlList);
|
|
|
+
|
|
|
+ return getSucReturnObject().toString();
|
|
|
+ }
|
|
|
+
|
|
|
@API(title = "新增或更新", apiversion = R.ID20221109093602.v1.class, intervaltime = 200)
|
|
|
@CACHEING_CLEAN(apiClass = {Order.class, OrderItems.class, restcontroller.sale.order.Order.class, ToolBill.class, accessoryorder.class})
|
|
|
public String insertOrUpdate() throws YosException {
|