diff --git a/doc/设计文档/数据库设计/mes-wm.sql b/doc/设计文档/数据库设计/mes-wm.sql index 772f554..6467553 100644 --- a/doc/设计文档/数据库设计/mes-wm.sql +++ b/doc/设计文档/数据库设计/mes-wm.sql @@ -100,6 +100,8 @@ create table wm_transaction ( area_id bigint(20) comment '库位ID', area_code varchar(64) comment '库位编码', area_name varchar(255) comment '库位名称', + pakcage_id bigint(20) comment '容器ID', + package_code varchar(64) comment '容器编号', vendor_id bigint(20) comment '供应商ID', vendor_code varchar(64) comment '供应商编号', vendor_name varchar(255) comment '供应商名称', @@ -143,7 +145,17 @@ create table wm_material_stock ( item_name varchar(255) comment '产品物料名称', specification varchar(500) comment '规格型号', unit_of_measure varchar(64) comment '单位', - batch_code varchar(255) comment '入库批次号', + batch_code varchar(255) comment '批次号', + workorder_id bigint(20) comment '生产工单ID', + workorder_code varchar(64) comment '生产工单编号', + vendor_id bigint(20) comment '供应商ID', + vendor_code varchar(64) comment '供应商编号', + vendor_name varchar(255) comment '供应商名称', + vendor_nick varchar(64) comment '供应商简称', + client_id bigint(20) comment '客户ID', + client_code varchar(64) comment '客户编码', + client_name varchar(255) comment '客户名称', + client_nick varchar(255) comment '客户简称', warehouse_id bigint(20) not null comment '仓库ID', warehouse_code varchar(64) comment '仓库编码', warehouse_name varchar(255) comment '仓库名称', @@ -153,15 +165,13 @@ create table wm_material_stock ( area_id bigint(20) comment '库位ID', area_code varchar(64) comment '库位编码', area_name varchar(255) comment '库位名称', - vendor_id bigint(20) comment '供应商ID', - vendor_code varchar(64) comment '供应商编号', - vendor_name varchar(255) comment '供应商名称', - vendor_nick varchar(64) comment '供应商简称', + package_id bigint(20) comment '容器ID', + package_code varchar(64) comment '容器编号', quantity_onhand double(12,2) comment '在库数量', - workorder_id bigint(20) comment '生产工单ID', - workorder_code varchar(64) comment '生产工单编号', + quantity_reserved double(12,2) comment '保留数量', recpt_date datetime comment '入库时间', expire_date datetime comment '库存有效期', + frozen_flag char(1) default 'N' not null comment '是否冻结', attr1 varchar(64) default null comment '预留字段1', attr2 varchar(255) default null comment '预留字段2', attr3 int(11) default 0 comment '预留字段3', diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageAreaController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageAreaController.java index d5aee9b..309eb02 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageAreaController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageAreaController.java @@ -106,6 +106,8 @@ public class WmStorageAreaController extends BaseController @DeleteMapping("/{areaIds}") public AjaxResult remove(@PathVariable Long[] areaIds) { + //TODO:库位删除之前的逻辑校验 + return toAjax(wmStorageAreaService.deleteWmStorageAreaByAreaIds(areaIds)); } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageLocationController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageLocationController.java index 2f0e02f..029020a 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageLocationController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageLocationController.java @@ -118,6 +118,8 @@ public class WmStorageLocationController extends BaseController @DeleteMapping("/{locationIds}") public AjaxResult remove(@PathVariable Long[] locationIds) { + //TODO:库区删除之前的逻辑校验 + for (Long locationId: locationIds ) { wmStorageAreaService.deleteByLocationId(locationId); diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmWarehouseController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmWarehouseController.java index de46e35..ab16366 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmWarehouseController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmWarehouseController.java @@ -133,6 +133,9 @@ public class WmWarehouseController extends BaseController @DeleteMapping("/{warehouseIds}") public AjaxResult remove(@PathVariable Long[] warehouseIds) { + + //TODO:仓库删除之前的逻辑校验 + for (Long wahouseId: warehouseIds ) { wmStorageLocationService.deleteByWarehouseId(wahouseId); diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmMaterialStock.java b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmMaterialStock.java index 7b2ed93..8e4afc0 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmMaterialStock.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmMaterialStock.java @@ -124,20 +124,22 @@ public class WmMaterialStock extends BaseEntity @Excel(name = "库存有效期", width = 30, dateFormat = "yyyy-MM-dd") private Date expireDate; + /** + * 是否冻结 + */ + @Excel(name = "是否冻结") + private String frozenFlag; + /** 预留字段1 */ - @Excel(name = "预留字段1") private String attr1; /** 预留字段2 */ - @Excel(name = "预留字段2") private String attr2; /** 预留字段3 */ - @Excel(name = "预留字段3") private Long attr3; /** 预留字段4 */ - @Excel(name = "预留字段4") private Long attr4; public void setMaterialStockId(Long materialStockId) @@ -372,7 +374,16 @@ public class WmMaterialStock extends BaseEntity { return expireDate; } - public void setAttr1(String attr1) + + public String getFrozenFlag() { + return frozenFlag; + } + + public void setFrozenFlag(String frozenFlag) { + this.frozenFlag = frozenFlag; + } + + public void setAttr1(String attr1) { this.attr1 = attr1; } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmStorageArea.java b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmStorageArea.java index ddc615f..182e032 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmStorageArea.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmStorageArea.java @@ -55,6 +55,8 @@ public class WmStorageArea extends BaseEntity @Excel(name = "是否启用") private String enableFlag; + private String frozenFlag; + /** 预留字段1 */ private String attr1; @@ -157,7 +159,16 @@ public class WmStorageArea extends BaseEntity { return enableFlag; } - public void setAttr1(String attr1) + + public String getFrozenFlag() { + return frozenFlag; + } + + public void setFrozenFlag(String frozenFlag) { + this.frozenFlag = frozenFlag; + } + + public void setAttr1(String attr1) { this.attr1 = attr1; } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmStorageLocation.java b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmStorageLocation.java index e6370be..0659aa3 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmStorageLocation.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmStorageLocation.java @@ -41,6 +41,8 @@ public class WmStorageLocation extends BaseEntity @Excel(name = "是否开启库位管理") private String areaFlag; + private String frozenFlag; + /** 预留字段1 */ private String attr1; @@ -109,7 +111,16 @@ public class WmStorageLocation extends BaseEntity { return areaFlag; } - public void setAttr1(String attr1) + + public String getFrozenFlag() { + return frozenFlag; + } + + public void setFrozenFlag(String frozenFlag) { + this.frozenFlag = frozenFlag; + } + + public void setAttr1(String attr1) { this.attr1 = attr1; } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmWarehouse.java b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmWarehouse.java index 3a1d875..ec21790 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmWarehouse.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/domain/WmWarehouse.java @@ -41,6 +41,8 @@ public class WmWarehouse extends BaseEntity @Excel(name = "负责人") private String charge; + private String frozenFlag; + /** 预留字段1 */ private String attr1; @@ -109,7 +111,16 @@ public class WmWarehouse extends BaseEntity { return charge; } - public void setAttr1(String attr1) + + public String getFrozenFlag() { + return frozenFlag; + } + + public void setFrozenFlag(String frozenFlag) { + this.frozenFlag = frozenFlag; + } + + public void setAttr1(String attr1) { this.attr1 = attr1; } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/StorageCoreServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/StorageCoreServiceImpl.java index 9125d4b..32f77df 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/StorageCoreServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/StorageCoreServiceImpl.java @@ -228,6 +228,7 @@ public class StorageCoreServiceImpl implements IStorageCoreService { * 库存消耗 * */ + @Override public void processItemConsume(List lines){ if(CollUtil.isEmpty(lines)){ throw new BussinessException("没有需要处理的原料消耗单行"); @@ -263,6 +264,7 @@ public class StorageCoreServiceImpl implements IStorageCoreService { * 产品产出 * */ + @Override public void processProductProduce(List lines){ if(CollUtil.isEmpty(lines)){ throw new BussinessException("没有需要处理的产品产出单行"); diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmTransactionServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmTransactionServiceImpl.java index 790bd75..727e612 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmTransactionServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmTransactionServiceImpl.java @@ -4,18 +4,21 @@ import java.math.BigDecimal; import java.util.Date; import java.util.List; +import com.ktg.common.constant.UserConstants; import com.ktg.common.exception.BussinessException; import com.ktg.common.utils.DateUtils; import com.ktg.common.utils.StringUtils; import com.ktg.mes.md.domain.MdItem; import com.ktg.mes.md.mapper.MdItemMapper; -import com.ktg.mes.wm.domain.WmMaterialStock; +import com.ktg.mes.wm.domain.*; import com.ktg.mes.wm.mapper.WmMaterialStockMapper; +import com.ktg.mes.wm.service.IWmStorageAreaService; +import com.ktg.mes.wm.service.IWmStorageLocationService; +import com.ktg.mes.wm.service.IWmWarehouseService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ktg.mes.wm.mapper.WmTransactionMapper; -import com.ktg.mes.wm.domain.WmTransaction; import com.ktg.mes.wm.service.IWmTransactionService; /** @@ -27,6 +30,15 @@ import com.ktg.mes.wm.service.IWmTransactionService; @Service public class WmTransactionServiceImpl implements IWmTransactionService { + @Autowired + private IWmWarehouseService wmWarehouseService; + + @Autowired + private IWmStorageLocationService wmStorageLocationService; + + @Autowired + private IWmStorageAreaService wmStorageAreaService; + @Autowired private WmTransactionMapper wmTransactionMapper; @@ -40,10 +52,12 @@ public class WmTransactionServiceImpl implements IWmTransactionService public synchronized WmTransaction processTransaction(WmTransaction wmTransaction) { WmMaterialStock stock = new WmMaterialStock(); - validate(wmTransaction); - initStock(wmTransaction,stock); + validate(wmTransaction); //先效验业务传递的库存事务参数是否完整 + initStock(wmTransaction,stock); //用库存事务来初始化一个MSD对象 - WmMaterialStock ms =wmMaterialStockMapper.loadMaterialStock(stock); + WmMaterialStock ms =wmMaterialStockMapper.loadMaterialStock(stock); //用MSD对象查询库存现有量,看是否已经存在相应的记录;如果存在则只对数量进行更新,不存在则需要新增MSD。 + + checkFrozen(ms,stock); //冻结检测 BigDecimal quantity = wmTransaction.getTransactionQuantity().multiply(new BigDecimal(wmTransaction.getTransactionFlag())); if(StringUtils.isNotNull(ms)){ //MS已存在 @@ -56,6 +70,9 @@ public class WmTransactionServiceImpl implements IWmTransactionService wmMaterialStockMapper.updateWmMaterialStock(stock); }else { //MS不存在 + + //TODO:需要为库存增加一个效验逻辑:同一个库位上不能放不同批次和属性的物资 + stock.setQuantityOnhand(quantity); wmMaterialStockMapper.insertWmMaterialStock(stock); } @@ -88,6 +105,7 @@ public class WmTransactionServiceImpl implements IWmTransactionService } } + public void initStock(WmTransaction transaction,WmMaterialStock stock){ if(StringUtils.isNotNull(transaction.getMaterialStockId())){ @@ -136,6 +154,36 @@ public class WmTransactionServiceImpl implements IWmTransactionService } } + /** + * 检查库存冻结情况 + * @param ms + */ + private void checkFrozen(WmMaterialStock ms,WmMaterialStock org){ + //检查仓库冻结 + WmWarehouse warehouse = wmWarehouseService.selectWmWarehouseByWarehouseId(org.getWarehouseId()); + if(UserConstants.YES.equals(warehouse.getFrozenFlag())){ + throw new BussinessException("仓库"+warehouse.getWarehouseName()+"已被冻结!"); + } + //检查库区冻结 + WmStorageLocation location = wmStorageLocationService.selectWmStorageLocationByLocationId(org.getLocationId()); + if(UserConstants.YES.equals(location.getFrozenFlag())){ + throw new BussinessException("库区"+location.getLocationName()+"已被冻结!"); + } + //检查库位冻结 + WmStorageArea area = wmStorageAreaService.selectWmStorageAreaByAreaId(org.getAreaId()); + if(UserConstants.YES.equals(area.getFrozenFlag())){ + throw new BussinessException("库位"+area.getAreaName()+"已被冻结!"); + } + //检查具体的MS冻结 + if(ms!=null && StringUtils.isNotNull(ms.getMaterialStockId())){ + if(UserConstants.YES.equals(ms.getFrozenFlag())){ + throw new BussinessException(new StringBuilder("存放于").append(ms.getWarehouseName()).append("/") + .append(ms.getLocationName()).append("/").append(ms.getAreaName()).append("下的") + .append(ms.getItemName()).append("已被冻结!").toString()); + } + } + } + /** * 查询库存事务 diff --git a/ktg-mes/src/main/resources/mapper/wm/WmMaterialStockMapper.xml b/ktg-mes/src/main/resources/mapper/wm/WmMaterialStockMapper.xml index 769cbee..0f20320 100644 --- a/ktg-mes/src/main/resources/mapper/wm/WmMaterialStockMapper.xml +++ b/ktg-mes/src/main/resources/mapper/wm/WmMaterialStockMapper.xml @@ -31,6 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -42,7 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select material_stock_id, item_type_id, item_id, item_code, item_name, specification, unit_of_measure, batch_code, warehouse_id, warehouse_code, warehouse_name, location_id, location_code, location_name, area_id, area_code, area_name, vendor_id, vendor_code, vendor_name, vendor_nick, quantity_onhand,recpt_date,workorder_id,workorder_code, expire_date, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_material_stock + select material_stock_id, item_type_id, item_id, item_code, item_name, specification, unit_of_measure, batch_code, warehouse_id, warehouse_code, warehouse_name, location_id, location_code, location_name, area_id, area_code, area_name, vendor_id, vendor_code, vendor_name, vendor_nick, quantity_onhand,recpt_date,workorder_id,workorder_code, expire_date, frozen_flag, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_material_stock @@ -67,6 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" position_y, position_z, enable_flag, + frozen_flag, remark, attr1, attr2, @@ -87,6 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{positionY}, #{positionZ}, #{enableFlag}, + #{frozenFlag}, #{remark}, #{attr1}, #{attr2}, @@ -111,6 +114,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" position_y = #{positionY}, position_z = #{positionZ}, enable_flag = #{enableFlag}, + frozen_flag = #{frozenFlag}, remark = #{remark}, attr1 = #{attr1}, attr2 = #{attr2}, diff --git a/ktg-mes/src/main/resources/mapper/wm/WmStorageLocationMapper.xml b/ktg-mes/src/main/resources/mapper/wm/WmStorageLocationMapper.xml index e54fb44..b64c93f 100644 --- a/ktg-mes/src/main/resources/mapper/wm/WmStorageLocationMapper.xml +++ b/ktg-mes/src/main/resources/mapper/wm/WmStorageLocationMapper.xml @@ -11,6 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -23,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select location_id, location_code, location_name, warehouse_id, area, area_flag, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_storage_location + select location_id, location_code, location_name, warehouse_id, area, area_flag, frozen_flag, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_storage_location @@ -62,7 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"