|
|
@@ -49,11 +49,9 @@ public class contractCostController {
|
|
|
int warehouseProductAvailableQuantity = ObjToInt(DBSql.getString("SELECT SUM(AVAILABLE) FROM VIEW_EU_DNINVT_PRODUCT_INVENTORY where ID=?", new Object[]{warehouseProductId}));
|
|
|
logger.info("可用库存数量:" + warehouseProductAvailableQuantity);
|
|
|
|
|
|
- if (warehouseProductAvailableQuantity <= 0)
|
|
|
- return ResponseObject.newErrResponse("库存数量不足");
|
|
|
+ if (warehouseProductAvailableQuantity <= 0) return ResponseObject.newErrResponse("库存数量不足");
|
|
|
|
|
|
- if (warehouseProductQuantity <= 0)
|
|
|
- return ResponseObject.newErrResponse("库存数量不足");
|
|
|
+ if (warehouseProductQuantity <= 0) return ResponseObject.newErrResponse("库存数量不足");
|
|
|
|
|
|
if (warehouseProductAvailableQuantity <= warehouseProductQuantity)//可用库存数量
|
|
|
warehouseProductQuantity = warehouseProductAvailableQuantity;
|
|
|
@@ -70,6 +68,10 @@ public class contractCostController {
|
|
|
String binidid = processInstance.getId();
|
|
|
newBO.setBindId(processInstance.getId());
|
|
|
int quantity = contractCostQuantity - contractProductPickQuantity;//待拣货数量
|
|
|
+
|
|
|
+ if (quantity <= 0)
|
|
|
+ return ResponseObject.newErrResponse("无需拣货");
|
|
|
+
|
|
|
if (quantity > warehouseProductQuantity) {
|
|
|
newBO.set("PICK_QUANTITY", warehouseProductQuantity);
|
|
|
} else {
|
|
|
@@ -78,6 +80,11 @@ public class contractCostController {
|
|
|
|
|
|
SDK.getBOAPI().create("BO_EU_DNCTT_CONTRACT_PRODUCT_PICK", newBO, processInstance, uc);
|
|
|
|
|
|
+ ResponseObject ro = getPickSNList(uc, processInstance.getId(), warehouseProductId, newBO.get("PICK_QUANTITY", int.class));
|
|
|
+ if (ro.isOk() && ro.getData() != null) {
|
|
|
+ DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_PRODUCT_PICK SET PICKED_SNS=? WHERE BINDID=?", new Object[]{ro.getData().toString(), processInstance.getId()});
|
|
|
+ }
|
|
|
+
|
|
|
String url = SDK.getFormAPI().getFormURL("", uc.getSessionId(), binidid, "", 1, "", "", "");
|
|
|
|
|
|
url = SDK.getPortalAPI().getPortalUrl() + "/r" + url.substring(1);
|
|
|
@@ -94,12 +101,10 @@ public class contractCostController {
|
|
|
* @return
|
|
|
*/
|
|
|
private int ObjToInt(Object obj) {
|
|
|
- if (obj == null)
|
|
|
- return 0;
|
|
|
+ if (obj == null) return 0;
|
|
|
|
|
|
String objStr = obj.toString();
|
|
|
- if (objStr.equals(""))
|
|
|
- return 0;
|
|
|
+ if (objStr.equals("")) return 0;
|
|
|
//如果有小数点,只取整数
|
|
|
if (objStr.contains(".")) {
|
|
|
objStr = objStr.substring(0, objStr.indexOf("."));
|
|
|
@@ -188,6 +193,8 @@ public class contractCostController {
|
|
|
*/
|
|
|
@Mapping(value = "com.awspaas.user.apps.donenow_ctt.getPickSNList")
|
|
|
public ResponseObject getPickSNList(UserContext uc, String bindid, String warehouseProductId, Integer quantity) {
|
|
|
+ //移除上次选择
|
|
|
+ SDK.getBOAPI().removeByBindId("BO_EU_DNCTT_CONTRACT_PRODUCT_PICKSN", bindid);
|
|
|
//库存数量
|
|
|
RowMap stockMap = DBSql.getMap("SELECT * FROM BO_EU_DNIVT_WAREHOUSE_PRODUCT WHERE ID=?", new Object[]{warehouseProductId});
|
|
|
//库存产品
|
|
|
@@ -198,11 +205,16 @@ public class contractCostController {
|
|
|
List<String> selectedSns = new ArrayList<>();//默认选择
|
|
|
for (RowMap lotMap : lotList) {
|
|
|
String lotSNs = lotMap.getString("SN");
|
|
|
+ if (StringUtils.isBlank(lotSNs))
|
|
|
+ continue;
|
|
|
+
|
|
|
List<String> lotsns = new ArrayList<>();//本批次允许拣货数量
|
|
|
for (String SN : lotSNs.split(",")) {
|
|
|
boolean isPicked = false;
|
|
|
for (RowMap pickMap : pickList) {
|
|
|
String pickSNs = pickMap.getString("SN");
|
|
|
+ if (StringUtils.isBlank(pickSNs))
|
|
|
+ continue;
|
|
|
for (String pickSN : pickSNs.split(",")) {
|
|
|
if (SN.equals(pickSN)) {
|
|
|
//已被拣货
|
|
|
@@ -210,13 +222,8 @@ public class contractCostController {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- if (isPicked)
|
|
|
- break;
|
|
|
+ if (isPicked) break;
|
|
|
}
|
|
|
-
|
|
|
- //还要排除取消接收的sn
|
|
|
-
|
|
|
-
|
|
|
if (!isPicked) {
|
|
|
lotsns.add(SN);
|
|
|
}
|
|
|
@@ -227,16 +234,107 @@ public class contractCostController {
|
|
|
BO bo = new BO();
|
|
|
bo.set("SN", sn);
|
|
|
bo.setBindId(bindid);
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_PRODUCT_PICKSN", bo, null);
|
|
|
+ SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_PRODUCT_PICKSN", bo, uc);
|
|
|
}
|
|
|
+ quantity = 0;
|
|
|
} else {
|
|
|
//全部拣货,不允许挑选
|
|
|
quantity -= lotsns.size();
|
|
|
selectedSns.addAll(lotsns);
|
|
|
}
|
|
|
+ if (quantity <= 0)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (quantity > 0) {
|
|
|
+ //超过最大拣货数量
|
|
|
+ return ResponseObject.newErrResponse("超过最大拣货数量");
|
|
|
}
|
|
|
ResponseObject responseObject = ResponseObject.newOkResponse();
|
|
|
responseObject.setData(StringUtils.join(selectedSns, ","));
|
|
|
return responseObject;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 重新关联采购单
|
|
|
+ */
|
|
|
+ @Mapping(value = "com.awspaas.user.apps.donenow_ctt.reAssociatePurchaseOrder")
|
|
|
+ public ResponseObject reAssociatePurchaseOrder(UserContext uc, String contractCostId) {
|
|
|
+ BO orderProductBO = SDK.getBOAPI().query("BO_EU_DNIVT_ORDER_PRODUCT").addQuery("CONTRACT_COST_ID=", contractCostId).detail();//采购单
|
|
|
+
|
|
|
+ if (orderProductBO == null)
|
|
|
+ return ResponseObject.newErrResponse("未找到采购单");
|
|
|
+
|
|
|
+ if (DBSql.getString("SELECT STATUS_ID FROM BO_EU_DNIVT_ORDER WHERE ID=?", new Object[]{orderProductBO.getString("ORDER_ID")}).equals("2148") == false) {
|
|
|
+ return ResponseObject.newErrResponse("采购单未接收,请在全部产品接收后操作");
|
|
|
+ }
|
|
|
+
|
|
|
+ String sns = "";
|
|
|
+ int orderQuantity = 0;
|
|
|
+ String movePro = "";
|
|
|
+ //判断是否被移动到其他仓库
|
|
|
+ List<RowMap> lots = DBSql.getMaps("SELECT a.SN,a.QUANTITY,b.NAME,b.CATE_ID FROM BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT a JOIN BO_EU_DNIVT_WAREHOUSE b ON a.WAREHOUSE_ID=b.ID WHERE a.ORDER_PRODUCT_ID=?", new Object[]{orderProductBO.getId()});
|
|
|
+ if (lots.size() > 0) {
|
|
|
+ for (RowMap lot : lots) {
|
|
|
+ String SN = lot.getString("SN");
|
|
|
+ String NAME = lot.getString("NAME");
|
|
|
+ int QUANTITY = lot.getInt("QUANTITY");
|
|
|
+ int CATE_ID = lot.getInt("CATE_ID");
|
|
|
+ if (CATE_ID != 2)//如果不在虚拟仓库,说明已经移库
|
|
|
+ {
|
|
|
+ if (StringUtils.isNotBlank(SN))
|
|
|
+ movePro += "产品序列号:" + SN + ",数量:" + QUANTITY + "已被移动到仓库" + NAME + ",";
|
|
|
+ else
|
|
|
+ movePro += "数量:" + QUANTITY + "已被移动到仓库" + NAME + ",";
|
|
|
+
|
|
|
+ } else {
|
|
|
+ if (StringUtils.isNotBlank(SN))
|
|
|
+ sns = sns + "," + SN;
|
|
|
+ orderQuantity = orderQuantity + QUANTITY;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(sns))
|
|
|
+ sns = sns + ",";
|
|
|
+ if (orderQuantity <= 0)
|
|
|
+ return ResponseObject.newErrResponse("采购单产品已全部关联,请勿重复操作!");
|
|
|
+
|
|
|
+ } else {
|
|
|
+ return ResponseObject.newErrResponse("采购单产品已全部关联,请勿重复操作!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //已经存在的采购单产品
|
|
|
+ List<BO> costProductList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_COST_PRODUCT").addQuery("ORDER_ID=", orderProductBO.getString("ORDER_ID")).addQuery("CONTRACT_COST_ID=", orderProductBO.getString("CONTRACT_COST_ID")).addQuery("CLOSED=", "0").list();
|
|
|
+
|
|
|
+ for (BO costProductBO : costProductList) {
|
|
|
+ int quantity = Integer.parseInt(costProductBO.get("QUANTITY").toString());
|
|
|
+ String sn = costProductBO.getString("SN");
|
|
|
+ if (StringUtils.isNotBlank(sns) && StringUtils.isNotBlank(sn)) {
|
|
|
+ for (String s : sn.split(",")) {
|
|
|
+ sns = sns.replace("," + s + ",", ",");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ orderQuantity = orderQuantity - quantity;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (orderQuantity <= 0) {
|
|
|
+ return ResponseObject.newErrResponse("采购单产品已全部关联,本次操作无效!");
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(sns))
|
|
|
+ sns = sns.substring(1, sns.length() - 1);
|
|
|
+
|
|
|
+ //创建新的采购单产品
|
|
|
+ BO newCostProductBO = costProductList.get(0);
|
|
|
+ newCostProductBO.set("SN", sns);
|
|
|
+ newCostProductBO.set("QUANTITY", orderQuantity);
|
|
|
+ newCostProductBO.set("ID", StringUtils.EMPTY);
|
|
|
+ SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_COST_PRODUCT", newCostProductBO, uc);
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(movePro)) {
|
|
|
+ return ResponseObject.newOkResponse("采购单产品已全部关联,但存在已移动的仓库产品,请重新关联!" + movePro);
|
|
|
+ }
|
|
|
+
|
|
|
+ return ResponseObject.newOkResponse();
|
|
|
+ }
|
|
|
+
|
|
|
}
|