1
0
Просмотр исходного кода

库存列表增加冻结部分数量功能

yechao 4 лет назад
Родитель
Сommit
5847708511

+ 4 - 0
wms-core-service/src/main/java/com/lote/wms/inventory/inventory/entity/enums/InventoryOpTypeEnum.java

@@ -46,6 +46,10 @@ public enum InventoryOpTypeEnum {
 	
 	INVENTORY_LOCK_OP("INVENTORY_LOCK_OP", "人工锁定"),
 	
+	FREEZE_QTY_CUT("FREEZE_QTY_CUT", "减少冻结"),
+	
+	FREEZE_QTY_ADD("FREEZE_QTY_ADD", "增加冻结"),
+	
 	INVENTORY_CUT("INVENTORY_CUT", "调整减少"),
 	
 	INVENTORY_ADD("INVENTORY_ADD", "调整增加");

+ 1 - 0
wms-core-service/src/main/java/com/lote/wms/inventory/inventory/service/InventoryService.java

@@ -188,4 +188,5 @@ public interface InventoryService {
 
 	Message checkQty(InventoryQueryVo vo);
 
+	Message freezeQty(InventoryQueryVo vo, User user);
 }

+ 81 - 0
wms-core-service/src/main/java/com/lote/wms/inventory/inventory/service/impl/InventoryServiceImpl.java

@@ -842,6 +842,22 @@ public class InventoryServiceImpl implements InventoryService {
 			updateVo.setQtyAvail(oldInventory.getQtyAvail() - vo.getChangeQty());// 可用数量减少
 		}
 
+		// 人工冻结数量 -
+		if (vo.getOpType().equals(InventoryOpTypeEnum.FREEZE_QTY_CUT)) {
+			updateVo.setQtyLock3(oldInventory.getQtyLock3() - vo.getChangeQty());// 冻结数量减少
+			updateVo.setQtyAvail(NumberUtil.add(oldInventory.getQtyAvail(), vo.getChangeQty()));// 可用数量增加
+		}
+
+		// 人工冻结数量 +
+		if (vo.getOpType().equals(InventoryOpTypeEnum.FREEZE_QTY_ADD)) {
+			if (oldInventory.getQtyAvail() < vo.getChangeQty()) {
+				message.setMsg("库存可用数量不足");
+				return message;
+			}
+			updateVo.setQtyLock3(oldInventory.getQtyLock3() + vo.getChangeQty());// 冻结数量增加
+			updateVo.setQtyAvail(oldInventory.getQtyAvail() - vo.getChangeQty());// 可用数量减少
+		}
+
 		// 更新人
 		updateVo.setUpdateByUserCode(vo.getUserCode());
 		updateVo.setUpdateByUserId(vo.getUserId());
@@ -1339,4 +1355,69 @@ public class InventoryServiceImpl implements InventoryService {
 		String msg = "ok";
 		return Message.success(msg, list);
 	}
+	
+	
+		@Override
+	public Message freezeQty(InventoryQueryVo queryvo, User user) {
+		Message message = new Message();
+		message.setSuccess(false);
+		Integer updQty = queryvo.getUpdQty();
+		String remark = queryvo.getRemark();
+		String inventoryId = queryvo.getInventoryId();
+		Inventory nowInventory = get(inventoryId);
+		if (nowInventory == null) {
+			message.setMsg("库存Id:" + inventoryId + "不存在");
+			return message;
+		}
+		if (updQty == null) {
+			message.setMsg("冻结数量不能为空");
+			return message;
+		}
+		if (NumberUtil.isEqualInt(updQty, 0)) {
+			message.setMsg("冻结数量不能为0");
+			return message;
+		}
+		if (StringUtil.isEmpty(remark)) {
+			message.setMsg("原因备注不能为空");
+			return message;
+		}
+
+		// updQty 正 : 增加冻结数量, 减少可用数量 ; 负: 减少冻结数量,增加可用数量
+
+		String refNo = inventoryId;
+		if (updQty < 0) {
+			InventoryVo vo = new InventoryVo();
+			vo.setId(nowInventory.getId());
+			vo.setDataVersion(nowInventory.getDataVersion());
+			vo.setChangeQty(-updQty);
+			vo.setOpType(InventoryOpTypeEnum.FREEZE_QTY_CUT);
+			vo.setRemark(remark);
+			vo.setRefNo(refNo);
+			vo.setUserCode(user.getCode());
+			vo.setUserId(user.getId());
+
+			Message cutMessage = updAvail(vo);
+			if (!cutMessage.isSuccess()) {
+				return cutMessage;
+			}
+		} else {
+			InventoryVo vo = new InventoryVo();
+			BeanUtil.copy(nowInventory, vo);
+			vo.setId(nowInventory.getId());
+			vo.setChangeQty(updQty);
+			vo.setOpType(InventoryOpTypeEnum.FREEZE_QTY_ADD);
+			vo.setRemark(remark);
+			vo.setRefNo(refNo);
+			vo.setUserCode(user.getCode());
+			vo.setUserId(user.getId());
+
+			Message cutMessage = updAvail(vo);
+			if (!cutMessage.isSuccess()) {
+				return cutMessage;
+			}
+		}
+		message.setMsg("调整冻结数量成功");
+		message.setSuccess(true);
+		return message;
+	}
 }

+ 14 - 0
wms-operate/src/main/java/com/lote/wms/controller/operate/inventory/inventory/InventoryController.java

@@ -214,5 +214,19 @@ public class InventoryController extends AbstractController {
 		Message message = inventoryService.checkQty(vo);
 		return MessageToResultAdapt.toResult(message);
 	}
+	
+	/**
+	 * 冻结库存数量 -- 扣可用数量,不扣总数
+	 * 
+	 * @param vo
+	 * @return
+	 */
+	@ResponseBody
+	@RequestMapping("freezeQty")
+	public Result freezeQty(@RequestBody() InventoryQueryVo vo) {
+		User user = getUser();
+		return MessageToResultAdapt.toResult(inventoryService.freezeQty(vo, user));
+	}
+
 
 }

+ 99 - 1
wms-operate/src/main/resources/static/ui/js/inventory/inventory/inventory/list.js

@@ -542,4 +542,102 @@ function listLog(id){
 	    }]
 	});
 	$("#listLog").iDialog('open');
-}
+}
+
+//冻结数量
+$("#freezeQty").iMenubutton({
+    method: 'openDialog',
+    iconCls: 'fa fa-edit',
+    btnCls: 'topjui-btn-normal',
+    grid:{
+        type:'datagrid',
+        id:'myGrid',
+        unselectedMsg:'请先选中一条数据'
+    },
+    dialog: {
+        height: 520,
+        width: 470,
+        title:'冻结数量',
+        iconCls: 'fa fa-edit',
+        href: _ctx + '/views/inventory/inventory/inventory/freezeQty.html',
+        buttonsGroup: [{
+	        text: '提交',
+	        iconCls: 'fa fa-save',
+	        btnCls: 'topjui-btn',
+	        onClick:function(){
+	        	var b = $(this).iLinkbutton("options");
+	        	var $dialogId=$("#" + b.dialogId)
+	        	
+	        	var inventoryId = $("#freeze_inventoryId").val();
+	        	var freeze_qty = $("#freeze_qty").val();//冻结数量
+	        	var freeze_remark = $("#freeze_remark").val();
+	        	if(freeze_remark == ''){
+	        		$.iMessager.show({title: '温馨提示',msg: '原因备注不能为空!',timeout:4000}); // 右下角提示信息
+	        		return;
+	        	}
+	        	var data = {
+	        		inventoryId:inventoryId,
+	        		updQty:freeze_qty,
+	        		remark:freeze_remark
+	        	};
+	        	
+	     		$.iMessager.progress({text: '正在提交中....'});
+	    		$.ajax({
+    			   method:"POST",
+    			   url: "/inventory/inventory/freezeQty.json",
+    			   data: JSON.stringify(data),
+    			   dataType:"json",
+    			   contentType:"application/json; charset=UTF8",
+    			   success: function(result){
+    				   // 关闭提示框
+    				   $.iMessager.progress('close');
+    				   if(!result.success){
+    					   $.iMessager.alert('错误', result.msg, 'messager-info');
+    					   return
+    				   }
+    				   $.iMessager.show({title: '温馨提示',msg: result.msg,timeout:4000}); // 右下角提示信息
+    				   
+    				   refreshGrid(myGrid.type, myGrid.id);
+    				   // 关闭此窗口
+    				   $dialogId.dialog("close")
+    			   }
+	    		});
+	        }
+       }],
+       onLoad: function () {
+    	   var row = getSelectedRowData(myGrid.type, myGrid.id);// 获取选中的行
+    	   $("#freeze_customerCode").val(row.customerCode);
+    	   $("#freeze_locationCode").val(row.locationCode);
+    	   $("#freeze_sku").val(row.sku);
+    	   $("#freeze_barcode").val(row.barcode);
+    	   $("#freeze_productName").val(row.productName);
+    	   $("#freeze_inventoryId").val(row.id);
+    	   $("#freeze_qtyAvail").val(row.qtyAvail);
+    	   $("#freeze_qtyLock3").val(row.qtyLock3);
+    	   
+    	   $("#freeze_qty").focus();
+       }
+    }
+});
+function updFreezeQtyChange(){
+	var freeze_qty = $("#freeze_qty").val();
+	freeze_qty = freeze_qty.replace(/[^\d-]/g,'');
+	$("#freeze_qty").val(freeze_qty);
+	if(freeze_qty == ''){
+		return;
+	}
+	//freeze_qty 正 : 增加冻结数量, 减少可用数量  ; 负: 减少冻结数量,增加可用数量
+	
+	var freeze_qtyAvail = $("#freeze_qtyAvail").val();//原可用数量
+	var new_qty = parseInt(freeze_qtyAvail) - parseInt(freeze_qty);
+	
+	if(new_qty < 0){
+		return; //不能冻结至可用数量为负
+	}
+	
+	$("#new_avail_qty").val(new_qty);//新可用数量
+
+	var freeze_qtyLock3 = $("#freeze_qtyLock3").val();//原冻结数量
+	var new_qtyLock3 = parseInt(freeze_qtyLock3) + parseInt(freeze_qty);
+	$("#new_qtyLock3").val(new_qtyLock3);//新冻结数量
+}

+ 65 - 0
wms-operate/src/main/resources/static/ui/views/inventory/inventory/inventory/freezeQty.html

@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org"
+	xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
+<header>
+
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<!-- 避免IE使用兼容模式 -->
+<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
+<meta name="renderer" content="webkit">
+<style type="text/css">
+
+	.disabled1{
+		background-color:red
+	}
+
+</style>
+</header>
+
+<body style="overflow-y: auto;">
+	<div style="padding-top: 18px;padding-left: 18px;">
+		<input style="display: none;" id="freeze_inventoryId">
+		
+		<span style="width:80px;line-height: 18px;margin-top:10px; float: left;">货主代码 :</span> 
+		<input id="freeze_customerCode" readonly="readonly" style="line-height: 18px;margin-top:10px;width:280px;" class="disabled1"><br>		
+		
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">库位号 :</span> 
+		<input id="freeze_locationCode" readonly="readonly" style="line-height: 18px;margin-top:10px;width:280px;" class="disabled1"><br>
+		
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">商品SKU : </span>
+		<input id="freeze_sku" readonly="readonly" class="disabled1" style="line-height: 18px;margin-top:10px;width:280px;"><br>
+		
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">商品条码 : </span>
+		<input id="freeze_barcode" readonly="readonly" class="disabled1" style="line-height: 18px;margin-top:10px;width:280px;"><br>
+				
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">商品名称: </span>
+		<input id="freeze_productName" readonly="readonly" class="disabled1" style="line-height: 18px;margin-top:10px;width:280px;"><br>
+ 
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">原可用数量 : </span>
+		<input id="freeze_qtyAvail" readonly="readonly" class="disabled1" style="line-height: 18px;margin-top:10px;width:280px;"><br>
+		
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">原冻结数量 : </span>
+		<input style="line-height: 18px;margin-top:10px;width:280px;" id="freeze_qtyLock3" readonly="readonly" ><br>
+		
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">冻结数量 : </span>
+		<input style="line-height: 18px;margin-top:10px;width:280px;" id="freeze_qty" placeholder="正数增加冻结,负数减少冻结,不能为0" oninput = "updFreezeQtyChange()"><br>
+		
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">新冻结数量 : </span>
+		<input style="line-height: 18px;margin-top:10px;width:280px;" id="new_qtyLock3" readonly="readonly" ><br>
+				
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">新可用数量 : </span>
+		<input style="line-height: 18px;margin-top:10px;width:280px;" id="new_avail_qty" readonly="readonly" class="disabled1"><br>
+				
+		<span style="width:80px;line-height: 18px;margin-top:10px;float: left;">原因备注 : </span>
+		<input style="line-height: 18px;margin-top:10px;width:280px;" id="freeze_remark" placeholder="必须填写备注,不超过200字符"><br>
+		
+		<br>
+		<span style="font-size: 16px;color: red;margin-top: 15px;">
+			请谨慎使用冻结数量功能,调整记录将保存为库存日志
+		</span>	
+	</div>
+</body>
+<script type="text/javascript">
+
+</script>
+</html>

+ 2 - 0
wms-operate/src/main/resources/static/ui/views/inventory/inventory/inventory/list.html

@@ -81,6 +81,8 @@
     		<a id="freeze" href="javascript:void(0)" style="width: 85px;">冻结</a>
     		<a id="unFreeze" href="javascript:void(0)" style="width: 85px;">解冻</a>
     		<a id="updInventory" href="javascript:void(0)">调整数量</a>
+    		<!-- 冻结库存的部分数量,通过设置冻结0,解开冻结 -->
+    		<a id="freezeQty" href="javascript:void(0)">冻结数量</a>    		
     		<a id="setRemark" href="javascript:void(0)" style="width: 85px;">备注</a>
 		</div>		
 	</div>