|
|
@@ -10,6 +10,8 @@ import com.actionsoft.sdk.local.SDK;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
import java.sql.Connection;
|
|
|
+import java.util.LinkedHashSet;
|
|
|
+import java.util.Set;
|
|
|
|
|
|
public class costPickFormAfterSave extends ExecuteListener {
|
|
|
public String getDescription() {
|
|
|
@@ -28,6 +30,38 @@ public class costPickFormAfterSave extends ExecuteListener {
|
|
|
String warehouseProductId = pickBO.getString("WAREHOUSE_PRODUCT_ID");
|
|
|
String contractCostId = pickBO.getString("CONTRACT_COST_ID");
|
|
|
|
|
|
+ Set<String> pickSerials = new LinkedHashSet<>();
|
|
|
+ String pick_sns = pickBO.getString("SERIAL_NUMBERS");
|
|
|
+ String PICKED_SNS = pickBO.getString("PICKED_SNS");
|
|
|
+
|
|
|
+ // 处理PICKED_SNS不为空的情况
|
|
|
+ if (StringUtils.isNotBlank(PICKED_SNS)) {
|
|
|
+ // 1. 处理originalSerials为null的情况,转为空字符串避免拼接出"null"
|
|
|
+ String normalizedOriginals = StringUtils.defaultString(pick_sns, "");
|
|
|
+
|
|
|
+ // 2. 拼接两个字符串,避免在originalSerials为空时产生多余逗号(如"picked,")
|
|
|
+ String combined;
|
|
|
+ if (normalizedOriginals.isEmpty()) {
|
|
|
+ combined = PICKED_SNS;
|
|
|
+ } else {
|
|
|
+ combined = PICKED_SNS + "," + normalizedOriginals;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 分割并去重,用LinkedHashSet保持插入顺序(首次出现的元素保留)
|
|
|
+
|
|
|
+ for (String serial : combined.split(",")) {
|
|
|
+ // 过滤空字符串(避免连续逗号产生的空元素)
|
|
|
+ if (StringUtils.isNotBlank(serial)) {
|
|
|
+ pickSerials.add(serial);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 拼接去重后的结果,更新回BO
|
|
|
+ pick_sns = StringUtils.join(pickSerials, ",");
|
|
|
+ pickBO.set("SERIAL_NUMBERS", pick_sns);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
int PICK_QUANTITY = ObjToInt(pickBO.get("PICK_QUANTITY"));//拣货数量
|
|
|
//验库存
|
|
|
//可用库存
|
|
|
@@ -84,15 +118,14 @@ public class costPickFormAfterSave extends ExecuteListener {
|
|
|
costProductBO.set("WAREHOUSE_ID", WAREHOUSE_ID);
|
|
|
costProductBO.set("CONTRACT_COST_ID", contractCostId);
|
|
|
costProductBO.set("QUANTITY", pickBO.get("PICK_QUANTITY"));
|
|
|
- costProductBO.set("SN", pickBO.get("SERIAL_NUMBERS"));
|
|
|
+ costProductBO.set("SN", pick_sns);
|
|
|
|
|
|
costProductBO.set("STATUS_ID", STATUS_ID);
|
|
|
|
|
|
costProductBO.set("OLD_QUANTITY", costProductBO.get("QUANTITY"));//配送数量
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_COST_PRODUCT", costProductBO, processExecutionContext.getUserContext(), conn);
|
|
|
- String SERIAL_NUMBERS = pickBO.getString("SERIAL_NUMBERS");
|
|
|
- if (StringUtils.isNotBlank(SERIAL_NUMBERS)) {
|
|
|
- for (String serialNumber : SERIAL_NUMBERS.split(",")) {
|
|
|
+ if (StringUtils.isNotBlank(pick_sns)) {
|
|
|
+ for (String serialNumber : pickSerials) {
|
|
|
BO snBO = new BO();
|
|
|
snBO.setBindId(costProductBO.getBindId());
|
|
|
snBO.set("CONTRACT_COST_PRODUCT_ID", costProductBO.getId());
|
|
|
@@ -146,14 +179,14 @@ public class costPickFormAfterSave extends ExecuteListener {
|
|
|
SDK.getBOAPI().create("BO_EU_DNIVT_TRANSFER", ivtTransfer, transfeProcessIns, processExecutionContext.getUserContext(), conn);
|
|
|
|
|
|
//BO_EU_DNIVT_TRANSFER_SN
|
|
|
- if (StringUtils.isNotBlank(pickBO.getString("SERIAL_NUMBERS")))
|
|
|
- for (String serialNumber : pickBO.getString("SERIAL_NUMBERS").split(",")) {
|
|
|
- BO snBO = new BO();
|
|
|
- snBO.setBindId(ivtTransfer.getBindId());
|
|
|
- snBO.set("TRANSFER_ID", ivtTransfer.getId());
|
|
|
- snBO.set("SN", serialNumber);
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNIVT_TRANSFER_SN", snBO, processExecutionContext.getUserContext(), conn);
|
|
|
- }
|
|
|
+
|
|
|
+ for (String serialNumber : pickSerials) {
|
|
|
+ BO snBO = new BO();
|
|
|
+ snBO.setBindId(ivtTransfer.getBindId());
|
|
|
+ snBO.set("TRANSFER_ID", ivtTransfer.getId());
|
|
|
+ snBO.set("SN", serialNumber);
|
|
|
+ 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();
|
|
|
@@ -176,10 +209,10 @@ public class costPickFormAfterSave extends ExecuteListener {
|
|
|
SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT", fromWarehouseProductBO, conn);
|
|
|
|
|
|
//BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN
|
|
|
- if (StringUtils.isNotBlank(pickBO.getString("SERIAL_NUMBERS")))
|
|
|
- for (String serialNumber : pickBO.getString("SERIAL_NUMBERS").split(",")) {
|
|
|
- DBSql.update(conn, "update BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN set WAREHOUSE_PRODUCT_ID=? where WAREHOUSE_PRODUCT_ID=? and SN=?", new Object[]{toWarehouseProductBO.getId(), fromWarehouseProductBO.getId(), serialNumber});
|
|
|
- }
|
|
|
+
|
|
|
+ for (String serialNumber : pickSerials) {
|
|
|
+ DBSql.update(conn, "update BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN set WAREHOUSE_PRODUCT_ID=? where WAREHOUSE_PRODUCT_ID=? and SN=?", new Object[]{toWarehouseProductBO.getId(), fromWarehouseProductBO.getId(), serialNumber});
|
|
|
+ }
|
|
|
|
|
|
} else if (pickBO.getString("PICK_TYPE").equals("2"))//库存转移给客户
|
|
|
{
|
|
|
@@ -203,14 +236,14 @@ public class costPickFormAfterSave extends ExecuteListener {
|
|
|
ivtTransfer.set("QUANTITY", pickBO.get("PICK_QUANTITY"));
|
|
|
SDK.getBOAPI().create("BO_EU_DNIVT_TRANSFER", ivtTransfer, transfeProcessIns, processExecutionContext.getUserContext(), conn);
|
|
|
//BO_EU_DNIVT_TRANSFER_SN
|
|
|
- if (StringUtils.isNotBlank(pickBO.getString("SERIAL_NUMBERS")))
|
|
|
- for (String serialNumber : pickBO.getString("SERIAL_NUMBERS").split(",")) {
|
|
|
- BO snBO = new BO();
|
|
|
- snBO.setBindId(ivtTransfer.getBindId());
|
|
|
- snBO.set("TRANSFER_ID", ivtTransfer.getId());
|
|
|
- snBO.set("SN", serialNumber);
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNIVT_TRANSFER_SN", snBO, processExecutionContext.getUserContext(), conn);
|
|
|
- }
|
|
|
+
|
|
|
+ for (String serialNumber : pickSerials) {
|
|
|
+ BO snBO = new BO();
|
|
|
+ snBO.setBindId(ivtTransfer.getBindId());
|
|
|
+ snBO.set("TRANSFER_ID", ivtTransfer.getId());
|
|
|
+ snBO.set("SN", serialNumber);
|
|
|
+ SDK.getBOAPI().createDataBO("BO_EU_DNIVT_TRANSFER_SN", snBO, processExecutionContext.getUserContext(), conn);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
//减少库存
|
|
|
@@ -219,10 +252,10 @@ public class costPickFormAfterSave extends ExecuteListener {
|
|
|
SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT", fromWarehouseProductBO, conn);
|
|
|
|
|
|
//BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN
|
|
|
- if (StringUtils.isNotBlank(pickBO.getString("SERIAL_NUMBERS")))
|
|
|
- for (String serialNumber : pickBO.getString("SERIAL_NUMBERS").split(",")) {
|
|
|
- DBSql.update(conn, "delete from BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN where WAREHOUSE_PRODUCT_ID=? and SN=?", new Object[]{fromWarehouseProductBO.getId(), serialNumber});
|
|
|
- }
|
|
|
+
|
|
|
+ for (String serialNumber : pickSerials) {
|
|
|
+ DBSql.update(conn, "delete from BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN where WAREHOUSE_PRODUCT_ID=? and SN=?", new Object[]{fromWarehouseProductBO.getId(), serialNumber});
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
conn.commit();
|