This commit is contained in:
熟小柿 2025-07-29 10:56:44 +08:00
parent 5cb28944f3
commit 3f31859e45
12 changed files with 132 additions and 117 deletions

View File

@ -8,7 +8,7 @@ spring:
master:
url: jdbc:mysql://localhost:3306/wms_chongqing_kafu?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
password: 21#nS@NjJK20
# 从库数据源
slave:
# 从数据源开关/默认关闭

View File

@ -56,6 +56,7 @@ spring:
basename: i18n/messages
profiles:
active: druid
# active: test
# 文件上传
servlet:
multipart:

View File

@ -5,14 +5,12 @@ import com.wms.basic.domain.TbArticle;
import com.wms.basic.domain.TbArticleExt;
import com.wms.basic.domain.result.BasicArticle;
import com.wms.basic.mapper.TbArticleMapper;
import com.wms.basic.service.ITbArticleExtService;
import com.wms.basic.service.ITbArticleService;
import com.wms.common.annotation.Log;
import com.wms.common.core.controller.BaseController;
import com.wms.common.core.domain.AjaxResult;
import com.wms.common.core.page.TableDataInfo;
import com.wms.common.enums.BusinessType;
import com.wms.common.utils.DateUtils;
import com.wms.common.utils.StringUtils;
import com.wms.common.utils.poi.ExcelUtil;
import io.swagger.annotations.Api;
@ -23,10 +21,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
@ -43,8 +39,7 @@ public class TbArticleController extends BaseController {
private final ITbArticleService tbArticleService;
private final TbArticleMapper articleMapper;
@Resource
private ITbArticleExtService articleExtService;
/**
* 查询商品档案列表
@ -105,17 +100,7 @@ public class TbArticleController extends BaseController {
@PreAuthorize("@ss.hasPermi('basic:article:query')")
@GetMapping(value = "/{articleId}")
public AjaxResult getInfo(@ApiParam(value = "主键", required = true) @PathVariable("articleId") String articleId) {
final TbArticle tbArticle = tbArticleService.getById(articleId);
final TbArticleExt articleExt = articleExtService.getById(articleId);
tbArticle.setData1(articleExt.getData1());
tbArticle.setData2(articleExt.getData2());
tbArticle.setData3(articleExt.getData3());
tbArticle.setData4(articleExt.getData4());
tbArticle.setData5(articleExt.getData5());
tbArticle.setData6(articleExt.getData6());
tbArticle.setData7(articleExt.getData7());
tbArticle.setData8(articleExt.getData8());
return AjaxResult.success(tbArticle);
return AjaxResult.success(tbArticleService.getById(articleId));
}
/**
@ -126,18 +111,6 @@ public class TbArticleController extends BaseController {
@Log(title = "商品档案", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody TbArticle tbArticle) {
final TbArticleExt articleExt = TbArticleExt.builder().articleId(tbArticle.getArticleId())
.data1(tbArticle.getData1())
.data2(tbArticle.getData2())
.data3(tbArticle.getData3())
.data4(tbArticle.getData4())
.data5(tbArticle.getData5())
.data6(tbArticle.getData6())
.data7(tbArticle.getData7())
.data8(tbArticle.getData8())
.data9(DateUtils.getNowDate())
.build();
articleExtService.save(articleExt);
return toAjax(tbArticleService.save(tbArticle));
}

View File

@ -18,7 +18,7 @@ import java.util.Date;
/**
* 商品档案对象 tb_basic_article
*
*
* @author zf
* @date 2024-01-10
*/
@ -52,20 +52,12 @@ public class TbArticle extends BaseEntityPlus implements Serializable{
@Excel(name = "备注")
private String remark;
/** 计量单位 */
@ApiModelProperty("计量单位")
@TableField(exist = false)
private String data1;
/** 物料分组 */
@ApiModelProperty("物料分组")
@TableField(exist = false)
private String data2;
/** 规格 */
@ApiModelProperty("规格")
@TableField(exist = false)
private String data3;
/** 物料类型 */
@ApiModelProperty("物料类型")
@ -77,20 +69,5 @@ public class TbArticle extends BaseEntityPlus implements Serializable{
@TableField(exist = false)
private String data5;
/** 安全库存 */
@ApiModelProperty("安全库存")
@TableField(exist = false)
private BigDecimal data6;
/** 包装单位 */
@ApiModelProperty("包装单位")
@TableField(exist = false)
private String data7;
/** 包装容量 */
@ApiModelProperty("包装容量")
@TableField(exist = false)
private BigDecimal data8;
}

View File

@ -19,7 +19,7 @@ import java.util.Date;
/**
* 物料扩展对象 tb_basic_article_ext
*
*
* @author wms
* @date 2024-01-10
*/

View File

@ -126,7 +126,7 @@ public class TbDeliveryDetail extends BaseEntityPlus implements Serializable{
/** 拣选状态::10-待拣, 20-已检 */
@ApiModelProperty("拣选状态::10-待拣, 20-已检")
@Excel(name = "拣选状态::10-待拣, 20-已检")
private String data4 = "10";
private String data4;
/** 标识::0-未下发, 10-已下发 */
@ApiModelProperty("标识::0-未下发, 10-已下发")

View File

@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.wms.basic.domain.TbArticle;
import com.wms.basic.domain.TbArticleExt;
import com.wms.basic.domain.TbLabelCode;
import com.wms.basic.domain.TbSku;
import com.wms.basic.domain.vo.TbArticleVo;
import com.wms.basic.mapper.TbArticleExtMapper;
import com.wms.basic.mapper.TbArticleMapper;
import com.wms.basic.mapper.TbLabelCodeMapper;
import com.wms.basic.mapper.TbSkuMapper;
@ -18,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -36,6 +39,9 @@ public class TbArticleServiceImpl extends ServiceImpl<TbArticleMapper, TbArticle
@Resource
private TbLabelCodeMapper tbLabelCodeMapper;
@Resource
private TbArticleExtMapper tbArticleExtMapper;
/**
* 获取物料下拉框(取10条,防止卡死)
@ -80,11 +86,18 @@ public class TbArticleServiceImpl extends ServiceImpl<TbArticleMapper, TbArticle
*/
@Override
public AjaxResult getSpecSelect(String articleId) {
List<TbLabelCode> tbLabelCodes = tbLabelCodeMapper.selectList(Wrappers.<TbLabelCode>lambdaQuery().eq(TbLabelCode::getData2, articleId));
List<String> specList = tbLabelCodes.stream()
.map(TbLabelCode::getData5)
.distinct()
.collect(Collectors.toList());
List<String> specList = new ArrayList<>();
TbArticleExt tbArticleExt = tbArticleExtMapper.selectById(articleId);
String data4 = tbArticleExt.getData4();
if ("成品".equals(data4)){
specList.add(tbArticleExt.getData3());
} else {
List<TbLabelCode> tbLabelCodes = tbLabelCodeMapper.selectList(Wrappers.<TbLabelCode>lambdaQuery().eq(TbLabelCode::getData2, articleId));
specList = tbLabelCodes.stream()
.map(TbLabelCode::getData5)
.distinct()
.collect(Collectors.toList());
}
return AjaxResult.success(specList);
}
}

View File

@ -56,54 +56,59 @@ public class TbWarehouseStockServiceImpl extends MPJBaseServiceImpl<TbWarehouseS
*/
@Override
public List<TbWarehouseStockVo> getStockList(TbWarehouseStock tbWarehouseStock) {
//和Mybatis plus一致MPJLambdaWrapper的泛型必须是主表的泛型并且要用主表的Mapper来调用
MPJLambdaWrapper<TbWarehouseStock> wrapper = new MPJLambdaWrapper<TbWarehouseStock>()
//查询主表全部字段
.selectAll(TbWarehouseStock.class)
//查询外表字段
.select(TbArticle::getArticleName)
.select(TbArticle::getArticleId)
.select(TbArticleExt::getData1)
.select(TbArticleExt::getData7)
.select(TbWarehouse::getDisplayName)
.select(TbSku::getBatch)
//别名
.selectAs(TbLabelCode::getData5, TbWarehouseStockVo::getSpec)
.selectAs(TbArticle::getArticleName, TbWarehouseStockVo::getArticleName)
.selectAs(TbArticleExt::getData1, TbWarehouseStockVo::getUnit)
.selectAs(TbArticleExt::getData7, TbWarehouseStockVo::getPackagingUnit)
.selectAs(TbWarehouse::getDisplayName, TbWarehouseStockVo::getWarehouseName)
.leftJoin(TbSku.class, TbSku::getSku, TbWarehouseStock::getSku)
.leftJoin(TbArticle.class, TbArticle::getArticleId, TbSku::getArticleId)
.leftJoin(TbArticleExt.class, TbArticleExt::getArticleId, TbSku::getArticleId)
.leftJoin(TbWarehouse.class, TbWarehouse::getWarehouseId, TbWarehouseStock::getWarehouseId)
.leftJoin(TbLabelCode.class, TbLabelCode::getLabelCodeId, TbWarehouseStock::getData7)
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getWarehouseId()), TbWarehouseStock::getWarehouseId, tbWarehouseStock.getWarehouseId())
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsExpired()), TbWarehouseStock::getIsExpired, tbWarehouseStock.getIsExpired())
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsTemporary()), TbWarehouseStock::getIsTemporary, tbWarehouseStock.getIsTemporary())
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsSluggish()), TbWarehouseStock::getIsSluggish, tbWarehouseStock.getIsSluggish())
.like(StringUtils.isNotEmpty(tbWarehouseStock.getArticleId()), TbArticle::getArticleId, tbWarehouseStock.getArticleId())
.and(StringUtils.isNotEmpty(tbWarehouseStock.getSku()),
MPJLambdaWrapper -> MPJLambdaWrapper.like(TbWarehouseStock::getSku, tbWarehouseStock.getSku())
.or().like(TbArticle::getArticleName, tbWarehouseStock.getSku())
.or().like(TbArticle::getArticleId, tbWarehouseStock.getSku()))
.like(StringUtils.isNotEmpty(tbWarehouseStock.getContainer()), TbWarehouseStock::getContainer, tbWarehouseStock.getContainer())
.like(StringUtils.isNotEmpty(tbWarehouseStock.getEntryNo()), TbWarehouseStock::getEntryNo, tbWarehouseStock.getEntryNo())
.like(StringUtils.isNotEmpty(tbWarehouseStock.getDeliveryNo()), TbWarehouseStock::getDeliveryNo, tbWarehouseStock.getDeliveryNo())
// CASE WHEN 使用 aliasext lc
.select("CASE WHEN ext.data4 = '成品' THEN ext.data3 ELSE lc.data5 END AS spec")
.selectAs(TbArticle::getArticleName, TbWarehouseStockVo::getArticleName)
.selectAs(TbArticleExt::getData1, TbWarehouseStockVo::getUnit)
.selectAs(TbArticleExt::getData7, TbWarehouseStockVo::getPackagingUnit)
.selectAs(TbWarehouse::getDisplayName, TbWarehouseStockVo::getWarehouseName)
// 使用带 alias join
.leftJoin(TbSku.class, TbSku::getSku, TbWarehouseStock::getSku)
.leftJoin(TbArticle.class, TbArticle::getArticleId, TbSku::getArticleId)
.leftJoin(TbArticleExt.class, "ext", TbArticleExt::getArticleId, TbSku::getArticleId)
.leftJoin(TbLabelCode.class, "lc", TbLabelCode::getLabelCodeId, TbWarehouseStock::getData7)
.leftJoin(TbWarehouse.class, TbWarehouse::getWarehouseId, TbWarehouseStock::getWarehouseId)
// dynamic where
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getWarehouseId()), TbWarehouseStock::getWarehouseId, tbWarehouseStock.getWarehouseId())
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsExpired()), TbWarehouseStock::getIsExpired, tbWarehouseStock.getIsExpired())
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsTemporary()), TbWarehouseStock::getIsTemporary, tbWarehouseStock.getIsTemporary())
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getIsSluggish()), TbWarehouseStock::getIsSluggish, tbWarehouseStock.getIsSluggish())
.like(StringUtils.isNotEmpty(tbWarehouseStock.getArticleId()), TbArticle::getArticleId, tbWarehouseStock.getArticleId())
.and(StringUtils.isNotEmpty(tbWarehouseStock.getSku()), wrapper2 -> wrapper2
.like(TbWarehouseStock::getSku, tbWarehouseStock.getSku())
.or().like(TbArticle::getArticleName, tbWarehouseStock.getSku())
.or().like(TbArticle::getArticleId, tbWarehouseStock.getSku())
)
.like(StringUtils.isNotEmpty(tbWarehouseStock.getContainer()), TbWarehouseStock::getContainer, tbWarehouseStock.getContainer())
.like(StringUtils.isNotEmpty(tbWarehouseStock.getEntryNo()), TbWarehouseStock::getEntryNo, tbWarehouseStock.getEntryNo())
.like(StringUtils.isNotEmpty(tbWarehouseStock.getDeliveryNo()), TbWarehouseStock::getDeliveryNo, tbWarehouseStock.getDeliveryNo())
.like(StringUtils.isNotEmpty(tbWarehouseStock.getStorageBinId()), TbWarehouseStock::getStorageBinId, tbWarehouseStock.getStorageBinId())
.like(StringUtils.isNotEmpty(tbWarehouseStock.getContainer()), TbWarehouseStock::getContainer, tbWarehouseStock.getContainer())
.like(StringUtils.isNotEmpty(tbWarehouseStock.getSpec()), TbLabelCode::getData5, tbWarehouseStock.getSpec())
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getStockStatus()), TbWarehouseStock::getStockStatus, tbWarehouseStock.getStockStatus())
.eq(Objects.nonNull(tbWarehouseStock.getPriority()), TbWarehouseStock::getPriority, tbWarehouseStock.getPriority());
.and(StringUtils.isNotEmpty(tbWarehouseStock.getSpec()), wrapper2 -> wrapper2.like(TbLabelCode::getData5,tbWarehouseStock.getSpec())
.or().like(TbArticleExt::getData3,tbWarehouseStock.getSpec()))
.eq(StringUtils.isNotEmpty(tbWarehouseStock.getStockStatus()), TbWarehouseStock::getStockStatus, tbWarehouseStock.getStockStatus())
.eq(Objects.nonNull(tbWarehouseStock.getPriority()), TbWarehouseStock::getPriority, tbWarehouseStock.getPriority());
if (Objects.nonNull(tbWarehouseStock.getParams())) {
wrapper.ge(Objects.nonNull(tbWarehouseStock.getParams().get("beginTime")), TbWarehouseStock::getCreateTime, tbWarehouseStock.getParams().get("beginTime"));
wrapper.le(Objects.nonNull(tbWarehouseStock.getParams().get("endTime")), TbWarehouseStock::getCreateTime, tbWarehouseStock.getParams().get("endTime"));
wrapper.ge(tbWarehouseStock.getParams().get("beginTime") != null,
TbWarehouseStock::getCreateTime,
tbWarehouseStock.getParams().get("beginTime"));
wrapper.le(tbWarehouseStock.getParams().get("endTime") != null,
TbWarehouseStock::getCreateTime,
tbWarehouseStock.getParams().get("endTime"));
}
//连表查询
return this.selectJoinList(TbWarehouseStockVo.class, wrapper);
}
@Override
public List<TbWarehouseStock> articleNumStatistics(String curDate, String oneMonth) {
return this.baseMapper.articleNumStatistics(curDate, oneMonth);
@ -212,6 +217,11 @@ public class TbWarehouseStockServiceImpl extends MPJBaseServiceImpl<TbWarehouseS
*/
@Override
public AjaxResult frozen(String articleId, String spec) {
TbArticleExt tbArticleExt = articleExtMapper.selectById(articleId);
if ("成品".equals(tbArticleExt.getData4())){
return AjaxResult.error("只能冻结原材料");
}
List<TbLabelCode> tbLabelCodes = tbLabelCodeMapper.selectList(Wrappers.<TbLabelCode>lambdaQuery()
.eq(TbLabelCode::getData2, articleId)
.eq(TbLabelCode::getData5, spec)
@ -222,10 +232,14 @@ public class TbWarehouseStockServiceImpl extends MPJBaseServiceImpl<TbWarehouseS
.in(TbWarehouseStock::getData7, labelCodeIds)
);
// 全正常库存
boolean allNormal = tbWarehouseStocks.stream().allMatch(tbWarehouseStock -> EnumStockStatus.NORMAL.getCode().equals(tbWarehouseStock.getStockStatus()));
boolean allNormal = tbWarehouseStocks.stream()
.allMatch(tbWarehouseStock -> EnumStockStatus.NORMAL.getCode()
.equals(tbWarehouseStock.getStockStatus()));
// 全冻结库存
boolean allFreeze = tbWarehouseStocks.stream().allMatch(tbWarehouseStock -> EnumStockStatus.FREEZE.getCode().equals(tbWarehouseStock.getStockStatus()));
boolean allFreeze = tbWarehouseStocks.stream()
.allMatch(tbWarehouseStock -> EnumStockStatus.FREEZE.getCode()
.equals(tbWarehouseStock.getStockStatus()));
String stockStatus = "";
if (allNormal){

View File

@ -4,14 +4,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.wms.basic.domain.*;
import com.wms.basic.domain.vo.BasicSkuInfoVo;
import com.wms.basic.mapper.*;
import com.wms.basic.service.ITbContainerService;
import com.wms.basic.service.ITbSkuService;
import com.wms.basic.service.ITbWarehouseStockLogService;
import com.wms.basic.utils.ParameterValidationUtils;
import com.wms.common.core.domain.AjaxResult;
import com.wms.common.enums.basic.EnumInUsing;
import com.wms.common.enums.basic.EnumLock;
import com.wms.common.enums.basic.EnumSceneMode;
import com.wms.common.enums.basic.EnumSceneType;
import com.wms.common.enums.basic.*;
import com.wms.common.enums.basic.delivery.EnumDeliveryType;
import com.wms.common.enums.basic.delivery.detail.EnumDeliveryDetailCarryStatus;
import com.wms.common.enums.basic.stock.EnumStockStatus;
@ -92,6 +90,9 @@ public class PdaPickingServiceImpl implements IPdaPickingService {
@Resource
private TbDeliveryMapper tbDeliveryMapper;
@Resource
private ITbContainerService containerService;
/**
* 拣货详情
*
@ -138,6 +139,7 @@ public class PdaPickingServiceImpl implements IPdaPickingService {
*/
@Override
public AjaxResult pickingConfirm(String deliveryDetailId) {
//2025-2-15 变动
TbDeliveryDetail tbDeliveryDetail = tbDeliveryDetailMapper.selectById(deliveryDetailId);
TbDelivery tbDelivery = tbDeliveryMapper.selectById(tbDeliveryDetail.getDeliveryNo());
if (EnumPickingStatus.B.getCode().equals(tbDeliveryDetail.getData4())){
@ -153,29 +155,37 @@ public class PdaPickingServiceImpl implements IPdaPickingService {
// 更新出库单数量表的已出库数量
Integer numId = tbDeliveryDetail.getNumId();
TbDeliveryNumber tbDeliveryNumber = tbDeliveryNumberMapper.selectById(numId);
BigDecimal alreadyOutNum = tbDeliveryNumber.getAlreadyOutNum();
BigDecimal actualPickNum = tbDeliveryDetail.getData7();
alreadyOutNum = alreadyOutNum.add(actualPickNum);
tbDeliveryNumberMapper.update(
new TbDeliveryNumber(), Wrappers.<TbDeliveryNumber>lambdaUpdate()
.set(TbDeliveryNumber::getAlreadyOutNum, alreadyOutNum)
.eq(TbDeliveryNumber::getNumId, numId)
);
String container = tbDeliveryDetail.getContainer();
// BigDecimal alreadyOutNum = tbDeliveryNumber.getAlreadyOutNum();
// BigDecimal actualPickNum = tbDeliveryDetail.getData7();
// alreadyOutNum = alreadyOutNum.add(actualPickNum);
// tbDeliveryNumberMapper.update(
// new TbDeliveryNumber(), Wrappers.<TbDeliveryNumber>lambdaUpdate()
// .set(TbDeliveryNumber::getAlreadyOutNum, alreadyOutNum)
// .eq(TbDeliveryNumber::getNumId, numId)
// );
// 更新或删除 库存
TbWarehouseStock tbWarehouseStock = tbWarehouseStockMapper.selectById(tbDeliveryDetail.getSequenceNo());
if (tbDeliveryDetail.getDetailOutNum().compareTo(tbDeliveryDetail.getData7()) == 0){
// 实发和实拣数量相同,删除库存,添加库存日志
// 出库数量和实拣数量相同,删除库存,添加库存日志容器空闲
tbWarehouseStockMapper.deleteById(tbWarehouseStock.getSequenceNo());
tbWarehouseStockLogService.addStockLog(tbWarehouseStock, EnumStockLogBizType.A.getCode(), EnumDeliveryType.getValue(tbDelivery.getDeliveryType()), tbWarehouseStock.getStockNum().negate(), tbDeliveryDetail.getDeliveryNo());
// 更新明细拣货状态为无需回库
// 更新明细拣货状态为无需回库,搬运状态为已拣
tbDeliveryDetailMapper.update(
new TbDeliveryDetail(), Wrappers.<TbDeliveryDetail>lambdaUpdate()
.set(TbDeliveryDetail::getData4, EnumPickingStatus.D.getCode())
.set(TbDeliveryDetail::getDetailCarryStatus, EnumDeliveryDetailCarryStatus.E.getCode())
.eq(TbDeliveryDetail::getDeliveryDetailId, deliveryDetailId)
);
//修改料箱容器状态
containerService.update(new TbContainer(), Wrappers.<TbContainer>lambdaUpdate().eq(TbContainer::getContainer, container).set(TbContainer::getContainerStatus, EnumContainerStatus.EMPTY.getCode()));
} else if (tbDeliveryDetail.getDetailOutNum().compareTo(tbDeliveryDetail.getData7()) > 0){
// 实发小于实拣数量,更新库存,添加库存日志
// 出库数量大于实拣数量容器存储
// 更新库存,添加库存日志剩余库存数为出库数减实拣数
tbWarehouseStockMapper.update(
new TbWarehouseStock(), Wrappers.<TbWarehouseStock>lambdaUpdate()
.set(TbWarehouseStock::getStockNum, tbDeliveryDetail.getDetailOutNum().subtract(tbDeliveryDetail.getReceiveQty()))
@ -184,9 +194,24 @@ public class PdaPickingServiceImpl implements IPdaPickingService {
);
tbWarehouseStockLogService.addStockLog(tbWarehouseStock, EnumStockLogBizType.A.getCode(), EnumDeliveryType.getValue(tbDelivery.getDeliveryType()), tbDeliveryDetail.getReceiveQty().negate(), tbDeliveryDetail.getDeliveryNo());
// 打印标签
// 打印标签
pdaPrintService.printLabels(tbDeliveryDetail.getDetailOutNum().subtract(tbDeliveryDetail.getData7()), tbWarehouseStock);
}
//更新出库单数量
List<TbDeliveryDetail> tbDeliveryDetails = tbDeliveryDetailMapper.
selectList(Wrappers.<TbDeliveryDetail>lambdaQuery()
.eq(TbDeliveryDetail::getNumId,numId ));
BigDecimal alreadyOutNum = BigDecimal.ZERO;
for (TbDeliveryDetail tbDeliveryDetail1 : tbDeliveryDetails) {
alreadyOutNum = alreadyOutNum.add(tbDeliveryDetail1.getReceiveQty());
}
tbDeliveryNumberMapper.update(
new TbDeliveryNumber(), Wrappers.<TbDeliveryNumber>lambdaUpdate()
.set(TbDeliveryNumber::getAlreadyOutNum, alreadyOutNum)
.eq(TbDeliveryNumber::getNumId, numId)
);
return AjaxResult.success();
}
@ -200,6 +225,7 @@ public class PdaPickingServiceImpl implements IPdaPickingService {
*/
@Override
public AjaxResult reportProfitAndLoss(String deliveryDetailId, String type, BigDecimal number) {
//2025-2-15 变动
TbDeliveryDetail tbDeliveryDetail = tbDeliveryDetailMapper.selectById(deliveryDetailId);
String sequenceNo = tbDeliveryDetail.getSequenceNo();
TbWarehouseStock tbWarehouseStock = tbWarehouseStockMapper.selectById(sequenceNo);
@ -225,16 +251,23 @@ public class PdaPickingServiceImpl implements IPdaPickingService {
.set(TbWarehouseStock::getStockNum, physicalInventory)
.eq(TbWarehouseStock::getSequenceNo, sequenceNo)
);
BigDecimal receiveQty = tbDeliveryDetail.getReceiveQty();
if (physicalInventory.compareTo(receiveQty) < 0){
receiveQty = physicalInventory;
}
tbDeliveryDetailMapper.update(
new TbDeliveryDetail(), Wrappers.<TbDeliveryDetail>lambdaUpdate()
.set(TbDeliveryDetail::getDetailOutNum, physicalInventory)
.eq(TbDeliveryDetail::getDeliveryDetailId, deliveryDetailId)
);
BigDecimal receiveQty = tbDeliveryDetail.getReceiveQty();
if (physicalInventory.compareTo(receiveQty) < 0){
receiveQty = physicalInventory;
tbDeliveryDetailMapper.update(
new TbDeliveryDetail(), Wrappers.<TbDeliveryDetail>lambdaUpdate()
.set(TbDeliveryDetail::getReceiveQty, physicalInventory)
.set(TbDeliveryDetail::getData7, receiveQty)
.eq(TbDeliveryDetail::getDeliveryDetailId, deliveryDetailId)
);
}
tbErpStockDifference.setBreakeven("2");
}
// 插入差异表数据

View File

@ -253,8 +253,12 @@ public class TbThirdPartyOpenServiceImpl implements ITbThirdPartyOpenService {
);
// 添加库存日志
TbEntry tbEntry = tbEntryMapper.selectById(tbThirdPartyCarryTask.getBizNo());
String taskType = "多余退库";
if (Objects.nonNull(tbEntry)){
taskType = EnumEntryType.getValue(tbEntry.getEntryType());
}
TbWarehouseStock tbWarehouseStock = tbWarehouseStockMapper.selectById(tbThirdPartyCarryTaskDetail.getSequenceNo());
tbWarehouseStockLogService.addStockLog(tbWarehouseStock, EnumStockLogBizType.B.getCode(), EnumEntryType.getValue(tbEntry.getEntryType()), tbWarehouseStock.getStockNum(), tbThirdPartyCarryTask.getBizNo());
tbWarehouseStockLogService.addStockLog(tbWarehouseStock, EnumStockLogBizType.B.getCode(), taskType, tbWarehouseStock.getStockNum(), tbThirdPartyCarryTask.getBizNo());
//如果是退料入库 调用关闭入库单接口
if (EnumCarryTaskBizType.IN_STORAGE_A.getCode().equals(tbThirdPartyCarryTask.getBizType())){
erpService.entryClose(tbThirdPartyCarryTask.getBizNo());