Browse Source

修改采购收货推荐库位接口。

master
刘忱 2 years ago
parent
commit
8850691e9f
  1. 19
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java
  2. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java
  3. 81
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java
  4. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestMainServiceImpl.java
  5. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/putawayRequest/PutawayRequestMainServiceImpl.java

19
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java

@ -95,7 +95,13 @@ public interface BalanceMapper extends BaseMapperX<BalanceDO> {
} }
/** /**
* 更新库存余额数量出库qty是负数 * 更查找库存余额
* @param packingNumber 包装号
* @param itemCode 物品编号
* @param batch 批次
* @param inventoryStatus 库存状态
* @param locationCode 库位编号
* @return 符合条件的库存余额
*/ */
default List<BalanceDO> getBalanceList(String packingNumber, String itemCode, String batch, String inventoryStatus, String locationCode) { default List<BalanceDO> getBalanceList(String packingNumber, String itemCode, String batch, String inventoryStatus, String locationCode) {
QueryWrapper<BalanceDO> queryWrapper = new QueryWrapper<>(); QueryWrapper<BalanceDO> queryWrapper = new QueryWrapper<>();
@ -117,6 +123,17 @@ public interface BalanceMapper extends BaseMapperX<BalanceDO> {
return selectList(queryWrapper); return selectList(queryWrapper);
} }
/**
* 根据库位编号查找库存余额数量
* @param locationCode 库位编号
* @return 库存余额数量
*/
default long getBalanceCount(String locationCode) {
QueryWrapper<BalanceDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("location_code", locationCode);
return selectCount(queryWrapper);
}
default PageResult<BalanceDO> selectPage(BalancePageReqVO reqVO) { default PageResult<BalanceDO> selectPage(BalancePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<BalanceDO>() return selectPage(reqVO, new LambdaQueryWrapperX<BalanceDO>()
.eqIfPresent(BalanceDO::getPackingNumber, reqVO.getPackingNumber()) .eqIfPresent(BalanceDO::getPackingNumber, reqVO.getPackingNumber())

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationService.java

@ -4,7 +4,6 @@ import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.location.vo.*; import com.win.module.wms.controller.location.vo.*;
import com.win.module.wms.controller.rule.vo.RuleRespVO; import com.win.module.wms.controller.rule.vo.RuleRespVO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.dataobject.location.LocationDO; import com.win.module.wms.dal.dataobject.location.LocationDO;
import javax.validation.Valid; import javax.validation.Valid;
@ -93,8 +92,10 @@ public interface LocationService {
/** /**
* 上架推荐策略 * 上架推荐策略
* @param ruleRespVO 上架策略 * @param ruleRespVO 上架策略
* @param itembasicDO 物品 * @param itemCode 物料编码
* @param batch 批次
* @param inventoryStatus 状态
* @return * @return
*/ */
LocationDO inspectLocation(RuleRespVO ruleRespVO, ItembasicDO itembasicDO); LocationDO inspectLocation(RuleRespVO ruleRespVO, String itemCode, String batch, String inventoryStatus);
} }

81
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/location/LocationServiceImpl.java

@ -13,7 +13,7 @@ import com.win.framework.datapermission.core.util.DataPermissionUtils;
import com.win.module.wms.controller.location.vo.*; import com.win.module.wms.controller.location.vo.*;
import com.win.module.wms.controller.rule.vo.RuleRespVO; import com.win.module.wms.controller.rule.vo.RuleRespVO;
import com.win.module.wms.convert.location.LocationConvert; import com.win.module.wms.convert.location.LocationConvert;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.balance.BalanceDO;
import com.win.module.wms.dal.dataobject.location.LocationDO; import com.win.module.wms.dal.dataobject.location.LocationDO;
import com.win.module.wms.dal.mysql.balance.BalanceMapper; import com.win.module.wms.dal.mysql.balance.BalanceMapper;
import com.win.module.wms.dal.mysql.expectout.ExpectoutMapper; import com.win.module.wms.dal.mysql.expectout.ExpectoutMapper;
@ -105,6 +105,7 @@ public class LocationServiceImpl implements LocationService {
public PageResult<LocationDO> getLocationSenior(CustomConditions conditions) { public PageResult<LocationDO> getLocationSenior(CustomConditions conditions) {
return locationMapper.selectSenior(conditions); return locationMapper.selectSenior(conditions);
} }
private String validateLocationImport(LocationDO location) { private String validateLocationImport(LocationDO location) {
StringBuilder message = new StringBuilder(); StringBuilder message = new StringBuilder();
try { try {
@ -182,8 +183,7 @@ public class LocationServiceImpl implements LocationService {
LocationDO existConfigurationSetting = locationMapper.selectByCode(locationDO.getCode()); LocationDO existConfigurationSetting = locationMapper.selectByCode(locationDO.getCode());
if (existConfigurationSetting == null && mode != 3) { if (existConfigurationSetting == null && mode != 3) {
locationMapper.insert(LocationConvert.INSTANCE.convert(location)); locationMapper.insert(LocationConvert.INSTANCE.convert(location));
} } else if (existConfigurationSetting != null && mode != 2) {
else if (existConfigurationSetting != null && mode != 2) {
// 如果存在,判断是否允许更新 // 如果存在,判断是否允许更新
locationDO.setId(existConfigurationSetting.getId()); locationDO.setId(existConfigurationSetting.getId());
locationMapper.updateById(locationDO); locationMapper.updateById(locationDO);
@ -192,6 +192,7 @@ public class LocationServiceImpl implements LocationService {
}); });
return errorList; return errorList;
} }
private void validateLocationForCreateOrUpdate(Long id, String code, String warehouseCode, String areaCode, String erpLocationCode, String locationGroupCode, private void validateLocationForCreateOrUpdate(Long id, String code, String warehouseCode, String areaCode, String erpLocationCode, String locationGroupCode,
String type, Integer pickPriority, String userGroupCode, String available) { String type, Integer pickPriority, String userGroupCode, String available) {
// 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确
@ -209,6 +210,7 @@ public class LocationServiceImpl implements LocationService {
validateAvailableExists(available); validateAvailableExists(available);
}); });
} }
private void validateLocationExists(Long id) { private void validateLocationExists(Long id) {
if (id == null) { if (id == null) {
return; return;
@ -217,6 +219,7 @@ public class LocationServiceImpl implements LocationService {
throw exception(LOCATION_NOT_EXISTS); throw exception(LOCATION_NOT_EXISTS);
} }
} }
@VisibleForTesting @VisibleForTesting
private void validateCodeExists(Long id, String code) { private void validateCodeExists(Long id, String code) {
if (code.isEmpty()) { if (code.isEmpty()) {
@ -237,12 +240,14 @@ public class LocationServiceImpl implements LocationService {
throw exception(LOCATION_CODE_EXISTS); throw exception(LOCATION_CODE_EXISTS);
} }
} }
@VisibleForTesting @VisibleForTesting
private void validateWarehouseCodeExists(String warehouseCode) { private void validateWarehouseCodeExists(String warehouseCode) {
if (warehouseCode.isEmpty()) { if (warehouseCode.isEmpty()) {
throw exception(LOCATION_WARE_HOUSE_CODE_NOT_EXISTS); throw exception(LOCATION_WARE_HOUSE_CODE_NOT_EXISTS);
} }
} }
@VisibleForTesting @VisibleForTesting
private void validateAreaCodeExists(String areaCode) { private void validateAreaCodeExists(String areaCode) {
if (areaCode.isEmpty()) { if (areaCode.isEmpty()) {
@ -263,30 +268,35 @@ public class LocationServiceImpl implements LocationService {
throw exception(LOCATION_LOCATION_GROUP_CODE_NOT_EXISTS); throw exception(LOCATION_LOCATION_GROUP_CODE_NOT_EXISTS);
} }
} }
@VisibleForTesting @VisibleForTesting
private void validateTypeExists(String type) { private void validateTypeExists(String type) {
if (type.isEmpty()) { if (type.isEmpty()) {
throw exception(LOCATION_TYPE_NOT_EXISTS); throw exception(LOCATION_TYPE_NOT_EXISTS);
} }
} }
@VisibleForTesting @VisibleForTesting
private void validatePickPriorityExists(Integer pickPriority) { private void validatePickPriorityExists(Integer pickPriority) {
if (pickPriority == null) { if (pickPriority == null) {
throw exception(LOCATION_PICK_PRIORITY_NOT_EXISTS); throw exception(LOCATION_PICK_PRIORITY_NOT_EXISTS);
} }
} }
@VisibleForTesting @VisibleForTesting
private void validateUserGroupCodeExists(String userGroupCode) { private void validateUserGroupCodeExists(String userGroupCode) {
if (userGroupCode.isEmpty()) { if (userGroupCode.isEmpty()) {
throw exception(LOCATION_USER_GROUP_CODE_NOT_EXISTS); throw exception(LOCATION_USER_GROUP_CODE_NOT_EXISTS);
} }
} }
@VisibleForTesting @VisibleForTesting
private void validateAvailableExists(String available) { private void validateAvailableExists(String available) {
if (available.isEmpty()) { if (available.isEmpty()) {
throw exception(LOCATION_AVAILABLE_NOT_EXISTS); throw exception(LOCATION_AVAILABLE_NOT_EXISTS);
} }
} }
//调用公共方法查询库位信息 //调用公共方法查询库位信息
@Override @Override
public LocationDO selectLocation(String pcode) { public LocationDO selectLocation(String pcode) {
@ -301,10 +311,8 @@ public class LocationServiceImpl implements LocationService {
} }
} }
//{"WarehouseCode":"W1","AreaCode":"A1","LocationGroupCode":"LG1","LocationCode":"H01","EmptyLocationFirst":"FALSE","NotEmptyLocationFirst":"FALSE",
// "EnableMixItem":"TRUE","EnableMixLot":"TRUE","EnableMixStatus":"TRUE"}
@Override @Override
public LocationDO inspectLocation(RuleRespVO ruleRespVO, ItembasicDO itembasicDO) { public LocationDO inspectLocation(RuleRespVO ruleRespVO, String itemCode, String batch, String inventoryStatus) {
JSONObject jsonObject = JSONUtil.parseObj(ruleRespVO.getConfiguration()); JSONObject jsonObject = JSONUtil.parseObj(ruleRespVO.getConfiguration());
Object locationCode = jsonObject.get("LocationCode"); Object locationCode = jsonObject.get("LocationCode");
//设置了库位直接返回 //设置了库位直接返回
@ -367,35 +375,60 @@ public class LocationServiceImpl implements LocationService {
Object enableMixLot = jsonObject.get("EnableMixLot"); Object enableMixLot = jsonObject.get("EnableMixLot");
//可以混状态 //可以混状态
Object enableMixStatus = jsonObject.get("EnableMixStatus"); Object enableMixStatus = jsonObject.get("EnableMixStatus");
if("TRUE".equals(emptyLocationFirst)) { locationDOList = this.locationFirst(locationDOList, emptyLocationFirst, notEmptyLocationFirst, itemCode, batch, inventoryStatus, enableMixItem, enableMixLot, enableMixStatus);
locationDOList = this.emptyLocationFirst(locationDOList, enableMixItem, enableMixLot, enableMixStatus);
} else if("TRUE".equals(notEmptyLocationFirst)) {
locationDOList = this.notEmptyLocationFirst(locationDOList, enableMixItem, enableMixLot, enableMixStatus);
}
return locationDOList.get(0); return locationDOList.get(0);
} }
/** /**
* 优先空库位过滤 * 判断优先空库位和非空库位
*
* @param locationDOList 库位list * @param locationDOList 库位list
* @param emptyLocationFirst 优先空库位
* @param notEmptyLocationFirst 优先非空库位
* @param itemCode 物品编号
* @param batch 批次
* @param inventoryStatus 状态
* @param enableMixItem 可以混物品 * @param enableMixItem 可以混物品
* @param enableMixLot 可以混批次 * @param enableMixLot 可以混批次
* @param enableMixStatus 可以混状态 * @param enableMixStatus 可以混状态
* @return 过滤之后的库位list * @return 过滤之后的库位list
*/ */
private List<LocationDO> emptyLocationFirst(List<LocationDO> locationDOList, Object enableMixItem, Object enableMixLot, Object enableMixStatus) { private List<LocationDO> locationFirst(List<LocationDO> locationDOList, Object emptyLocationFirst, Object notEmptyLocationFirst, String itemCode, String batch, String inventoryStatus, Object enableMixItem, Object enableMixLot, Object enableMixStatus) {
return locationDOList; List<LocationDO> emptyList = new ArrayList<>();
List<LocationDO> notEmptyList = new ArrayList<>();
for (LocationDO locationDO : locationDOList) {
List<BalanceDO> balanceDOList = balanceMapper.getBalanceList(null, null, null, null, locationDO.getCode());
if (balanceDOList.isEmpty()) {
emptyList.add(locationDO);
} else {
boolean flag = true;
for (BalanceDO balanceDO : balanceDOList) {
if ("TRUE".equals(enableMixItem) && !itemCode.equals(balanceDO.getItemCode())) {
flag = false;
break;
}
if ("TRUE".equals(enableMixLot) && !batch.equals(balanceDO.getBatch())) {
flag = false;
break;
}
if ("TRUE".equals(enableMixStatus) && !inventoryStatus.equals(balanceDO.getInventoryStatus())) {
flag = false;
break;
}
}
if (flag) {
notEmptyList.add(locationDO);
}
}
}
//优先空库位
if("TRUE".equals(emptyLocationFirst) && !emptyList.isEmpty()) {
return emptyList;
}
//优先非空库位
if("TRUE".equals(notEmptyLocationFirst) && !notEmptyList.isEmpty()) {
return notEmptyList;
} }
/**
* 优先非空库位过滤
* @param locationDOList 库位list
* @param enableMixItem 可以混物品
* @param enableMixLot 可以混批次
* @param enableMixStatus 可以混状态
* @return 过滤之后的库位list
*/
private List<LocationDO> notEmptyLocationFirst(List<LocationDO> locationDOList, Object enableMixItem, Object enableMixLot, Object enableMixStatus) {
return locationDOList; return locationDOList;
} }

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionreturnRequest/ProductionreturnRequestMainServiceImpl.java

@ -679,7 +679,7 @@ public class ProductionreturnRequestMainServiceImpl implements ProductionreturnR
ItembasicDO itembasicDO = itembasicService.selectItembasic(productionreturnRecordDetailDO.getItemCode()); ItembasicDO itembasicDO = itembasicService.selectItembasic(productionreturnRecordDetailDO.getItemCode());
// 获取上架策略 并赋值 to库位 // 获取上架策略 并赋值 to库位
RuleRespVO ruleRespVO = ruleService.grounding(null,null,itembasicDO.getAbcClass(),itembasicDO.getType(),itembasicDO.getItemGroup(),itembasicDO.getProject(), itembasicDO.getCode(),null,null,null,null,null,null); RuleRespVO ruleRespVO = ruleService.grounding(null,null,itembasicDO.getAbcClass(),itembasicDO.getType(),itembasicDO.getItemGroup(),itembasicDO.getProject(), itembasicDO.getCode(),null,null,null,null,null,null);
LocationDO locationDO = locationService.inspectLocation(ruleRespVO,itembasicDO); LocationDO locationDO = locationService.inspectLocation(ruleRespVO, itembasicDO.getCode(), item.getBatch(), productionreturnRecordDetailDO.getInventoryStatus());
productionreturnRecordDetailDO.setToLocationCode(locationDO.getCode()); productionreturnRecordDetailDO.setToLocationCode(locationDO.getCode());
// 获取库位信息 并赋值 // 获取库位信息 并赋值
LocationDO locationDOFrom = locationService.selectLocation(item.getFromLocationCode()); LocationDO locationDOFrom = locationService.selectLocation(item.getFromLocationCode());
@ -797,7 +797,7 @@ public class ProductionreturnRequestMainServiceImpl implements ProductionreturnR
productionreturnJobDetailDO.setNumber(number); productionreturnJobDetailDO.setNumber(number);
// 获取上架策略 并赋值 to库位 // 获取上架策略 并赋值 to库位
RuleRespVO ruleRespVO = ruleService.grounding(null,null, itembasicDO.getAbcClass(), itembasicDO.getType(), itembasicDO.getItemGroup(), itembasicDO.getProject(), productionreturnJobDetailDO.getItemCode(),null,null,null,null,null,null); RuleRespVO ruleRespVO = ruleService.grounding(null,null, itembasicDO.getAbcClass(), itembasicDO.getType(), itembasicDO.getItemGroup(), itembasicDO.getProject(), productionreturnJobDetailDO.getItemCode(),null,null,null,null,null,null);
LocationDO locationDO = locationService.inspectLocation(ruleRespVO, itembasicDO); LocationDO locationDO = locationService.inspectLocation(ruleRespVO, itembasicDO.getCode(), productionreturnJobDetailDO.getBatch(), productionreturnJobDetailDO.getInventoryStatus());
productionreturnJobDetailDO.setToLocationCode(locationDO.getCode()); productionreturnJobDetailDO.setToLocationCode(locationDO.getCode());
// 判断合格 不合格 // 判断合格 不合格
if (!mainDO.getBusinessType().equals("ReturnToStore")) { if (!mainDO.getBusinessType().equals("ReturnToStore")) {

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/putawayRequest/PutawayRequestMainServiceImpl.java

@ -367,7 +367,7 @@ public class PutawayRequestMainServiceImpl implements PutawayRequestMainService
RuleRespVO groundingRuleRespVO = ruleService.grounding(putawayJobMainDO.getSupplierCode(), null, itembasicDO.getAbcClass(), itembasicDO.getType(), itembasicDO.getItemGroup(), itembasicDO.getProject(), RuleRespVO groundingRuleRespVO = ruleService.grounding(putawayJobMainDO.getSupplierCode(), null, itembasicDO.getAbcClass(), itembasicDO.getType(), itembasicDO.getItemGroup(), itembasicDO.getProject(),
putawayJobDetailDO.getItemCode(), putawayJobDetailDO.getInventoryStatus(), null, null, null, null, null); putawayJobDetailDO.getItemCode(), putawayJobDetailDO.getInventoryStatus(), null, null, null, null, null);
LocationDO locationDO = locationService.inspectLocation(groundingRuleRespVO, itembasicDO); LocationDO locationDO = locationService.inspectLocation(groundingRuleRespVO, itembasicDO.getCode(), putawayJobDetailDO.getBatch(), putawayJobDetailDO.getInventoryStatus());
putawayJobDetailDO.setToLocationCode(locationDO.getCode()); putawayJobDetailDO.setToLocationCode(locationDO.getCode());
putawayJobDetailDO.setNumber(number); putawayJobDetailDO.setNumber(number);
putawayJobDetailDO.setMasterId(putawayJobDetailDO.getId()); putawayJobDetailDO.setMasterId(putawayJobDetailDO.getId());

Loading…
Cancel
Save