ソースを参照

定制费用优化调整

eganwu 2 年 前
コミット
1f2db9f3da

+ 5 - 0
src/custom/restcontroller/R.java

@@ -5425,6 +5425,11 @@ public class R {
         }
     }
 
+    public static class ID20231225141902 {
+        public static class v1 {
+        }
+    }
+
 }
 
 

+ 19 - 14
src/custom/restcontroller/webmanage/sale/order/Order.java

@@ -265,9 +265,9 @@ public class Order extends Controller {
         for (Object obj : items) {
             JSONObject item = (JSONObject) obj;
             if (type.equals("促销订单")) {
-                orderItemsHelper.checkOffOrderItems("sa_promotion_items", item.getLongValue("itemid"),sa_promotionid);
+                orderItemsHelper.checkOffOrderItems("sa_promotion_items", item.getLongValue("itemid"), sa_promotionid);
             } else {
-                orderItemsHelper.checkOffOrderItems("plm_item", item.getLongValue("itemid"),sa_promotionid);
+                orderItemsHelper.checkOffOrderItems("plm_item", item.getLongValue("itemid"), sa_promotionid);
             }
 
             Long temp_sa_brandid = item.getLongValue("sa_brandid");
@@ -600,26 +600,31 @@ public class Order extends Controller {
 
         row.put("rebatebalance", Accountbalance.getRebateBalance(this, pay_enterpriseid));
 
-        //查询业务员是否可编辑价格
-        Rows saleRows = dbConnect.runSqlQuery("SELECT * from sa_salearea_hr WHERE hrid = " + hrid + " and siteid='" + siteid + "'");
-
+//        //查询业务员是否可编辑价格
+//        Rows saleRows = dbConnect.runSqlQuery("SELECT * from sa_salearea_hr WHERE hrid = " + hrid + " and siteid='" + siteid + "'");
+        //查询定制费用
+        sql = "SELECT ifnull(sum(costamount),0) costamount from sa_order_cost WHERE sa_orderid=" + sa_orderid;
+         BigDecimal costamount = dbConnect.runSqlQuery(0, sql).getBigDecimal("costamount");
+        row.put("costamount", costamount);
 
         JSONArray jsonArray = row.getJSONArray("sa_accountclassinfos");
-        row.remove("sa_accountclassinfos");
+        int index = 1;
         for (Object object : jsonArray) {
+
             JSONObject jsonObject = (JSONObject) object;
             Long id = jsonObject.getLong("sa_accountclassid");
             Rows accountbalanceRows = dbConnect.runSqlQuery("SELECT balance from sa_accountbalance WHERE sa_accountclassid=" + id + " and sys_enterpriseid=" + row.getLong("sys_enterpriseid"));
             if (accountbalanceRows.isNotEmpty()) {
                 jsonObject.put("realbalance", accountbalanceRows.get(0).getBigDecimal("balance"));
             }
+            if (jsonArray.size() == index) {
+                jsonObject.put("amount", jsonObject.getBigDecimalValue("amount").add(costamount));
+            }
+            index++;
         }
-//        System.err.println(jsonArray);
-        row.put("sa_accountclassinfos", jsonArray);
-        //查询定制费用
-        sql = "SELECT ifnull(sum(costamount),0) costamount from sa_order_cost WHERE sa_orderid=" + sa_orderid;
-        BigDecimal costamount = dbConnect.runSqlQuery(0, sql).getBigDecimal("costamount");
-        row.put("costamount", costamount);
+        row.replace("sa_accountclassinfos", jsonArray);
+        row.replace("amount", row.getBigDecimal("amount").add(costamount));
+        row.replace("defaultamount", row.getBigDecimal("defaultamount").add(costamount));
 
 
         return getSucReturnObject().setData(row).toString();
@@ -1439,7 +1444,7 @@ public class Order extends Controller {
         //促销订单:提交时商品必须是上架状态,并且活动方案中的商品必须也是上架状态,否则不允许提交
         if (type.equals("促销订单")) {
 //            orderItemsHelper.checkOffOrderItems(sa_orderid, "plm_item");
-            orderItemsHelper.checkOffOrderItems(sa_orderid, "sa_promotion_items",sa_promotionid);
+            orderItemsHelper.checkOffOrderItems(sa_orderid, "sa_promotion_items", sa_promotionid);
         }
 
         if (type.equals("标准订单") || type.equals("促销订单")) {
@@ -3393,7 +3398,7 @@ public class Order extends Controller {
             if (promotion_auth.isNotEmpty()) {
                 sa_promotion_authid = promotion_auth.get(0).getLong("sa_promotion_authid");
             }
-            BigDecimal amount_orderaccount = orderaccountclassinfo.getBigDecimalValue("amount",0);
+            BigDecimal amount_orderaccount = orderaccountclassinfo.getBigDecimalValue("amount", 0);
             if (amount_orderaccount.compareTo(totalprice) >= 0) {
                 System.out.println("1111");
                 CashbillEntity entity = new CashbillEntity();

+ 85 - 1
src/custom/restcontroller/webmanage/sale/order/OrderFeeCostPlan.java

@@ -6,12 +6,15 @@ import com.huaweicloud.sdk.lts.v2.model.SqlAlarmRuleRespList;
 import common.Controller;
 import common.YosException;
 import common.annotation.API;
+import common.annotation.Param;
 import common.data.*;
 import io.swagger.annotations.Api;
 import org.apache.camel.json.simple.Jsonable;
 import restcontroller.R;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
+import java.util.HashMap;
 
 /**
  * 定制费用方案
@@ -198,11 +201,92 @@ public class OrderFeeCostPlan extends Controller {
         Long status = content.getLongValue("status");
         UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sys_datafunction");
         updateSQL.setUniqueid(sys_datafunctionid);
-        updateSQL.setValue("status", status==1?"启用":"禁用");
+        updateSQL.setValue("status", status == 1 ? "启用" : "禁用");
         updateSQL.update();
 
 
         return getSucReturnObject().toString();
     }
 
+    @API(title = "新增或修改方案", apiversion = R.ID20231225141902.v1.class)
+    public String insertormodifyFunction() throws YosException {
+        long sys_datafunctionid = content.getLong("sys_datafunctionid");
+        String classname = content.getString("classname");
+        String remarks = content.getString("remarks");
+
+
+        HashMap<String, Param> sys_paramMap = new HashMap<>();
+        if (!classname.equals("")) {
+            try {
+                Class<?> clz = Class.forName("function." + classname);
+                for (Field field : clz.getDeclaredFields()) {
+                    if (field.isAnnotationPresent(Param.class)) {
+                        sys_paramMap.put(field.getName(), field.getAnnotation(Param.class));
+                    }
+                }
+            } catch (Exception e) {
+                return getErrReturnObject().setErrMsg("无效的执行类" + classname).toString();
+            }
+        }
+
+
+        if (sys_datafunctionid <= 0 || dbConnect.runSqlQuery("select * from sys_datafunction where sys_datafunctionid=" + sys_datafunctionid).isEmpty()) {
+            sys_datafunctionid = createTableID("sys_datafunction");
+            InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sys_datafunction");
+            insertSQL.setValue("sys_datafunctionid", sys_datafunctionid);
+            insertSQL.setValue("functionname", createBillCode("dfnum"));
+            insertSQL.setValue("type", "update");
+            insertSQL.setValue("classname", classname);
+            insertSQL.setValue("remarks", remarks);
+            insertSQL.setValue("datakey", "default");
+            insertSQL.setValue("functionclass", "ordercost");
+            insertSQL.insert();
+
+        } else {
+            UpdateSQL rowUpdate = SQLFactory.createUpdateSQL(this, "sys_datafunction");
+            rowUpdate.setValue("remarks", remarks);
+            rowUpdate.setValue("classname", classname);
+            rowUpdate.setValue("functionclass", "ordercost");
+            rowUpdate.setWhere("sys_datafunctionid", sys_datafunctionid);
+            rowUpdate.update();
+        }
+
+        ArrayList<String> ps = new ArrayList<>();
+        ArrayList<String> paramSqlList = new ArrayList<>();
+        //获取执行函数的参数
+        for (String sys_param : sys_paramMap.keySet()) {
+            ps.add(sys_param);
+            Param param = sys_paramMap.get(sys_param);
+            if (dbConnect.runSqlQuery("select *from sys_datafunction_params where sys_datafunctionid=" + sys_datafunctionid + " and param='" + sys_param + "'").isEmpty()) {
+                InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sys_datafunction_params");
+                insertSQL.setValue("sys_datafunctionid", sys_datafunctionid);
+                insertSQL.setValue("param", sys_param);
+                if (sys_param.equals("siteid")) {
+                    insertSQL.setValue("value", siteid);
+                }
+                insertSQL.setValue("paramname", param.paramname());
+                insertSQL.setValue("remarks", param.remarks());
+                insertSQL.setValue("issystem", param.issystem());
+                paramSqlList.add(insertSQL.getSQL());
+            } else {
+                UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sys_datafunction_params");
+                updateSQL.setValue("paramname", param.paramname());
+                updateSQL.setValue("issystem", param.issystem());
+                updateSQL.setWhere("sys_datafunctionid", sys_datafunctionid).setWhere("param", param).setWhere("ifnull(paramname,'')=''");
+                paramSqlList.add(updateSQL.getSQL());
+            }
+        }
+        /*
+        删除多余的参数
+         */
+        DeleteSQL deleteSQL = SQLFactory.createDeleteSQL(this, "sys_datafunction_params");
+        deleteSQL.setWhere("sys_datafunctionid", sys_datafunctionid);
+        deleteSQL.setWhere("param not in $params$");
+        deleteSQL.addParameter("params", ps);
+        paramSqlList.add(deleteSQL.getSQL());
+
+        dbConnect.runSqlUpdate(paramSqlList);
+        return getSucReturnObject().toString();
+    }
+
 }

+ 12 - 2
src/custom/restcontroller/webmanage/sale/order/OrderItems.java

@@ -17,6 +17,7 @@ import common.annotation.API;
 import common.annotation.CACHEING;
 import common.annotation.CACHEING_CLEAN;
 import common.data.*;
+import org.apache.commons.lang.StringUtils;
 import restcontroller.R;
 import restcontroller.webmanage.sale.aftersalesmag.twriteoffbill_orderchange;
 import restcontroller.webmanage.sale.rebate.Rebate;
@@ -181,6 +182,15 @@ public class OrderItems extends Controller {
 
         //查询商品费用方案方法
         orderItemsHelper.executeDataFunction(sa_orderid);
+        //生成摘要
+        SQLFactory sqlFactory = new SQLFactory(this, "查询定制费用统计");
+        sqlFactory.addParameter("sa_orderid", sa_orderid);
+        Rows rows = dbConnect.runSqlQuery(sqlFactory);
+        if (rows.isNotEmpty()) {
+            String remarks = StringUtils.join(rows.toArray("remarks"), ";");
+            dbConnect.runSqlQuery("UPDATE sa_order set remarks ='" + remarks + "' WHERE sa_orderid='" + sa_orderid + "'");
+
+        }
 
         return getSucReturnObject().toString();
     }
@@ -611,7 +621,7 @@ public class OrderItems extends Controller {
 
         ERPDocking erpDocking = new ERPDocking(siteid);
         if (rows.toJsonArray("itemno").size() != 0) {
-            if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true") ) {
+            if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true")) {
                 jsonArray = erpDocking.getErpIcinvbalRows(1000, 1, rows.toJsonArray("itemno"));
             }
         }
@@ -817,7 +827,7 @@ public class OrderItems extends Controller {
         ERPDocking erpDocking = new ERPDocking(siteid);
         JSONArray jsonArray = new JSONArray();
         if (rows.toJsonArray("itemno").size() != 0) {
-            if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true") ) {
+            if (Parameter.get("system.ccerp_dockswitch").equalsIgnoreCase("true")) {
                 jsonArray = erpDocking.getErpIcinvbalRows(200000, 1, rows.toJsonArray("itemno"));
             }
         }

+ 5 - 0
src/custom/restcontroller/webmanage/sale/order/SQL/查询定制费用统计.sql

@@ -0,0 +1,5 @@
+SELECT t2.functionname, CONCAT(t2.remarks, ':', sum(costamount)) remarks
+from sa_order_cost t1
+         inner join sys_datafunction t2 ON t2.sys_datafunctionid = t1.sys_datafunctionid
+WHERE t1.sa_orderid = $sa_orderid$
+GROUP by t2.functionname, t2.remarks