|
@@ -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);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|