仓库管理修改

liweidong
wusiyu 4 hours ago
parent 2138402092
commit 43c7ae69ba
  1. 10
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/WmsTaskClient.java
  2. 27
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/GraphiteStockKitVO.java
  3. 47
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StockKitGoodsDetailVO.java
  4. 13
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGraphiteMoldOutController.java
  5. 8
      blade-service/blade-wms/src/main/java/org/springblade/wms/feign/WmsTaskClientImpl.java
  6. 3
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGraphiteMoldOutService.java
  7. 106
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGraphiteMoldOutServiceImpl.java

@ -3,6 +3,7 @@ package org.springblade.wms.feign;
import org.springblade.core.tool.api.R;
import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO;
import org.springblade.wms.pojo.entity.StGraphiteMoldOut;
import org.springblade.wms.pojo.vo.GraphiteStockKitVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.format.annotation.DateTimeFormat;
@ -35,6 +36,8 @@ public interface WmsTaskClient {
String GENERATE_PRE_OUT_ORDER = API_PREFIX + "/generatePreOutOrder";
String GET_STOCK_AND_KIT = API_PREFIX + "/getStockAndKit";
/**
* 物料状态监控同步erp
*/
@ -64,4 +67,11 @@ public interface WmsTaskClient {
@PostMapping(GENERATE_PRE_OUT_ORDER)
R<List<StGraphiteMoldOut>> generatePreOutOrder(@SpringQueryMap StGraphiteMoldOutDTO dto);
/**
* 查询库存和齐套数
*/
@PostMapping(GET_STOCK_AND_KIT)
R<GraphiteStockKitVO> getStockAndKit(@RequestParam String goodsCode,
@RequestParam Integer isGraphite);
}

@ -0,0 +1,27 @@
package org.springblade.wms.pojo.vo;
import lombok.Data;
import java.util.List;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName GraphiteStockKitVO
* @description:
* @autor: WuSiYu
* @create 2026-06-08 16:09
**/
@Data
public class GraphiteStockKitVO {
/**
* 齐套数量
*/
private Integer completeQuantity;
/**
* 子物料/关联物料
*/
private List<StockKitGoodsDetailVO> stockKitGoodsDetailList;
}

@ -0,0 +1,47 @@
package org.springblade.wms.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName StockKitGoodsDetailVO
* @description:
* @autor: WuSiYu
* @create 2026-06-08 16:12
**/
@Data
public class StockKitGoodsDetailVO {
/**
* 物料编号
*/
@Schema(description = "物料编号")
private String subCode;
/**
* 物料名称
*/
@Schema(description = "物料名称")
private String subName;
/**
* 单套数量
*/
@Schema(description = "单套数量")
private Double singleQuantity;
/**
* 库存数量
*/
@Schema(description = "库存数量")
private Double quantity;
/**
* 占用数量
*/
@Schema(description = "占用数量")
private Double occupyQuantity;
}

@ -23,6 +23,7 @@ import org.springblade.core.tool.utils.Func;
import org.springblade.wms.excel.StGraphiteMoldOutExcel;
import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO;
import org.springblade.wms.pojo.entity.StGraphiteMoldOut;
import org.springblade.wms.pojo.vo.GraphiteStockKitVO;
import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO;
import org.springblade.wms.pojo.vo.StStockInoutRecordVO;
import org.springblade.wms.service.IStGraphiteMoldOutService;
@ -217,6 +218,18 @@ public class StGraphiteMoldOutController extends BladeController {
return R.data(result);
}
/**
* 查询库存和齐套数
*/
@GetMapping("/getStockAndKit")
@ApiOperationSupport(order = 11)
@ApiLog("查询库存和齐套数")
@Operation(summary = "查询库存和齐套数库", description = "传入物料编号和是否石墨模查询")
public R<GraphiteStockKitVO> getStockAndKit(@RequestParam String goodsCode,
@RequestParam Integer isGraphite) {
return R.data(stGraphiteMoldOutService.getStockAndKit(goodsCode, isGraphite));
}
/**
* 导出数据
*/

@ -7,10 +7,12 @@ import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO;
import org.springblade.wms.pojo.entity.StGraphiteMoldOut;
import org.springblade.wms.pojo.vo.GraphiteStockKitVO;
import org.springblade.wms.service.IStBuyOrderService;
import org.springblade.wms.service.IStGoodsExtService;
import org.springblade.wms.service.IStGraphiteMoldOutService;
import org.springblade.wms.service.IStOtherReceiptRecordService;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@ -59,4 +61,10 @@ public class WmsTaskClientImpl implements WmsTaskClient{
public R<List<StGraphiteMoldOut>> generatePreOutOrder(StGraphiteMoldOutDTO dto) {
return R.data(stGraphiteMoldOutService.generatePreOutOrder(dto));
}
@Override
public R<GraphiteStockKitVO> getStockAndKit(@RequestParam String goodsCode,
@RequestParam Integer isGraphite) {
return R.data(stGraphiteMoldOutService.getStockAndKit(goodsCode, isGraphite));
}
}

@ -7,6 +7,7 @@ import org.springblade.core.secure.BladeUser;
import org.springblade.wms.excel.StGraphiteMoldOutExcel;
import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO;
import org.springblade.wms.pojo.entity.StGraphiteMoldOut;
import org.springblade.wms.pojo.vo.GraphiteStockKitVO;
import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO;
import java.util.List;
@ -48,4 +49,6 @@ public interface IStGraphiteMoldOutService extends BaseService<StGraphiteMoldOut
Map<String, Object> batchGeneratePreOutOrder(List<StGraphiteMoldOutDTO> dtoList);
List<StGraphiteMoldOut> batchSubmitOutStock(List<StGraphiteMoldOut> paramList, BladeUser user);
GraphiteStockKitVO getStockAndKit(String goodsCode, Integer isGraphite);
}

@ -20,7 +20,9 @@ import org.springblade.wms.mapper.StRealtimeStockMapper;
import org.springblade.wms.mapper.StStockInoutRecordMapper;
import org.springblade.wms.pojo.dto.StGraphiteMoldOutDTO;
import org.springblade.wms.pojo.entity.*;
import org.springblade.wms.pojo.vo.GraphiteStockKitVO;
import org.springblade.wms.pojo.vo.StGraphiteMoldOutVO;
import org.springblade.wms.pojo.vo.StockKitGoodsDetailVO;
import org.springblade.wms.service.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -409,6 +411,110 @@ public class StGraphiteMoldOutServiceImpl extends BaseServiceImpl<StGraphiteMold
return resultList;
}
@Override
public GraphiteStockKitVO getStockAndKit(String goodsCode, Integer isGraphite) {
if (goodsCode == null) {
throw new ServiceException("石墨模编号不能为空");
}
if (isGraphite == null) {
throw new ServiceException("物料类型不能为空");
}
List<StockKitGoodsDetailVO> goodsDetailList = new ArrayList<>();
if (isGraphite == 1) {
DsPartEntity partOne = partClient.getPart(goodsCode, "1");
List<DsPartRelationEntity> partRelationEntityList = partClient.getSubPart(partOne.getId());
List<DsPartEntity> allChildPartList = new ArrayList<>();
if (!CollectionUtils.isEmpty(partRelationEntityList)) {
// 提取所有非空的childPartId并去重(避免null和重复ID,减少查询压力)
List<Long> childPartIdList = partRelationEntityList.stream()
.map(DsPartRelationEntity::getChildPartId) // 提取子件ID
.filter(Objects::nonNull) // 过滤null的ID
.distinct() // 去重,避免重复查询
.collect(Collectors.toList());
// 批量查询DS_PART表
if (!CollectionUtils.isEmpty(childPartIdList)) {
// 调用dsPartService的批量查询方法(根据ID列表查DS_PART)
allChildPartList = partClient.batchParts(childPartIdList);
}
}
for (DsPartEntity sub : allChildPartList) {
StockKitGoodsDetailVO goodsDetailVO = new StockKitGoodsDetailVO();
String subCode = sub.getPartCode();
DsPartRelationEntity dsPartRelation = stGlassCakeOutMapper.getPartQuota(goodsCode, subCode);
goodsDetailVO.setSubCode(subCode);
goodsDetailVO.setSingleQuantity(dsPartRelation.getQuota());
goodsDetailList.add(goodsDetailVO);
}
} else {
StockKitGoodsDetailVO otherGoodsDetail = new StockKitGoodsDetailVO();
otherGoodsDetail.setSubCode(goodsCode);
otherGoodsDetail.setSingleQuantity(1.0);
goodsDetailList.add(otherGoodsDetail);
}
int maxCanMakeSet = Integer.MAX_VALUE;
for (StockKitGoodsDetailVO item : goodsDetailList) {
// 查询该子件所有可用库存
List<StRealtimeStock> stockList = stRealtimeStockMapper.selectMaxUsableStockByMoldAttr(item.getSubCode());
double totalStock = 0;
double totalOccupy = 0;
double totalUsable = 0;
// 库存非空才计算
if (stockList != null && !stockList.isEmpty()) {
// 总库存
totalStock = stockList.stream()
.mapToDouble(StRealtimeStock::getQuantity)
.sum();
// 总占用
totalOccupy = stockList.stream()
.mapToDouble(s -> Optional.ofNullable(s.getOccupyQuantity()).orElse(0D))
.sum();
// 可用库存
totalUsable = stockList.stream()
.mapToDouble(s -> s.getQuantity() - Optional.ofNullable(s.getOccupyQuantity()).orElse(0D))
.filter(v -> v > 0)
.sum();
}
// 计算可做套数(防止除零)
int subCanMake = 0;
if (item.getSingleQuantity() != null && item.getSingleQuantity() > 0) {
subCanMake = (int) Math.floor(totalUsable / item.getSingleQuantity());
}
// 取最小套数(齐套核心)
maxCanMakeSet = Math.min(maxCanMakeSet, subCanMake);
// 名称(防空指针)
StGoods stGoods = stGoodsService.queryByCode(item.getSubCode());
if (stGoods != null) {
item.setSubName(stGoods.getGoodsName());
}
// 赋值库存
item.setQuantity(totalStock);
item.setOccupyQuantity(totalOccupy);
}
// 最后边界修正:最小为0
maxCanMakeSet = Math.max(maxCanMakeSet, 0);
GraphiteStockKitVO graphiteStockKitVO = new GraphiteStockKitVO();
graphiteStockKitVO.setCompleteQuantity(maxCanMakeSet);
graphiteStockKitVO.setStockKitGoodsDetailList(goodsDetailList);
return graphiteStockKitVO;
}
@Override
public List<StGraphiteMoldOutExcel> exportStGraphiteMoldOut(Wrapper<StGraphiteMoldOut> queryWrapper) {
List<StGraphiteMoldOutExcel> list = baseMapper.exportStGraphiteMoldOut(queryWrapper);

Loading…
Cancel
Save