Kaynağa Gözat

发货计划取单优化,部分逻辑认存在问题,需要胡鑫辉调整代码逻辑

shenjingwei 6 gün önce
ebeveyn
işleme
e8e796590c

+ 66 - 64
src/custom/restcontroller/webmanage/sale/sendplan/sendplandetail.java

@@ -22,26 +22,26 @@ public class sendplandetail extends Controller {
     @API(title = "订单信息刷新", apiversion = R.ID2025032709331803.v1.class)
     @CACHEING_CLEAN(apiClass = {sendplandetail.class})
     public String orderRefresh() throws YosException {
-        long sa_sendplanid =content.getLongValue("sa_sendplanid");
-        Rows sendplanRows = dbConnect.runSqlQuery("select * from sa_sendplan where sa_sendplanid='"+sa_sendplanid+"' and siteid='"+siteid+"'");
-        if(sendplanRows.isEmpty()){
+        long sa_sendplanid = content.getLongValue("sa_sendplanid");
+        Rows sendplanRows = dbConnect.runSqlQuery("select * from sa_sendplan where sa_sendplanid='" + sa_sendplanid + "' and siteid='" + siteid + "'");
+        if (sendplanRows.isEmpty()) {
             return getErrReturnObject().setErrMsg("发货计划不存在,无法进行订单信息刷新").toString();
         }
-        dbConnect.runSqlUpdate("delete from sa_sendplandetail where sa_sendplanid='"+sa_sendplanid+"' and siteid='"+siteid+"'");
+        dbConnect.runSqlUpdate("delete from sa_sendplandetail where sa_sendplanid='" + sa_sendplanid + "' and siteid='" + siteid + "'");
         /*
           过滤条件设置
          */
-        StringBuffer where = new StringBuffer(" 1=1 and t1.undeliqty>0 and t3.type='"+sendplanRows.get(0).getString("type")
-                +"' and  DATE_FORMAT(t3.checkdate, '%Y-%m-%d') >='"+sendplanRows.get(0).getString("begindate")
-                +"' and  DATE_FORMAT(t3.checkdate, '%Y-%m-%d') <='"+sendplanRows.get(0).getString("enddate")
-                +"' and ( \n" +
+        StringBuffer where = new StringBuffer(" 1=1 and t1.undeliqty>0 and t3.type='" + sendplanRows.get(0).getString("type")
+                + "' and  DATE_FORMAT(t3.checkdate, '%Y-%m-%d') >='" + sendplanRows.get(0).getString("begindate")
+                + "' and  DATE_FORMAT(t3.checkdate, '%Y-%m-%d') <='" + sendplanRows.get(0).getString("enddate")
+                + "' and ( \n" +
                 "\t\t(t3.type in('标准订单','网销订单')) or\n" +
                 "\t\t(\n" +
                 "\t\t\tt3.type='配件订单'\n" +
                 "\t\t\tand t3.sys_enterpriseid in (\n" +
                 "\t\t\tselect distinct sys_enterpriseid from st_stockbill \n" +
                 "\t\t\twhere type='销售出库'  and status='审核' and \n" +
-                "\t\t\tDATE_FORMAT(billdate, '%Y-%m-%d') = '"+sendplanRows.get(0).getString("senddate")+"'\n" +
+                "\t\t\tDATE_FORMAT(billdate, '%Y-%m-%d') = '" + sendplanRows.get(0).getString("senddate") + "'\n" +
                 "\t\t\t)\n" +
                 "\t\t))");
 
@@ -51,9 +51,11 @@ public class sendplandetail extends Controller {
         Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
         ArrayList<String> list = new ArrayList<>();
         //计划发货插入明细
-        for(Row row :rows){
-            InsertSQL insertSQL = SQLFactory.createInsertSQL(this,"sa_sendplandetail");
-            insertSQL.setUniqueid(createTableID("sa_sendplandetail"));
+        int i = 0;
+        long[] sendplandetailids = createTableID("sa_sendplandetail", rows.size());
+        for (Row row : rows) {
+            InsertSQL insertSQL = SQLFactory.createInsertSQL(this, "sa_sendplandetail");
+            insertSQL.setUniqueid(sendplandetailids[i++]);
             insertSQL.setSiteid(siteid);
             insertSQL.setValue("sa_sendplanid", sa_sendplanid);
             insertSQL.setValue("sendqty", row.getBigDecimal("sendqty"));
@@ -68,49 +70,49 @@ public class sendplandetail extends Controller {
         dbConnect.runSqlUpdate(list);
 
         //计划发货明细计算
-        list=new ArrayList<>();
-        Rows stockbillrows =dbConnect.runSqlQuery("\t\tselect itemid,sum(t2.qty) qty from st_stockbill t1\n" +
+        list = new ArrayList<>();
+        Rows stockbillrows = dbConnect.runSqlQuery("\t\tselect itemid,sum(t2.qty) qty from st_stockbill t1\n" +
                 "\t\t\tinner join st_stockbill_items t2 on t1.st_stockbillid=t2.st_stockbillid\n" +
-                "\t\t\twhere t1.type='销售出库'and t1.status='新建' and t1.siteid='"+siteid+"'\n" +
-                "\t\t\tand DATE_FORMAT(billdate, '%Y-%m-%d')<='"+sendplanRows.get(0).getString("senddate")+"'\n" +
+                "\t\t\twhere t1.type='销售出库'and t1.status='新建' and t1.siteid='" + siteid + "'\n" +
+                "\t\t\tand DATE_FORMAT(billdate, '%Y-%m-%d')<='" + sendplanRows.get(0).getString("senddate") + "'\n" +
                 "\t\t\tgroup by itemid");
-        Rows invbalrows =dbConnect.runSqlQuery("select itemid,sum(qty) qty from st_invbal t1 group by itemid");
-        Rows sendplandetails = dbConnect.runSqlQuery("select * from sa_sendplandetail where sa_sendplanid="+sa_sendplanid+" and siteid='"+siteid+"'");
-        RowsMap stockbillrowsMap =stockbillrows.toRowsMap("itemid");
-        RowsMap invbalrowsMap =invbalrows.toRowsMap("itemid");
-        for(Row row:sendplandetails){
-            BigDecimal canuseqty=BigDecimal.ZERO;
-            BigDecimal willoutqty=BigDecimal.ZERO;
-            BigDecimal invbalqty=BigDecimal.ZERO;
+        Rows invbalrows = dbConnect.runSqlQuery("select itemid,sum(qty) qty from st_invbal t1 group by itemid");
+        Rows sendplandetails = dbConnect.runSqlQuery("select * from sa_sendplandetail where sa_sendplanid=" + sa_sendplanid + " and siteid='" + siteid + "'");
+        RowsMap stockbillrowsMap = stockbillrows.toRowsMap("itemid");
+        RowsMap invbalrowsMap = invbalrows.toRowsMap("itemid");
+        for (Row row : sendplandetails) {
+            BigDecimal canuseqty = BigDecimal.ZERO;
+            BigDecimal willoutqty = BigDecimal.ZERO;
+            BigDecimal invbalqty = BigDecimal.ZERO;
             UpdateSQL updateSQL = SQLFactory.createUpdateSQL(this, "sa_sendplandetail");
             updateSQL.setUniqueid(row.getLong("sa_sendplandetailid")).setSiteid(siteid);
-            if(stockbillrowsMap.containsKey(row.getString("itemid"))){
-                willoutqty=stockbillrowsMap.get(row.getString("itemid")).get(0).getBigDecimal("qty");
+            if (stockbillrowsMap.containsKey(row.getString("itemid"))) {
+                willoutqty = stockbillrowsMap.get(row.getString("itemid")).get(0).getBigDecimal("qty");
             }
-            if(invbalrowsMap.containsKey(row.getString("itemid"))){
-                invbalqty=stockbillrowsMap.get(row.getString("itemid")).get(0).getBigDecimal("qty");
+            if (invbalrowsMap.containsKey(row.getString("itemid"))) {
+                invbalqty = stockbillrowsMap.get(row.getString("itemid")).get(0).getBigDecimal("qty");
             }
-            canuseqty=invbalqty.subtract(willoutqty);
-            updateSQL.setValue("willoutqty",willoutqty);
-            updateSQL.setValue("willinqty",0);
-            updateSQL.setValue("canuseqty",canuseqty);
-            if(canuseqty.compareTo(BigDecimal.ZERO)<=0){
-                updateSQL.setValue("sendqty",0);
-                updateSQL.setValue("colorflag",0);
-            }else {
-                if(canuseqty.compareTo(row.getBigDecimal("sendqty"))>=0){
-                    updateSQL.setValue("colorflag",2);
-                }else{
-                    updateSQL.setValue("colorflag",3);
+            canuseqty = invbalqty.subtract(willoutqty);
+            updateSQL.setValue("willoutqty", willoutqty);
+            updateSQL.setValue("willinqty", 0);
+            updateSQL.setValue("canuseqty", canuseqty);
+            if (canuseqty.compareTo(BigDecimal.ZERO) <= 0) {
+                updateSQL.setValue("sendqty", 0);
+                updateSQL.setValue("colorflag", 0);
+            } else {
+                if (canuseqty.compareTo(row.getBigDecimal("sendqty")) >= 0) {
+                    updateSQL.setValue("colorflag", 2);
+                } else {
+                    updateSQL.setValue("colorflag", 3);
                 }
             }
             list.add(updateSQL.getSQL());
         }
         dbConnect.runSqlUpdate(list);
-        list= new ArrayList<>();
-        Rows rows1 =dbConnect.runSqlQuery("select t1.sa_orderid from (select sa_orderid,count(0)count from sa_sendplandetail where sa_sendplanid="+sa_sendplanid+" group by sa_orderid) t1 inner join (select sa_orderid,count(0)count from sa_sendplandetail where colorflag='2' and  sa_sendplanid="+sa_sendplanid+"  group by sa_orderid) t2 on  t1.sa_orderid=t2.sa_orderid and t1.count=t2.count");
-        for(Row row :rows1){
-            list.add("update sa_sendplandetail set colorflag=1 where sa_sendplanid="+sa_sendplanid+" and sa_orderid ="+row.getLong("sa_orderid"));
+        list = new ArrayList<>();
+        Rows rows1 = dbConnect.runSqlQuery("select t1.sa_orderid from (select sa_orderid,count(0)count from sa_sendplandetail where sa_sendplanid=" + sa_sendplanid + " group by sa_orderid) t1 inner join (select sa_orderid,count(0)count from sa_sendplandetail where colorflag='2' and  sa_sendplanid=" + sa_sendplanid + "  group by sa_orderid) t2 on  t1.sa_orderid=t2.sa_orderid and t1.count=t2.count");
+        for (Row row : rows1) {
+            list.add("update sa_sendplandetail set colorflag=1 where sa_sendplanid=" + sa_sendplanid + " and sa_orderid =" + row.getLong("sa_orderid"));
         }
         dbConnect.runSqlUpdate(list);
         return getSucReturnObject().toString();
@@ -120,7 +122,7 @@ public class sendplandetail extends Controller {
     @CACHEING_CLEAN(apiClass = {sendplandetail.class})
     public String clearPlan() throws YosException {
         Long sa_sendplanid = content.getLongValue("sa_sendplanid");
-        dbConnect.runSqlUpdate("delete from sa_sendplandetail where sa_sendplanid='"+sa_sendplanid+"' and siteid='"+siteid+"'");
+        dbConnect.runSqlUpdate("delete from sa_sendplandetail where sa_sendplanid='" + sa_sendplanid + "' and siteid='" + siteid + "'");
         return getSucReturnObject().toString();
     }
 
@@ -130,15 +132,15 @@ public class sendplandetail extends Controller {
         JSONArray detailarray = content.getJSONArray("details");
         ArrayList<String> sqlList = new ArrayList<>();
         HashMap<String, HashMap<String, List<JSONObject>>> agentmap = new HashMap<String, HashMap<String, List<JSONObject>>>();
-        for(Object object :detailarray){
-            JSONObject jsonObject =(JSONObject) object;
+        for (Object object : detailarray) {
+            JSONObject jsonObject = (JSONObject) object;
             if (jsonObject.getDouble("sendqty") <= 0) {
                 continue;
             }
-            String key="";
+            String key = "";
             String sys_enterpriseid = jsonObject.getString("sys_enterpriseid");
             String outplace = jsonObject.getString("outplace");
-            key=sys_enterpriseid+outplace;
+            key = sys_enterpriseid + outplace;
             HashMap<String, List<JSONObject>> agent = null;
             List<JSONObject> paolist = null;
             if (agentmap.containsKey(sys_enterpriseid)) {
@@ -189,11 +191,11 @@ public class sendplandetail extends Controller {
                 sqlFactory.addParameter("changedate", getDateTime_Str());
                 sqlFactory.addParameter("checkby", username);
                 sqlFactory.addParameter("checkdate", getDateTime_Str());
-                sqlFactory.addParameter("remarks", "由发货计划自动生成"+key);
+                sqlFactory.addParameter("remarks", "由发货计划自动生成" + key);
                 sqlList.add(sqlFactory.getSQL());
 
                 Iterator<JSONObject> senddetailpaoit = paolist.iterator();
-                int rowno=1;
+                int rowno = 1;
                 while (senddetailpaoit.hasNext()) {
                     JSONObject jsonObject = senddetailpaoit.next();
                     BigDecimal qty = new BigDecimal(jsonObject.getString("sendqty"));
@@ -205,12 +207,12 @@ public class sendplandetail extends Controller {
                     sqlFactorydetail.addParameter("st_stockbill_itemsid", createTableID("st_stockbill_items"));
                     sqlFactorydetail.addParameter("st_stockbillid", st_stockbillid);
 
-                    Rows orderdetails = dbConnect.runSqlQuery("select * from sa_orderitems where sa_orderitemsid="+jsonObject.getLongValue("sa_orderitemsid"));
-                    if(orderdetails.isNotEmpty()){
+                    Rows orderdetails = dbConnect.runSqlQuery("select * from sa_orderitems where sa_orderitemsid=" + jsonObject.getLongValue("sa_orderitemsid"));
+                    if (orderdetails.isNotEmpty()) {
                         sqlFactorydetail.addParameter("remarks", orderdetails.get(0).getString("remarks"));
                         sqlFactorydetail.addParameter("price", orderdetails.get(0).getBigDecimal("price"));
                         sqlFactorydetail.addParameter("amount", orderdetails.get(0).getBigDecimal("price").multiply(qty));
-                    }else{
+                    } else {
                         sqlFactorydetail.addParameter("remarks", "");
                         sqlFactorydetail.addParameter("price", 0);
                         sqlFactorydetail.addParameter("amount", 0);
@@ -255,17 +257,17 @@ public class sendplandetail extends Controller {
         sqlFactory.addParameter_SQL("where", "1=1");
         sqlFactory.addParameter("siteid", siteid);
 
-        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_sendplandetail","sa_sendplandetailid","colorflag","topclassnum","outplace","sendqty","willoutqty","willinqty","canuseqty");
+        QuerySQL querySQL = SQLFactory.createQuerySQL(this, "sa_sendplandetail", "sa_sendplandetailid", "colorflag", "topclassnum", "outplace", "sendqty", "willoutqty", "willinqty", "canuseqty");
         querySQL.setTableAlias("t1");
-        querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t2", "t1.siteid = t2.siteid and t1.sa_orderid = t2.sa_orderid","sonum","checkdate","sys_enterpriseid","sa_orderid");
-        querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t3", "t3.siteid = t1.siteid and t3.sa_orderitemsid = t1.sa_orderitemsid","rowno","remarks","sa_orderitemsid");
-        querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t4", "t4.siteid = t1.siteid and t4.sa_agentsid = t1.sa_agentsid","agentnum");
-        querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t5", "t5.siteid = t4.siteid and t5.sys_enterpriseid = t4.sys_enterpriseid","abbreviation");
-        querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t6", "t6.siteid = t3.siteid and t6.itemid = t3.itemid","itemno","itemname","model","itemid");
-        querySQL.addJoinTable(JOINTYPE.left, sqlFactory , "t7", "t7.sa_orderitemsid = t3.sa_orderitemsid","undeliqty");
-        querySQL.addJoinTable(JOINTYPE.left, "st_invbal" , "t8", "t8.itemid = t3.itemid and stockid='101'");
-        querySQL.addJoinTable(JOINTYPE.left, "st_invbal" , "t9", "t9.itemid = t3.itemid and stockid='103'");
-        querySQL.addJoinTable(JOINTYPE.left, "st_invbal" , "t10", "t10.itemid = t3.itemid and stockid='109'");
+        querySQL.addJoinTable(JOINTYPE.left, "sa_order", "t2", "t1.siteid = t2.siteid and t1.sa_orderid = t2.sa_orderid", "sonum", "checkdate", "sys_enterpriseid", "sa_orderid");
+        querySQL.addJoinTable(JOINTYPE.left, "sa_orderitems", "t3", "t3.siteid = t1.siteid and t3.sa_orderitemsid = t1.sa_orderitemsid", "rowno", "remarks", "sa_orderitemsid");
+        querySQL.addJoinTable(JOINTYPE.left, "sa_agents", "t4", "t4.siteid = t1.siteid and t4.sa_agentsid = t1.sa_agentsid", "agentnum");
+        querySQL.addJoinTable(JOINTYPE.left, "sys_enterprise", "t5", "t5.siteid = t4.siteid and t5.sys_enterpriseid = t4.sys_enterpriseid", "abbreviation");
+        querySQL.addJoinTable(JOINTYPE.left, "plm_item", "t6", "t6.siteid = t3.siteid and t6.itemid = t3.itemid", "itemno", "itemname", "model", "itemid");
+        querySQL.addJoinTable(JOINTYPE.left, sqlFactory, "t7", "t7.sa_orderitemsid = t3.sa_orderitemsid", "undeliqty");
+        querySQL.addJoinTable(JOINTYPE.left, "st_invbal", "t8", "t8.itemid = t3.itemid and stockid='101'");
+        querySQL.addJoinTable(JOINTYPE.left, "st_invbal", "t9", "t9.itemid = t3.itemid and stockid='103'");
+        querySQL.addJoinTable(JOINTYPE.left, "st_invbal", "t10", "t10.itemid = t3.itemid and stockid='109'");
         querySQL.setSiteid(siteid);
         querySQL.setWhere(where.toString());
         querySQL.addQueryFields("willoutqty_jh", "t7.willoutqty");