Răsfoiți Sursa

库存转移--更新批次号

zhangyao 4 luni în urmă
părinte
comite
bbb9298007

+ 0 - 3
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/costPickFormAfterSave.java

@@ -177,9 +177,7 @@ public class costPickFormAfterSave extends ExecuteListener {
                 ivtTransfer.set("QUANTITY", pickBO.get("PICK_QUANTITY"));
                 ivtTransfer.set("QUANTITY", pickBO.get("PICK_QUANTITY"));
                 ivtTransfer.set("TYPE_ID", 1481);  // 仓库间转移
                 ivtTransfer.set("TYPE_ID", 1481);  // 仓库间转移
                 SDK.getBOAPI().create("BO_EU_DNIVT_TRANSFER", ivtTransfer, transfeProcessIns, processExecutionContext.getUserContext(), conn);
                 SDK.getBOAPI().create("BO_EU_DNIVT_TRANSFER", ivtTransfer, transfeProcessIns, processExecutionContext.getUserContext(), conn);
-
                 //BO_EU_DNIVT_TRANSFER_SN
                 //BO_EU_DNIVT_TRANSFER_SN
-
                 for (String serialNumber : pickSerials) {
                 for (String serialNumber : pickSerials) {
                     BO snBO = new BO();
                     BO snBO = new BO();
                     snBO.setBindId(ivtTransfer.getBindId());
                     snBO.setBindId(ivtTransfer.getBindId());
@@ -188,7 +186,6 @@ public class costPickFormAfterSave extends ExecuteListener {
                     SDK.getBOAPI().createDataBO("BO_EU_DNIVT_TRANSFER_SN", snBO, processExecutionContext.getUserContext(), conn);
                     SDK.getBOAPI().createDataBO("BO_EU_DNIVT_TRANSFER_SN", snBO, processExecutionContext.getUserContext(), conn);
                 }
                 }
 
 
-
                 BO toWarehouseProductBO = SDK.getBOAPI().query("BO_EU_DNIVT_WAREHOUSE_PRODUCT").connection(conn).addQuery("PRODUCT_ID=", pickBO.getString("PRODUCT_ID")).addQuery("WAREHOUSE_ID=", WAREHOUSE_ID).detail();
                 BO toWarehouseProductBO = SDK.getBOAPI().query("BO_EU_DNIVT_WAREHOUSE_PRODUCT").connection(conn).addQuery("PRODUCT_ID=", pickBO.getString("PRODUCT_ID")).addQuery("WAREHOUSE_ID=", WAREHOUSE_ID).detail();
                 if (toWarehouseProductBO != null) {
                 if (toWarehouseProductBO != null) {
                     toWarehouseProductBO.set("QUANTITY", ObjToInt(toWarehouseProductBO.get("QUANTITY")) + ObjToInt(pickBO.get("PICK_QUANTITY")));
                     toWarehouseProductBO.set("QUANTITY", ObjToInt(toWarehouseProductBO.get("QUANTITY")) + ObjToInt(pickBO.get("PICK_QUANTITY")));

BIN
com.awspaas.user.apps.donenow_ivt/lib/com.awspaas.user.apps.donenow_ivt.jar


+ 67 - 17
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/event/ivtTransferFormSaveAfter.java

@@ -11,7 +11,9 @@ import org.apache.commons.lang3.StringUtils;
 
 
 import java.sql.Connection;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 public class ivtTransferFormSaveAfter extends ExecuteListener {
 public class ivtTransferFormSaveAfter extends ExecuteListener {
     public String getDescription() {
     public String getDescription() {
@@ -26,9 +28,11 @@ public class ivtTransferFormSaveAfter extends ExecuteListener {
     @Override
     @Override
     public void execute(ProcessExecutionContext processExecutionContext) throws Exception {
     public void execute(ProcessExecutionContext processExecutionContext) throws Exception {
         String processId = processExecutionContext.getProcessInstance().getId();
         String processId = processExecutionContext.getProcessInstance().getId();
-        RowMap rowMap = DBSql.getMap("select * from BO_EU_DNIVT_TRANSFER where BINDID =?", processId);
-        List<RowMap> rowMaps = DBSql.getMaps("select * from BO_EU_DNIVT_TRANSFER_SN where BINDID =?", processId);
+        RowMap rowMap = DBSql.getMap("select * from BO_EU_DNIVT_TRANSFER where BINDID =?", new Object[]{processId});
+        if (rowMap.getString("STATUS").equals("1"))
+            return;
 
 
+        String sns = rowMap.getString("SN");
         Connection conn = null;
         Connection conn = null;
         try {
         try {
             conn = DBSql.open();
             conn = DBSql.open();
@@ -48,13 +52,48 @@ public class ivtTransferFormSaveAfter extends ExecuteListener {
                 fromBO.set("QUANTITY", fromQuantity);
                 fromBO.set("QUANTITY", fromQuantity);
                 SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT", fromBO, conn);
                 SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT", fromBO, conn);
 
 
-                if (rowMaps != null && rowMaps.size() > 0)
-                    for (RowMap sn : rowMaps) {
-                        BO snBO = SDK.getBOAPI().query("BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN").connection(conn).addQuery("WAREHOUSE_PRODUCT_ID=", fromBO.getId()).addQuery("SN=", sn.getString("SN")).detail();
-                        if (snBO != null) {
-                            SDK.getBOAPI().remove("BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN", snBO.getId(), conn);
+                List<Map<String, Object>> fromLosts = new ArrayList<>();
+                //更新出库的批次号
+                if (StringUtils.isNotBlank(sns)) {
+                    String[] asArr = sns.split(",");
+                    int cnt = 0;
+                    List<BO> lots = SDK.getBOAPI().query("BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT").addQuery("BINDID=", fromBO.getBindId()).list();
+                    for (BO lot : lots) {
+                        boolean isIn = false;
+                        String lotSN = lot.getString("SN");
+                        lotSN = "," + lotSN + ",";
+                        List<String> toSN = new ArrayList<>();
+                        for (String sn : asArr) {
+                            if (lotSN.contains("," + sn + ",")) {
+                                isIn = true;
+                                lotSN = lotSN.replace("," + sn + ",", "");
+                                toSN.add(sn);
+                                cnt++;
+                            }
+                            if (cnt >= asArr.length) break;
                         }
                         }
+                        if (isIn) {
+
+                            Map<String, Object> map = lot.asMap();
+
+                            map.remove("ID");
+                            map.remove("BINDID");
+                            map.put("SN", StringUtils.join(lotSN, ","));
+                            map.put("QUANTITY", toSN.size());
+                            fromLosts.add(map);
+
+
+                            lotSN = lotSN.replaceAll("^,+|,+$", "") // 移除首尾一个或多个逗号
+                                    .replaceAll(",+", ",");     // 合并中间连续逗号
+                            int count = (int) lotSN.chars().filter(c -> c == ',').count();
+                            lot.set("SN", lotSN);
+                            lot.set("QUANTITY", count);
+                            SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT", lot, conn);
+                        }
+                        if (cnt >= asArr.length) break;
                     }
                     }
+                }
+
 
 
                 if (TYPE_ID.equals("1481"))//仓库间转移
                 if (TYPE_ID.equals("1481"))//仓库间转移
                 {
                 {
@@ -79,26 +118,37 @@ public class ivtTransferFormSaveAfter extends ExecuteListener {
                         toBO.set("QUANTITY", toBO.get("QUANTITY", Integer.class) + rowMap.getInt("QUANTITY"));
                         toBO.set("QUANTITY", toBO.get("QUANTITY", Integer.class) + rowMap.getInt("QUANTITY"));
                         SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT", toBO, conn);
                         SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT", toBO, conn);
                     }
                     }
-                    if (rowMaps != null && rowMaps.size() > 0)
-                        for (RowMap sn : rowMaps) {
-                            BO snBO = new BO();
-                            snBO.set("WAREHOUSE_PRODUCT_ID", toBO.getId());
-                            snBO.set("SN", sn.getString("SN"));
-                            snBO.setBindId(processId);
-                            SDK.getBOAPI().create("BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN", snBO, "", processExecutionContext.getUserContext().getUID(), conn);
+
+
+                    //入库的批次号
+                    //更新出库的批次号
+                    if (StringUtils.isNotBlank(sns)) {
+                        for (Map<String, Object> lot : fromLosts) {
+                            BO toLot = SDK.getBOAPI().query("BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT").addQuery("LOT=", lot.get("LOT")).addQuery("ORDER_PRODUCT_ID=", lot.get("ORDER_PRODUCT_ID")).addQuery("BINDID=", toBO.getBindId()).detail();
+                            if (toLot != null) {
+                                toLot.set("QUANTITY", Integer.parseInt(toLot.get("QUANTITY").toString()) + Integer.parseInt(lot.get("QUANTITY").toString()));
+                                toLot.set("SN", toLot.get("SN") + "," + lot.get("SN"));
+                                SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT", toLot, conn);
+                            } else {
+                                toLot = new BO();
+                                toBO.setAll(lot);
+                                toLot.setBindId(toBO.getBindId());
+                                SDK.getBOAPI().createDataBO("BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT", toLot, processExecutionContext.getUserContext(), conn);
+                            }
                         }
                         }
+                    }
                 }
                 }
-
             }
             }
 
 
+            //更新状态
+            DBSql.update(conn, "update BO_EU_DNIVT_TRANSFER set STATUS=1 where BINDID=?", new Object[]{processId});
 
 
             conn.commit();
             conn.commit();
         } catch (SQLException e) {
         } catch (SQLException e) {
             e.printStackTrace();
             e.printStackTrace();
             conn.rollback();
             conn.rollback();
         } finally {
         } finally {
-            if (conn != null)
-                DBSql.close(conn);
+            if (conn != null) DBSql.close(conn);
         }
         }
 
 
     }
     }