mes模块重整

This commit is contained in:
彭枝刚 2024-11-12 11:00:10 +08:00
parent 5b8307fa3e
commit c4447a931a
15 changed files with 1061 additions and 41 deletions

View File

@ -0,0 +1,31 @@
package com.foreverwin.iep.wms.dto;
import com.foreverwin.iep.wms.entity.WmsInventory;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@Data
public class WmsInventoryDto extends WmsInventory {
private String item;
private String description;
private String unitOfMeasure;
private String carrier;
private String printer;
private String itemType;
private String storageBinBo;
private String operation;
private String operationBo;
private String shopOrder;
private String resource;
private String fifo;
private String fifoMaterialLot;
private String checkDateExp;
private String wmsInventoryBo;
private List<Map<String,Object>> outItemType;
private String itemGroup;
private String checkItemMaterialLot;
private BigDecimal checkItemQtyOnHand;
}

View File

@ -0,0 +1,172 @@
package com.foreverwin.iep.wms.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.foreverwin.iep.common.utils.HandleBoProcessor;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 库存(物料批次)
*
* @author Snow
* @date 2024-10-22
*/
@Data
@TableName("wms_inventory")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "库存(物料批次)")
public class WmsInventory extends Model<WmsInventory> {
private static final long serialVersionUID = 1L;
public static final String KW_WMS_INVENTORY_BO = "WmsInventoryBO";
@TableId(type = IdType.INPUT)
@ApiModelProperty(value = "主键")
private String handle;
@ApiModelProperty(value = "站点")
private String site;
@ApiModelProperty(value = "关联物料主键")
private String itemBo;
@ApiModelProperty(value = "物料编号")
@TableField(exist = false)
private String item;
@ApiModelProperty(value = "物料描述")
@TableField(exist = false)
private String itemDesc;
@ApiModelProperty(value = "物料单位")
@TableField(exist = false)
private String unitOfMeasure;
@ApiModelProperty(value = "现有数量")
private BigDecimal qtyOnHand;
@ApiModelProperty(value = "原始批次数量")
private BigDecimal originalQty;
@ApiModelProperty(value = "物料批号")
private String materialLot;
@ApiModelProperty(value = "父物料批次")
private String parentMaterialLot;
@ApiModelProperty(value = "仓库主键")
private String wmsWarehouseBo;
@ApiModelProperty(value = "存储货格主键")
private String wmsStorageBinBo;
@ApiModelProperty(value = "是否由ERP创建")
private String erpInventory;
@ApiModelProperty(value = "供货商编号")
private String supplierNo;
@ApiModelProperty(value = "供货商批次")
private String supplierBatch;
@ApiModelProperty(value = "客户主数据主键")
private String customerBasisBo;
@ApiModelProperty(value = "生产批序号")
private String lotSerial;
@ApiModelProperty(value = "状态")
private String status;
@ApiModelProperty(value = "货架编号")
private String rackNo;
@ApiModelProperty(value = "货位编号")
private String locationNo;
@ApiModelProperty(value = "制造日期")
private LocalDateTime dateMfg;
@ApiModelProperty(value = "到期日")
private LocalDateTime dateExp;
@ApiModelProperty(value = "库存日期")
private LocalDateTime dateInventory;
@ApiModelProperty(value = "创建日期")
private LocalDateTime dateCreate;
@ApiModelProperty(value = "创建人员")
private String creator;
@ApiModelProperty(value = "更新时间")
private LocalDateTime dateUpdate;
@ApiModelProperty(value = "更新人员")
private String updater;
@ApiModelProperty(value = "扩展字段1")
private String ext01;
@ApiModelProperty(value = "扩展字段2")
private String ext02;
@ApiModelProperty(value = "扩展字段3")
private String ext03;
@ApiModelProperty(value = "扩展字段4")
private String ext04;
@ApiModelProperty(value = "扩展字段5")
private String ext05;
@ApiModelProperty(value = "副数量")
private BigDecimal deputyQty;
@ApiModelProperty(value = "副单位")
private String deputyUom;
@ApiModelProperty(value = "主单位")
private String mainUom;
@ApiModelProperty(value = "特殊库存标识")
private String sobkz;
@ApiModelProperty(value = "销售订单行号")
private String vgbelLineNumber;
@ApiModelProperty(value = "销售订单号")
private String vgbel;
@ApiModelProperty(value = "拆分单据号")
private String documentNo;
@ApiModelProperty(value = "单据类型")
private String documentType;
/**
* 托号
*/
@ApiModelProperty(value = "托号")
private String packageNumber;
@TableField(exist = false)
private String newPackageNumber;
/**
* 料件标识(0:SAP料号、1:U8料号)
*/
@ApiModelProperty(value = "料件标识(0:SAP料号、1:U8料号)")
private String itemFlag;
@TableField(exist = false)
private String moveType;
/**
* 质检等级
*/
@ApiModelProperty(value = "质检等级")
private String inspectionLevel;
public static String genHandle(String site, String itemBo, String materialLot) {
return HandleBoProcessor.genHandle(KW_WMS_INVENTORY_BO, site, itemBo, materialLot);
}
}

View File

@ -0,0 +1,138 @@
package com.foreverwin.iep.wms.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 库存移动日志记录表
*
* @author Snow
* @date 2024-10-23
*/
@Data
@TableName("wms_inventory_log")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "库存移动日志记录表")
public class WmsInventoryLog extends Model<WmsInventoryLog> {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.INPUT)
@ApiModelProperty(value = "主键")
private String uuid;
@ApiModelProperty(value = "站点")
private String site;
@ApiModelProperty(value = "关联物料主键")
private String itemBo;
@ApiModelProperty(value = "现有数量")
private BigDecimal qtyOnHand;
@ApiModelProperty(value = "原始批次数量")
private BigDecimal originalQty;
@ApiModelProperty(value = "物料批号")
private String materialLot;
@ApiModelProperty(value = "父物料批次")
private String parentMaterialLot;
@ApiModelProperty(value = "仓库主键")
private String wmsWarehouseBo;
@ApiModelProperty(value = "存储货格主键")
private String wmsStorageBinBo;
@ApiModelProperty(value = "是否由ERP创建")
private String erpInventory;
@ApiModelProperty(value = "供货商编号")
private String supplierNo;
@ApiModelProperty(value = "供货商批次")
private String supplierBatch;
@ApiModelProperty(value = "客户主数据主键")
private String customerBasisBo;
@ApiModelProperty(value = "生产批序号")
private String lotSerial;
@ApiModelProperty(value = "状态")
private String status;
@ApiModelProperty(value = "货架编号")
private String rackNo;
@ApiModelProperty(value = "货位编号")
private String locationNo;
@ApiModelProperty(value = "制造日期")
private LocalDateTime dateMfg;
@ApiModelProperty(value = "到期日")
private LocalDateTime dateExp;
@ApiModelProperty(value = "库存日期")
private LocalDateTime dateInventory;
@ApiModelProperty(value = "创建日期")
private LocalDateTime dateCreate;
@ApiModelProperty(value = "创建人员")
private String creator;
@ApiModelProperty(value = "扩展字段1")
private String ext01;
@ApiModelProperty(value = "扩展字段2")
private String ext02;
@ApiModelProperty(value = "扩展字段3")
private String ext03;
@ApiModelProperty(value = "扩展字段4")
private String ext04;
@ApiModelProperty(value = "扩展字段5")
private String ext05;
@ApiModelProperty(value = "扩展字段5")
private String moveType;
@ApiModelProperty(value = "副数量")
private BigDecimal deputyQty;
@ApiModelProperty(value = "副单位")
private String deputyUom;
@ApiModelProperty(value = "主单位")
private String mainUom;
@ApiModelProperty(value = "特殊库存标识")
private String sobkz;
@ApiModelProperty(value = "销售订单行号")
private String vgbelLineNumber;
@ApiModelProperty(value = "销售订单号")
private String vgbel;
@ApiModelProperty(value = "拆分单据号")
private String documentNo;
@ApiModelProperty(value = "单据类型")
private String documentType;
/**
* 托号
*/
@ApiModelProperty(value = "托号")
private String packageNumber;
/**
* 料件标识(0:SAP料号、1:U8料号)
*/
@ApiModelProperty(value = "料件标识(0:SAP料号、1:U8料号)")
private String itemFlag;
}

View File

@ -146,10 +146,6 @@
<groupId>com.foreverwin</groupId>
<artifactId>qms-db</artifactId>
</dependency>
<dependency>
<groupId>com.foreverwin</groupId>
<artifactId>wms-api</artifactId>
</dependency>
<dependency>
<groupId>com.foreverwin</groupId>
<artifactId>int-api</artifactId>

View File

@ -31,8 +31,6 @@ import com.foreverwin.iep.wms.entity.EqpFeeding;
import com.foreverwin.iep.wms.mapper.EqpFeedingMapper;
import com.foreverwin.mom.common.core.exception.BusinessException;
import com.foreverwin.mom.common.security.util.SecurityUtils;
import com.foreverwin.nlv.wms.dto.PrintPortDTO;
import com.foreverwin.nlv.wms.feign.RemotePrintService;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -72,7 +70,7 @@ public class OperationOutServiceImpl extends ServiceImpl<OperationOutMapper, Ope
private final ProcessService processService;
private final RemotePrintService remotePrintService;
// private final RemotePrintService remotePrintService;
@Override
public IPage<OperationOutDTO> readOperationPage(Page page, OperationOutDTO operationOutDTO) {
@ -376,12 +374,12 @@ public class OperationOutServiceImpl extends ServiceImpl<OperationOutMapper, Ope
);
if (customFields != null && "Y".equals(customFields.getFieldValue())) {
// 调用打印
PrintPortDTO printPortDTO = new PrintPortDTO();
printPortDTO.setSite(site);
printPortDTO.setBatchNumber(releaseShopOrderResponse.getLotStateList().get(0).getLotNo());
printPortDTO.setUserName(user);
printPortDTO.setPrintName("");
printPortDTO.setTenantId(site);
// PrintPortDTO printPortDTO = new PrintPortDTO();
// printPortDTO.setSite(site);
// printPortDTO.setBatchNumber(releaseShopOrderResponse.getLotStateList().get(0).getLotNo());
// printPortDTO.setUserName(user);
// printPortDTO.setPrintName("");
// printPortDTO.setTenantId(site);
// remotePrintService.remotePrint(printPortDTO, SecurityConstants.FROM_IN);
}
} catch (ProductionException e) {

View File

@ -0,0 +1,9 @@
package com.foreverwin.iep.wms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.foreverwin.iep.wms.entity.WmsInventory;
import com.foreverwin.iep.wms.entity.WmsInventoryLog;
public interface WmsInventoryLogService extends IService<WmsInventoryLog> {
void createInventoryLog(WmsInventory wmsInventory);
}

View File

@ -0,0 +1,47 @@
package com.foreverwin.iep.wms.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.foreverwin.iep.wms.entity.WmsInventory;
import com.foreverwin.iep.wms.dto.WmsInventoryDto;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
/**
* 库存(物料批次)
*
* @author Snow
* @date 2024-10-22
*/
public interface WmsInventoryService extends IService<WmsInventory> {
@Transactional(rollbackFor = Exception.class)
void removeInventory(WmsInventory wmsInventory);
@Transactional(rollbackFor = Exception.class)
void createInventory(WmsInventory wmsInventory);
@Transactional(rollbackFor = Exception.class)
void outInventoryByMaterialLot(String site, String materialLot, BigDecimal outQty);
IPage getWmsInventoryPage(Page page, WmsInventory dto);
WmsInventory getOneObjByHandle(String handle);
List<WmsInventory> selectWmsInventoryByPackageNumber(String packageNumber);
WmsInventory validateMaterialLot(String materialLot);
void unbindPackageNumber(String packageNumber, boolean isErrorShow);
void changePackageNumber(WmsInventory wmsInventory);
WmsInventoryDto selectByMaterialLot(WmsInventoryDto dto);
WmsInventoryDto checkItemGroup(WmsInventoryDto dto);
void updateInventory(WmsInventory wmsInventory);
}

View File

@ -9,17 +9,13 @@ import com.foreverwin.iep.wip.entity.LotMaterial;
import com.foreverwin.iep.wip.service.LotMaterialService;
import com.foreverwin.iep.wms.dto.EqpFeedingDTO;
import com.foreverwin.iep.wms.entity.EqpFeeding;
import com.foreverwin.iep.wms.feign.RemoteWarehouseService;
import com.foreverwin.mom.common.core.constant.SecurityConstants;
import com.foreverwin.mom.common.core.util.R;
import com.foreverwin.mom.common.security.util.SecurityUtils;
import com.foreverwin.nlv.wms.entity.WmsInventory;
import com.foreverwin.iep.wms.entity.WmsInventory;
import com.foreverwin.iep.wms.mapper.EqpFeedingMapper;
import com.foreverwin.iep.wms.service.EqpFeedingService;
import com.foreverwin.iep.wms.service.WmsInventoryService;
import com.foreverwin.mom.common.data.tenant.TenantContextHolder;
import com.foreverwin.nlv.wms.feign.RemoteWmsInventoryService;
import com.foreverwin.mom.common.security.util.SecurityUtils;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -42,20 +38,20 @@ import java.util.UUID;
public class EqpFeedingServiceImpl extends ServiceImpl<EqpFeedingMapper, EqpFeeding> implements EqpFeedingService {
private final EqpFeedingMapper eqpFeedingMapper;
private final RemoteWmsInventoryService wmsInventoryService;
private final WmsInventoryService wmsInventoryService;
private final LotMaterialService lotMaterialService;
@Override
public IPage<EqpFeedingDTO> selectPage(FrontPage page, EqpFeedingDTO eqpFeedingDTO) {
eqpFeedingDTO.setSite(TenantContextHolder.getTenantId());
if(eqpFeedingDTO.getDateMfg() != null){
if (eqpFeedingDTO.getDateMfg() != null) {
eqpFeedingDTO.setDateMfgEnd(LocalDateTime.of(LocalDate.from(eqpFeedingDTO.getDateMfg()), LocalTime.MAX));
}
if(eqpFeedingDTO.getDateExp() != null){
if (eqpFeedingDTO.getDateExp() != null) {
eqpFeedingDTO.setDateExpEnd(LocalDateTime.of(LocalDate.from(eqpFeedingDTO.getDateExp()), LocalTime.MAX));
}
if(eqpFeedingDTO.getDateCreate() != null){
if (eqpFeedingDTO.getDateCreate() != null) {
eqpFeedingDTO.setDateCreateEnd(LocalDateTime.of(LocalDate.from(eqpFeedingDTO.getDateCreate()), LocalTime.MAX));
}
return eqpFeedingMapper.selectPage(page, eqpFeedingDTO);
@ -94,8 +90,8 @@ public class EqpFeedingServiceImpl extends ServiceImpl<EqpFeedingMapper, EqpFeed
}
super.update(Wrappers.<EqpFeeding>lambdaUpdate()
.eq(EqpFeeding::getHandle, eqpFeeding.getHandle())
.set(EqpFeeding::getQtyOnHand, eqpFeeding.getQtyOnHand()));
.eq(EqpFeeding::getHandle, eqpFeeding.getHandle())
.set(EqpFeeding::getQtyOnHand, eqpFeeding.getQtyOnHand()));
}
@Override
@ -120,6 +116,7 @@ public class EqpFeedingServiceImpl extends ServiceImpl<EqpFeedingMapper, EqpFeed
return eqpFeedingMapper.selectEqpFeedingList(dto);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void upItem(EqpFeedingDTO dto) {
String site = TenantContextHolder.getTenantId();
@ -139,17 +136,14 @@ public class EqpFeedingServiceImpl extends ServiceImpl<EqpFeedingMapper, EqpFeed
//details.setInspectionLevel(details.getInspectionLevel());
details.setCreateUser(SecurityUtils.getUserName());
super.save(details);
//查询wms_inventory表,
WmsInventory wmsInventory = new WmsInventory();
wmsInventory.setHandle(details.getWmsInventoryBo());
R<WmsInventory> inventoryR = wmsInventoryService.selectById(wmsInventory);
WmsInventory inventory = inventoryR.getData();
//查询wms_inventory表
WmsInventory inventory = wmsInventoryService.getById(details.getWmsInventoryBo());
//更新wms_inventory表数量为0,调用远程接口
inventory.setMoveType("4");
inventory.setQtyOnHand(BigDecimal.ZERO);
inventory.setUpdater(SecurityUtils.getUserName());
inventory.setDateUpdate(LocalDateTime.now());
wmsInventoryService.remoteInventory(inventory);
wmsInventoryService.removeInventory(inventory);
}
}
@ -160,15 +154,13 @@ public class EqpFeedingServiceImpl extends ServiceImpl<EqpFeedingMapper, EqpFeed
//查询wms_inventory表,
WmsInventory wmsInventory = new WmsInventory();
wmsInventory.setHandle(details.getWmsInventoryBo());
R<WmsInventory> inventoryR = wmsInventoryService.selectById(wmsInventory);
WmsInventory inventory = inventoryR.getData();
WmsInventory inventory = wmsInventoryService.getById(details.getWmsInventoryBo());
//更新wms_inventory表数量为0,调用远程接口
inventory.setMoveType("5");
inventory.setQtyOnHand(details.getQtyOnHand());
inventory.setUpdater(SecurityUtils.getUserName());
inventory.setDateUpdate(LocalDateTime.now());
wmsInventoryService.remoteInventory(inventory);
removeById(details.getHandle());
wmsInventoryService.removeInventory(inventory);
}
}

View File

@ -0,0 +1,65 @@
package com.foreverwin.iep.wms.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.foreverwin.iep.wms.entity.WmsInventory;
import com.foreverwin.iep.wms.entity.WmsInventoryLog;
import com.foreverwin.iep.wms.mapper.WmsInventoryLogMapper;
import com.foreverwin.iep.wms.service.WmsInventoryLogService;
import com.foreverwin.mom.common.data.tenant.TenantContextHolder;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.UUID;
@Service
@RequiredArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class WmsInventoryLogServiceImpl extends ServiceImpl<WmsInventoryLogMapper, WmsInventoryLog> implements WmsInventoryLogService {
@Override
public void createInventoryLog(WmsInventory wmsInventory) {
//日志
WmsInventoryLog wmsInventoryLog = new WmsInventoryLog();
wmsInventoryLog.setUuid(UUID.randomUUID().toString());
wmsInventoryLog.setSite(TenantContextHolder.getTenantId());
wmsInventoryLog.setItemBo(wmsInventory.getItemBo());
wmsInventoryLog.setQtyOnHand(wmsInventory.getQtyOnHand());
wmsInventoryLog.setOriginalQty(wmsInventory.getOriginalQty());
wmsInventoryLog.setMaterialLot(wmsInventory.getMaterialLot());
wmsInventoryLog.setWmsWarehouseBo(wmsInventory.getWmsWarehouseBo());
wmsInventoryLog.setWmsStorageBinBo(wmsInventory.getWmsStorageBinBo());
wmsInventoryLog.setErpInventory(wmsInventory.getErpInventory());
wmsInventoryLog.setSupplierNo(wmsInventory.getSupplierNo());
wmsInventoryLog.setSupplierBatch(wmsInventory.getSupplierBatch());
wmsInventoryLog.setDateCreate(LocalDateTime.now());
wmsInventoryLog.setCustomerBasisBo(wmsInventory.getCustomerBasisBo());
wmsInventoryLog.setLotSerial(wmsInventory.getLotSerial());
wmsInventoryLog.setStatus(wmsInventory.getStatus());
wmsInventoryLog.setRackNo(wmsInventory.getRackNo());
wmsInventoryLog.setLocationNo(wmsInventory.getLocationNo());
wmsInventoryLog.setDateMfg(wmsInventory.getDateMfg());
wmsInventoryLog.setDateExp(wmsInventory.getDateExp());
wmsInventoryLog.setDateInventory(wmsInventory.getDateInventory());
wmsInventoryLog.setCreator(wmsInventory.getCreator());
wmsInventoryLog.setExt01(wmsInventory.getExt01());
wmsInventoryLog.setExt02(wmsInventory.getExt02());
wmsInventoryLog.setExt03(wmsInventory.getExt03());
wmsInventoryLog.setExt04(wmsInventory.getExt04());
wmsInventoryLog.setExt05(wmsInventory.getExt05());
wmsInventoryLog.setParentMaterialLot(wmsInventory.getParentMaterialLot());
wmsInventoryLog.setMoveType(wmsInventory.getMoveType());
wmsInventoryLog.setDeputyQty(wmsInventory.getDeputyQty());
wmsInventoryLog.setDeputyUom(wmsInventory.getDeputyUom());
wmsInventoryLog.setMainUom(wmsInventory.getMainUom());
wmsInventoryLog.setSobkz(wmsInventory.getSobkz());
wmsInventoryLog.setVgbelLineNumber(wmsInventory.getVgbelLineNumber());
wmsInventoryLog.setVgbel(wmsInventory.getVgbel());
wmsInventoryLog.setDocumentNo(wmsInventory.getDocumentNo());
wmsInventoryLog.setDocumentType(wmsInventory.getDocumentType());
wmsInventoryLog.setPackageNumber(wmsInventory.getPackageNumber());
wmsInventoryLog.setItemFlag(wmsInventory.getItemFlag());
save(wmsInventoryLog);
}
}

View File

@ -0,0 +1,290 @@
package com.foreverwin.iep.wms.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.foreverwin.iep.common.faas.common.util.StringUtils;
import com.foreverwin.iep.prd.entity.CustomFields;
import com.foreverwin.iep.prd.entity.Item;
import com.foreverwin.iep.prd.mapper.CustomFieldDefMapper;
import com.foreverwin.iep.prd.mapper.CustomFieldsMapper;
import com.foreverwin.iep.prd.service.ItemService;
import com.foreverwin.iep.wms.dto.EqpFeedingDTO;
import com.foreverwin.iep.wms.dto.WmsInventoryDto;
import com.foreverwin.iep.wms.entity.WmsInventory;
import com.foreverwin.iep.wms.entity.WmsInventoryLog;
import com.foreverwin.iep.wms.service.WmsInventoryLogService;
import com.foreverwin.iep.wms.mapper.EqpFeedingMapper;
import com.foreverwin.iep.wms.mapper.WmsInventoryMapper;
import com.foreverwin.iep.wms.service.WmsInventoryService;
import com.foreverwin.mom.common.core.exception.BusinessException;
import com.foreverwin.mom.common.data.tenant.TenantContextHolder;
import com.foreverwin.mom.common.security.util.SecurityUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* 库存(物料批次)
*
* @author Snow
* @date 2024-10-23
*/
@Service
@RequiredArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class WmsInventoryServiceImpl extends ServiceImpl<WmsInventoryMapper, WmsInventory> implements WmsInventoryService {
private final WmsInventoryLogService wmsInventoryLogService;
private final EqpFeedingMapper eqpFeedingMapper;
private final ItemService itemService;
private final CustomFieldDefMapper customFieldDefMapper;
private final CustomFieldsMapper customFieldsMapper;
@Transactional(rollbackFor = Exception.class)
@Override
public void removeInventory(WmsInventory wmsInventory) {
super.removeById(wmsInventory);
// 写入日志
WmsInventoryLog wmsInventoryLog = new WmsInventoryLog();
wmsInventoryLog.setUuid(UUID.randomUUID().toString());
wmsInventoryLogService.save(wmsInventoryLog);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void createInventory(WmsInventory wmsInventory) {
if (StringUtils.isEmpty(wmsInventory.getItemBo())) {
throw BusinessException.build("创建库存时物料不能为空");
}
if (StringUtils.isEmpty(wmsInventory.getMaterialLot())) {
throw BusinessException.build("创建库存时物料批次不能为空");
}
wmsInventory.setHandle(WmsInventory.genHandle(wmsInventory.getSite(), wmsInventory.getItemBo(), wmsInventory.getMaterialLot()));
WmsInventory checkInv = this.baseMapper.selectById(wmsInventory.getHandle());
if (checkInv != null) {
throw BusinessException.build("当前物料同一批次库存已存在!");
}
wmsInventory.setCreator(SecurityUtils.getUserName());
wmsInventory.setDateCreate(LocalDateTime.now());
wmsInventory.setStatus("0");
this.baseMapper.insert(wmsInventory);
// 写入库存日志记录表
WmsInventoryLog wmsInventoryLog = new WmsInventoryLog();
BeanUtils.copyProperties(wmsInventory, wmsInventoryLog);
wmsInventoryLog.setUuid(UUID.randomUUID().toString());
wmsInventoryLog.setCreator(SecurityUtils.getUserName());
wmsInventoryLog.setDateCreate(LocalDateTime.now());
wmsInventoryLog.setMoveType("0"); // 新创建的库存
wmsInventoryLogService.save(wmsInventoryLog);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void outInventoryByMaterialLot(String site, String materialLot, BigDecimal outQty) {
// 扫码出库,没有销售单的出库
QueryWrapper<WmsInventory> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(WmsInventory::getMaterialLot, materialLot).eq(WmsInventory::getSite, site);
WmsInventory wmsInventory = this.baseMapper.selectOne(queryWrapper);
if (wmsInventory == null) {
throw BusinessException.build("库存数据已不存在");
}else if (wmsInventory.getQtyOnHand().compareTo(outQty)==0){
// 移除库存数据
super.removeById(wmsInventory);
}else{
BigDecimal remainQty = wmsInventory.getQtyOnHand().subtract(outQty);
wmsInventory.setQtyOnHand(remainQty);
wmsInventory.setUpdater(SecurityUtils.getUserName());
wmsInventory.setDateUpdate(LocalDateTime.now());
super.updateById(wmsInventory);
}
// 写入库存日志记录表
WmsInventoryLog wmsInventoryLog = new WmsInventoryLog();
BeanUtils.copyProperties(wmsInventory, wmsInventoryLog);
wmsInventoryLog.setUuid(UUID.randomUUID().toString());
wmsInventoryLog.setCreator(SecurityUtils.getUserName());
wmsInventoryLog.setDateCreate(LocalDateTime.now());
wmsInventoryLog.setMoveType("3"); // 出库
wmsInventoryLogService.save(wmsInventoryLog);
}
@Override
public IPage getWmsInventoryPage(Page page, WmsInventory dto) {
return this.baseMapper.getWmsInventoryPage(page, dto);
}
@Override
public WmsInventory getOneObjByHandle(String handle) {
return this.baseMapper.getOneObjByHandle(handle);
}
@Override
public List<WmsInventory> selectWmsInventoryByPackageNumber(String packageNumber) {
String site = TenantContextHolder.getTenantId();
WmsInventory parInv = new WmsInventory();
parInv.setPackageNumber(packageNumber);
return this.baseMapper.getObjByDtoAndSite(parInv, site);
}
@Override
public WmsInventory validateMaterialLot(String materialLot) {
String site = TenantContextHolder.getTenantId();
WmsInventory parInv = new WmsInventory();
parInv.setMaterialLot(materialLot);
List<WmsInventory> wmsInventory = this.baseMapper.getObjByDtoAndSite(parInv, site);
if (wmsInventory == null || wmsInventory.size() < 1) {
throw BusinessException.build("当前批次号不存在");
}
// 11月5日取消此限制
/*else if (!StringUtils.isEmpty(wmsInventory.get(0).getPackageNumber())) {
throw BusinessException.build("当前批次[" + materialLot + "]已绑定在[" + wmsInventory.get(0).getPackageNumber() + "]上");
}*/
return wmsInventory.get(0);
}
@Override
public void unbindPackageNumber(String packageNumber,boolean isErrorShow) {
String site = TenantContextHolder.getTenantId();
QueryWrapper<WmsInventory> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(WmsInventory::getPackageNumber, packageNumber).eq(WmsInventory::getSite, site);
List<WmsInventory> wmsInventoryList = this.baseMapper.selectList(queryWrapper);
if (wmsInventoryList == null || wmsInventoryList.size() < 1) {
if(isErrorShow){
throw BusinessException.build("当前托盘并未绑定批次");
}
} else {
for (WmsInventory wmsInventory : wmsInventoryList) {
wmsInventory.setPackageNumber(null);
wmsInventory.setUpdater(SecurityUtils.getUserName());
wmsInventory.setDateUpdate(LocalDateTime.now());
this.baseMapper.updateById(wmsInventory);
}
}
}
@Override
public void changePackageNumber(WmsInventory wmsInventory) {
String site = TenantContextHolder.getTenantId();
String oldPackageNum = wmsInventory.getPackageNumber();
String newPackage = wmsInventory.getNewPackageNumber();
UpdateWrapper<WmsInventory> updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda().eq(WmsInventory::getPackageNumber, oldPackageNum).eq(WmsInventory::getSite, site)
.set(WmsInventory::getPackageNumber, newPackage).set(WmsInventory::getUpdater, SecurityUtils.getUserName())
.set(WmsInventory::getDateUpdate, LocalDateTime.now());
super.update(updateWrapper);
}
@Override
public WmsInventoryDto selectByMaterialLot(WmsInventoryDto dto) {
String site = TenantContextHolder.getTenantId();
dto.setSite(site);
WmsInventoryDto wmsInventory = this.selectByMaterialLot(dto);
if (wmsInventory == null) {
throw BusinessException.build("料件批号的物料不在当前工单的BOM中");
}
//校验是否超过到期日
if ("Y".equals(dto.getCheckDateExp())) {
LocalDateTime dateExp = wmsInventory.getDateExp();
if (dateExp != null) {
boolean after = dateExp.isAfter(LocalDateTime.now());
if (!after) {
throw BusinessException.build("料件批号[" + wmsInventory.getMaterialLot() + "]已过期,到期日为["+wmsInventory.getDateExp()+"]请调整");
}
}
}
//校验料件库存先进先出
if ("Y".equals(dto.getFifo())) {
List<WmsInventory> list = list(Wrappers.<WmsInventory>lambdaQuery()
.eq(WmsInventory::getSite, site)
.eq(WmsInventory::getItemBo, wmsInventory.getItemBo())
.eq(WmsInventory::getWmsWarehouseBo, wmsInventory.getWmsWarehouseBo())
.gt(WmsInventory::getQtyOnHand, 0)
.eq(WmsInventory::getStatus,"0")
.orderByAsc(WmsInventory::getDateMfg));
if (list.size() > 0) {
LocalDateTime dateMfg = list.get(0).getDateMfg();
boolean before = dateMfg.isBefore(wmsInventory.getDateMfg());
if (before) {
wmsInventory.setFifo("N");//N表示返回前端有弹窗提示 先进先出
wmsInventory.setFifoMaterialLot(list.get(0).getMaterialLot());
}
}
}
return wmsInventory;
}
@Override
public WmsInventoryDto checkItemGroup(WmsInventoryDto dto) {
String site = TenantContextHolder.getTenantId();
dto.setSite(site);
WmsInventoryDto wmsInventory = this.selectByMaterialLot(dto);
if (wmsInventory == null) {
throw BusinessException.build("料件批号的物料不在当前工单的BOM中");
}
//校验扫描条码的物料在物料表中物料组是否在字典管理为OUT_ITEM_TYPE对应的值一致
EqpFeedingDTO eqpFeedingDTO = new EqpFeedingDTO();
eqpFeedingDTO.setSite(site);
eqpFeedingDTO.setResource(dto.getResource());
eqpFeedingDTO.setOperation(dto.getOperation());
eqpFeedingDTO.setShopOrder(dto.getShopOrder());
//eqpFeedingDTO.setMaterialLot(dto.getMaterialLot());
List<EqpFeedingDTO> eqpFeedingDTOSList = eqpFeedingMapper.selectEqpFeedingList(eqpFeedingDTO);
boolean isBreak = false;
for (EqpFeedingDTO feeding : eqpFeedingDTOSList) {
String item = feeding.getItemBo().split(",")[1];
String itemGroup = selectItemCustomField(item);
if (feeding.getQtyOnHand().compareTo(feeding.getOriginalQty()) < 0) {
for (Map<String, Object> itemType : dto.getOutItemType()) {
String value = (String) itemType.get("value");
if (itemGroup.equals(value)) {
isBreak = true;
wmsInventory.setItemGroup("N");//N表示返回前端有弹窗提示 XX条码剩余量是xx,
wmsInventory.setCheckItemQtyOnHand(feeding.getQtyOnHand());
wmsInventory.setCheckItemMaterialLot(feeding.getMaterialLot());
break;
}
}
if (isBreak) {
break;
}
} else {
throw BusinessException.build("设备["+dto.getResource()+"]工序["+dto.getOperation()+"]工单["+dto.getShopOrder()+"]物料已存在,不允许重复上料;请先进行下料操作");
}
}
return wmsInventory;
}
@Override
public void updateInventory(WmsInventory wmsInventory) {
super.updateById(wmsInventory);
wmsInventoryLogService.createInventoryLog(wmsInventory);
}
//查询物料的自定义字段
private String selectItemCustomField(String item){
String itemGroup = null;
Item itemServiceOne = itemService.getOne(Wrappers.<Item>lambdaQuery().eq(Item::getItem, item)
.eq(Item::getSite, TenantContextHolder.getTenantId())
.eq(Item::getCurrentRevision, "Y"));
if (itemServiceOne != null) {
CustomFields customFields = customFieldsMapper.selectOne(Wrappers.<CustomFields>lambdaQuery()
.eq(CustomFields::getFieldName, "ITEM_GROUP")
.eq(CustomFields::getHandle, itemServiceOne.getHandle()));
if (customFields != null) {
itemGroup = customFields.getFieldValue();
}
}
return itemGroup;
}
}

View File

@ -0,0 +1,16 @@
package com.foreverwin.iep.wms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.foreverwin.iep.wms.entity.WmsInventoryLog;
import org.apache.ibatis.annotations.Mapper;
/**
* 库存移动日志表(物料批次)
*
* @author Snow
* @date 2024-10-22
*/
@Mapper
public interface WmsInventoryLogMapper extends BaseMapper<WmsInventoryLog> {
}

View File

@ -0,0 +1,30 @@
package com.foreverwin.iep.wms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.foreverwin.iep.wms.dto.WmsInventoryDto;
import com.foreverwin.iep.wms.entity.WmsInventory;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 库存(物料批次)
*
* @author Snow
* @date 2024-10-22
*/
@Mapper
public interface WmsInventoryMapper extends BaseMapper<WmsInventory> {
IPage<WmsInventory> getWmsInventoryPage(IPage<WmsInventory> page, @Param("dto") WmsInventory dto);
WmsInventory getOneObjByHandle(@Param("handle") String handle);
List<WmsInventory> getObjByDtoAndSite(@Param("dto") WmsInventory dto,@Param("site") String site);
List<WmsInventory> onLoadScanMaterialLot(@Param("status") String status,@Param("documentType") String documentType,@Param("site") String site,@Param("item") String item,@Param("documentNo") String documentNo);
WmsInventoryDto selectByMaterialLot(@Param("dto") WmsInventoryDto dto);
}

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.foreverwin.iep.wms.mapper.WmsInventoryLogMapper">
<resultMap id="inventoryLogMap" type="com.foreverwin.iep.wms.entity.WmsInventoryLog">
<id property="uuid" column="UUID"/>
<result property="site" column="SITE"/>
<result property="itemBo" column="ITEM_BO"/>
<result property="qtyOnHand" column="QTY_ON_HAND"/>
<result property="originalQty" column="ORIGINAL_QTY"/>
<result property="materialLot" column="MATERIAL_LOT"/>
<result property="wmsWarehouseBo" column="WMS_WAREHOUSE_BO"/>
<result property="wmsStorageBinBo" column="WMS_STORAGE_BIN_BO"/>
<result property="erpInventory" column="ERP_INVENTORY"/>
<result property="supplierNo" column="SUPPLIER_NO"/>
<result property="supplierBatch" column="SUPPLIER_BATCH"/>
<result property="dateCreate" column="DATE_CREATE"/>
<result property="customerBasisBo" column="CUSTOMER_BASIS_BO"/>
<result property="lotSerial" column="LOT_SERIAL"/>
<result property="status" column="STATUS"/>
<result property="rackNo" column="RACK_NO"/>
<result property="locationNo" column="LOCATION_NO"/>
<result property="dateMfg" column="DATE_MFG"/>
<result property="dateExp" column="DATE_EXP"/>
<result property="dateInventory" column="DATE_INVENTORY"/>
<result property="creator" column="CREATOR"/>
<result property="ext01" column="EXT01"/>
<result property="ext02" column="EXT02"/>
<result property="ext03" column="EXT03"/>
<result property="ext04" column="EXT04"/>
<result property="ext05" column="EXT05"/>
<result property="parentMaterialLot" column="PARENT_MATERIAL_LOT"/>
<result property="moveType" column="MOVE_TYPE"/>
<result property="documentNo" column="DOCUMENT_NO"/>
<result property="documentType" column="DOCUMENT_TYPE"/>
</resultMap>
</mapper>

View File

@ -0,0 +1,201 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.foreverwin.iep.wms.mapper.WmsInventoryMapper">
<resultMap id="wmsInventoryMap" type="com.foreverwin.iep.wms.entity.WmsInventory">
<id property="handle" column="HANDLE"/>
<result property="site" column="SITE"/>
<result property="itemBo" column="ITEM_BO"/>
<result property="item" column="ITEM"/>
<result property="itemDesc" column="ITEM_DESC"/>
<result property="unitOfMeasure" column="UNIT_OF_MEASURE"/>
<result property="qtyOnHand" column="QTY_ON_HAND"/>
<result property="originalQty" column="ORIGINAL_QTY"/>
<result property="materialLot" column="MATERIAL_LOT"/>
<result property="wmsWarehouseBo" column="WMS_WAREHOUSE_BO"/>
<result property="wmsStorageBinBo" column="STORAGE_NO"/>
<result property="erpInventory" column="ERP_INVENTORY"/>
<result property="supplierNo" column="SUPPLIER_NO"/>
<result property="supplierBatch" column="SUPPLIER_BATCH"/>
<result property="dateCreate" column="DATE_CREATE"/>
<result property="customerBasisBo" column="CUSTOMER_BASIS_BO"/>
<result property="lotSerial" column="LOT_SERIAL"/>
<result property="status" column="STATUS"/>
<result property="rackNo" column="RACK_NO"/>
<result property="locationNo" column="LOCATION_NO"/>
<result property="dateMfg" column="DATE_MFG"/>
<result property="dateExp" column="DATE_EXP"/>
<result property="dateInventory" column="DATE_INVENTORY"/>
<result property="creator" column="CREATOR"/>
<result property="dateUpdate" column="DATE_UPDATE"/>
<result property="updater" column="UPDATER"/>
<result property="ext01" column="EXT01"/>
<result property="ext02" column="EXT02"/>
<result property="ext03" column="EXT03"/>
<result property="ext04" column="EXT04"/>
<result property="ext05" column="EXT05"/>
<result property="parentMaterialLot" column="PARENT_MATERIAL_LOT"/>
<result property="documentNo" column="DOCUMENT_NO"/>
<result property="documentType" column="DOCUMENT_TYPE"/>
<result property="packageNumber" column="PACKAGE_NUMBER"/>
<result property="moveType" column="MOVE_TYPE"/>
<result property="inspectionLevel" column="INSPECTION_LEVEL"/>
</resultMap>
<resultMap id="fullMap" type="com.foreverwin.iep.wms.dto.WmsInventoryDto">
<result property="shopOrder" column="SHOP_ORDER"/>
<result property="resource" column="RESOURCE"/>
<result property="operation" column="OPERATION"/>
<result property="wmsInventoryBo" column="WMS_INVENTORY_BO"/>
</resultMap>
<select id="getWmsInventoryPage" resultMap="wmsInventoryMap">
SELECT wi.HANDLE, wi.SITE, wi.ITEM_BO,i.ITEM,i.DESCRIPTION ITEM_DESC,i.UNIT_OF_MEASURE ,wi.QTY_ON_HAND,
wi.ORIGINAL_QTY, wi.MATERIAL_LOT, wi.WMS_WAREHOUSE_BO, wi.WMS_STORAGE_BIN_BO,
wi.ERP_INVENTORY, wi.SUPPLIER_NO, wi.SUPPLIER_BATCH, wi.DATE_CREATE, wi.CUSTOMER_BASIS_BO,
wi.LOT_SERIAL, wi.STATUS, wi.RACK_NO, wi.LOCATION_NO, wi.DATE_MFG, wi.DATE_EXP, wi.DATE_INVENTORY, wi.CREATOR,
wi.EXT01, wi.EXT02, wi.EXT03, wi.EXT04, wi.EXT05, wi.PARENT_MATERIAL_LOT, wi.DATE_UPDATE, wi.UPDATER,wi.DOCUMENT_NO,
wi.DOCUMENT_TYPE
FROM wms_inventory wi
left join item i on wi.ITEM_BO = concat('ItemBO:',i.SITE,',',i.ITEM,',#')
where wi.SITE = #{dto.site}
<if test="dto.item != null and dto.item != ''">
AND i.ITEM LIKE '%${dto.item}%'
</if>
<if test="dto.status != null and dto.status != ''">
AND wi.STATUS = #{dto.status}
</if>
<if test="dto.materialLot != null and dto.materialLot != ''">
AND wi.MATERIAL_LOT LIKE '%${dto.materialLot}%'
</if>
</select>
<select id="getOneObjByHandle" resultMap="wmsInventoryMap">
SELECT wi.HANDLE,
wi.SITE,
wi.ITEM_BO,
i.ITEM,
i.DESCRIPTION ITEM_DESC,
i.UNIT_OF_MEASURE,
wi.QTY_ON_HAND,
wi.ORIGINAL_QTY,
wi.MATERIAL_LOT,
wi.WMS_WAREHOUSE_BO,
wi.WMS_STORAGE_BIN_BO,
wi.ERP_INVENTORY,
wi.SUPPLIER_NO,
wi.SUPPLIER_BATCH,
wi.DATE_CREATE,
wi.CUSTOMER_BASIS_BO,
wi.LOT_SERIAL,
wi.STATUS,
wi.RACK_NO,
wi.LOCATION_NO,
wi.DATE_MFG,
wi.DATE_EXP,
wi.DATE_INVENTORY,
wi.CREATOR,
wi.EXT01,
wi.EXT02,
wi.EXT03,
wi.EXT04,
wi.EXT05,
wi.PARENT_MATERIAL_LOT,
wi.DATE_UPDATE,
wi.DOCUMENT_NO,
wi.DOCUMENT_TYPE,
wi.UPDATER
FROM wms_inventory wi
left join item i on wi.ITEM_BO = concat('ItemBO:', i.SITE, ',', i.ITEM, ',#')
where wi.HANDLE = #{handle}
</select>
<select id="onLoadScanMaterialLot" resultMap="wmsInventoryMap">
select wi.*,i.ITEM from wms_inventory wi
left join item i on concat('ItemBO:',i.SITE,',',i.ITEM,',#') = wi.ITEM_BO
where wi.SITE = #{site}
<if test="status != null and status != ''">
and wi.STATUS = #{status}
</if>
<if test="documentType != null and documentType != ''">
and wi.DOCUMENT_TYPE = #{documentType}
</if>
<if test="item != null and item != ''">
and i.ITEM = #{item}
</if>
<if test="documentNo != null and documentNo != ''">
and wi.DOCUMENT_NO = #{documentNo}
</if>
</select>
<select id="getObjByDtoAndSite" resultMap="wmsInventoryMap">
SELECT wi.HANDLE,
wi.SITE,
wi.ITEM_BO,
i.ITEM,
i.DESCRIPTION ITEM_DESC,
i.UNIT_OF_MEASURE,
wi.QTY_ON_HAND,
wi.ORIGINAL_QTY,
wi.MATERIAL_LOT,
wi.WMS_WAREHOUSE_BO,
wi.WMS_STORAGE_BIN_BO,
wi.ERP_INVENTORY,
wi.SUPPLIER_NO,
wi.SUPPLIER_BATCH,
wi.DATE_CREATE,
wi.CUSTOMER_BASIS_BO,
wi.LOT_SERIAL,
wi.STATUS,
wi.RACK_NO,
wi.LOCATION_NO,
wi.DATE_MFG,
wi.DATE_EXP,
wi.DATE_INVENTORY,
wi.CREATOR,
wi.EXT01,
wi.EXT02,
wi.EXT03,
wi.EXT04,
wi.EXT05,
wi.PARENT_MATERIAL_LOT,
wi.DATE_UPDATE,
wi.DOCUMENT_NO,
wi.DOCUMENT_TYPE,
wi.UPDATER,
wi.PACKAGE_NUMBER
FROM wms_inventory wi
left join item i on wi.ITEM_BO = concat('ItemBO:', i.SITE, ',', i.ITEM, ',#')
where wi.SITE = #{site}
<if test="dto.materialLot != null and dto.materialLot != ''">
and wi.MATERIAL_LOT = #{dto.materialLot}
</if>
<if test="dto.packageNumber != null and dto.packageNumber != ''">
and wi.PACKAGE_NUMBER = #{dto.packageNumber}
</if>
</select>
<select id="selectByMaterialLot" resultMap="fullMap">
SELECT a.SHOP_ORDER ,op.OPERATION ,i.ITEM ,i.DESCRIPTION ITEM_DESC,wi.*,wi.HANDLE WMS_INVENTORY_BO
from SHOP_ORDER a
join BOM b on a.PLANNED_BOM_BO = b.HANDLE
join BOM_COMPONENT c on c.BOM_BO = b.HANDLE
join OPERATION op on op.HANDLE = c.OPERATION_BO
join WMS_INVENTORY wi on wi.ITEM_BO = c.COMPONENT_GBO
join item i on (c.COMPONENT_GBO = concat('ItemBO:', concat(i.SITE, concat(',', concat(i.ITEM,',#'))))
and i.CURRENT_REVISION = 'Y')
join WMS_WAREHOUSE we on we.HANDLE = wi.WMS_WAREHOUSE_BO
join WMS_STORAGE_LOCATION wn on wn.WAREHOUSE_BO = we.HANDLE
join WMS_STORAGE_BIN ws on ws.STORAGE_LOCATION_BO = wn.HANDLE
join WORK_CENTER wc on wc.HANDLE = we.WORK_CENTER_BO
join WORK_CENTER_MEMBER wr on wr.WORK_CENTER_BO = wc.HANDLE
join RESRCE r on r.HANDLE = wr.WORK_CENTER_OR_RESOURCE_GBO
where wi.SITE = #{dto.site} and wi.MATERIAL_LOT = #{dto.materialLot}
and a.SHOP_ORDER = #{dto.shopOrder} and op.OPERATION = #{dto.operation}
and r.RESRCE = #{dto.resource}
and wi.STATUS ='0' and wi.QTY_ON_HAND > 0
</select>
</mapper>

View File

@ -91,11 +91,6 @@
<artifactId>qms-db</artifactId>
<version>4.5.0</version>
</dependency>
<dependency>
<groupId>com.foreverwin</groupId>
<artifactId>wms-api</artifactId>
<version>4.5.0</version>
</dependency>
<dependency>
<groupId>com.foreverwin</groupId>
<artifactId>int-api</artifactId>