修改出入库编辑修改库存,盘点更新接口

This commit is contained in:
zjf committed 2025-03-12 17:21:36 +08:00
1 parent 167db6096c
commit 6750e811b1
6 files changed
+298 -5

No files matched your search

@@ -0,0 +1,78 @@
package com.bsd.pjcloud.supermarket.dto.inventoryrecords;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
*
*
* @author zjf
* @date 2025-02-11 17:11:41
*/
@Data
@Schema(description = "盘点-item")
public class PDItemUpdateDTO {
/**
* 库存商品id
*/
@Schema(description="库存商品id")
private Long erpSpuId;
@Schema(description="账面数量")
private Double accountNumber;
@Schema(description="实际数量")
private Double realNumber;
@Schema(description="账面单价")
private Integer unitPrice;
/**
* 数据库意思就是实际单价,这里等价于盘点单价
*/
@Schema(description="盘点单价")
private Integer realPrice;
/**
* 盘盈盘亏
*/
@Schema(description="盈")
private Double profit;
/**
* 盘盈盘亏
*/
@Schema(description="亏")
private Double loss;
@Schema(description="盘后总数")
private Integer totalNumber;
/**
* 累计总金额
*/
@Schema(description="盘后总金额")
private Integer totalAmount;
/**
* 1等于盘盈 2等于盘亏
*/
@Schema(description="订单类型,1入库,2出库")
@NotNull
private String orderType;
/**
* 备注
*/
@Schema(description="备注")
private String remark;
}
@@ -0,0 +1,67 @@
package com.bsd.pjcloud.supermarket.dto.inventoryrecords;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.time.LocalDate;
import java.util.List;
/**
*
* 新增一个采购计划
*/
@Data
@Schema(description = "盘点保存对象")
public class PDUpdateDTO {
@Schema(description="id")
@NotNull
private Long id;
/**
* 采编号
*/
@Schema(description="编号")
private String inventoryCode;
/**
* 采购计划单据日期
*/
@Schema(description="单据日期")
private LocalDate inventoryDate;
/**
* 仓库id
*/
@Schema(description="仓库id")
private String warehouseId;
/**
* 经办人id
*/
@Schema(description="经办人id")
private Long handlerUserId;
/**
* 备注
*/
@Schema(description="备注")
private String remark;
/**
* @Link SmCgPlanSaveItemDTO
*/
@Schema(description="盘点-item")
@NotNull
private List<PDItemUpdateDTO> items;
}
@@ -264,4 +264,14 @@ public class SmErpInventoryRecordsController {
public R getPDById(@PathVariable("id" ) Long id) {
return R.ok(smErpInventoryRecordsService.getPDDetailById(id));
}
@Operation(summary = "修改盘点" , description = "修改盘点" )
@SysLog("修改出入库记录表" )
@PutMapping("updatePD")
@PreAuthorize("@pms.hasPermission('supermarket_smErpInventoryRecords_edit')" )
public R updatePDById(@RequestBody PDUpdateDTO pdfUpdateDTO) {
return R.ok(smErpInventoryRecordsService.updateIPD(pdfUpdateDTO));
}
}
@@ -3,10 +3,7 @@ package com.bsd.pjcloud.supermarket.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryDetailQueryDTO;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordEditDTO;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.PDSaveDTO;
import com.bsd.pjcloud.supermarket.dto.inventoryrecords.*;
import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity;
import java.util.ArrayList;
@@ -93,4 +90,12 @@ public interface SmErpInventoryRecordsService extends IService<SmErpInventoryRec
Object getPDDetailById(Long id);
/**
* 修改盘点
* @param pdfUpdateDTO
* @return
*/
Object updateIPD(PDUpdateDTO pdfUpdateDTO);
}
@@ -341,12 +341,51 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
SmErpInventoryRecordsEntity smErpInventoryRecordsEntity = BeanUtils.toBean(inventoryRecordEditDTO, SmErpInventoryRecordsEntity.class);
int i = baseMapper.updateById(smErpInventoryRecordsEntity);
List<InventoryRecordEditItemDTO> items = inventoryRecordEditDTO.getItems();
List<SmErpInventoryRecordsItemEntity> smErpInventoryRecordsItemEntityList = BeanUtils.toBean(items, SmErpInventoryRecordsItemEntity.class);
List<UpdateStockDTO> updateStockDTOS = new ArrayList<>();
List<SmErpInventoryRecordsItemEntity> smErpInventoryRecordsItemEntityList = new ArrayList<>();
for (InventoryRecordEditItemDTO item : items){
SmErpInventoryRecordsItemEntity smErpInventoryRecordsItemEntity = new SmErpInventoryRecordsItemEntity();
org.springframework.beans.BeanUtils.copyProperties(item,smErpInventoryRecordsItemEntity);
//库存更新对象
UpdateStockDTO updateStockDTO = new UpdateStockDTO();
updateStockDTO.setId(item.getErpSpuId());
Double quantity = item.getQuantity();
String orderType = item.getOrderType();
smErpInventoryRecordsItemEntity.setOrderType(orderType);
if (orderType.equals(OrderTypeEnum.RK.getType())){
updateStockDTO.setIncrCount(quantity);
}else if (orderType.equals(OrderTypeEnum.CK.getType())){
updateStockDTO.setIncrCount(-quantity);
}else {
throw new RuntimeException("订单类型错误");
}
smErpInventoryRecordsItemEntityList.add(smErpInventoryRecordsItemEntity);
updateStockDTOS.add(updateStockDTO);
}
List<SmErpInventoryRecordsItemEntity> insertItems = smErpInventoryRecordsItemEntityList.stream().
filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() == null).collect(Collectors.toList());
List<SmErpInventoryRecordsItemEntity> updateItems = smErpInventoryRecordsItemEntityList.stream().
filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() != null).collect(Collectors.toList());
//更新的话,查询之前保存了哪些item,然后去库存表删掉从新计算库存
List<SmErpInventoryRecordsItemEntity> dataBaseSmErpInventoryRecordsItemEntityList = smErpInventoryRecordsItemMapper
.selectList(new LambdaQueryWrapper<SmErpInventoryRecordsItemEntity>().eq(SmErpInventoryRecordsItemEntity::getInventoryId, inventoryRecordEditDTO.getId()));
//这部分是数据库原本添加的库存数据,需要全部减掉,重新添加更新的库存数据进去
dataBaseSmErpInventoryRecordsItemEntityList.forEach(item -> {
UpdateStockDTO updateStockDTO = new UpdateStockDTO();
updateStockDTO.setId(item.getErpSpuId());
updateStockDTO.setIncrCount(-item.getQuantity());
updateStockDTOS.add(updateStockDTO);
});
smErpInventoryRecordsItemMapper.updateById(updateItems);
smErpInventoryRecordsItemMapper.insert(insertItems);
@@ -370,6 +409,9 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
if (!toDeleteCodeIds.isEmpty()) {
smErpInventoryRecordsItemMapper.deleteByIds(toDeleteCodeIds);
}
//todo 实际上应该审批后才会入库
//更新库存
smErpStockService.updateStock(updateStockDTOS);
return i;
}
@@ -395,6 +437,7 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
}
@Override
@Transactional
public Object savePD(PDSaveDTO pdSaveDTO) {
Long deptId = SecurityUtils.getUser().getDeptId();
SmErpInventoryRecordsEntity smErpCgDdEntity = BeanUtils.toBean(pdSaveDTO, SmErpInventoryRecordsEntity.class);
@@ -475,5 +518,89 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
}
@Override
@Transactional
public Object updateIPD(PDUpdateDTO pdfUpdateDTO) {
SmErpInventoryRecordsEntity smErpInventoryRecordsEntity = BeanUtils.toBean(pdfUpdateDTO, SmErpInventoryRecordsEntity.class);
int i = baseMapper.updateById(smErpInventoryRecordsEntity);
List<PDItemUpdateDTO> items = pdfUpdateDTO.getItems();
List<UpdateStockDTO> updateStockDTOS = new ArrayList<>();
List<SmErpInventoryRecordsItemEntity> smErpInventoryRecordsItemEntityList = new ArrayList<>();
for (PDItemUpdateDTO item : items){
//库存更新对象
UpdateStockDTO updateStockDTO = new UpdateStockDTO();
updateStockDTO.setId(item.getErpSpuId());
//出入库对象
SmErpInventoryRecordsItemEntity smErpInventoryRecordsItemEntity = new SmErpInventoryRecordsItemEntity();
org.springframework.beans.BeanUtils.copyProperties(item,smErpInventoryRecordsItemEntity);
String orderType = item.getOrderType();
smErpInventoryRecordsItemEntity.setOrderType(orderType);
if (orderType.equals(OrderTypeEnum.RK.getType())){
Double profit = item.getProfit();
updateStockDTO.setIncrCount(profit);
smErpInventoryRecordsItemEntity.setQuantity(profit);
}else if (orderType.equals(OrderTypeEnum.CK.getType())){
Double loss = item.getLoss();
updateStockDTO.setIncrCount(loss);
smErpInventoryRecordsItemEntity.setQuantity(loss);
}else {
throw new RuntimeException("订单类型错误");
}
smErpInventoryRecordsItemEntityList.add(smErpInventoryRecordsItemEntity);
updateStockDTOS.add(updateStockDTO);
}
List<SmErpInventoryRecordsItemEntity> insertItems = smErpInventoryRecordsItemEntityList.stream().
filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() == null).collect(Collectors.toList());
List<SmErpInventoryRecordsItemEntity> updateItems = smErpInventoryRecordsItemEntityList.stream().
filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() != null).collect(Collectors.toList());
//更新的话,查询之前保存了哪些item,然后减去之前出入的库存。从新计算库存
List<SmErpInventoryRecordsItemEntity> dataBaseSmErpInventoryRecordsItemEntityList = smErpInventoryRecordsItemMapper
.selectList(new LambdaQueryWrapper<SmErpInventoryRecordsItemEntity>().eq(SmErpInventoryRecordsItemEntity::getInventoryId, pdfUpdateDTO.getId()));
//这部分是数据库原本添加的库存数据,需要全部减掉,重新添加更新的库存数据进去
dataBaseSmErpInventoryRecordsItemEntityList.forEach(item -> {
UpdateStockDTO updateStockDTO = new UpdateStockDTO();
updateStockDTO.setId(item.getErpSpuId());
updateStockDTO.setIncrCount(-item.getQuantity());
updateStockDTOS.add(updateStockDTO);
});
smErpInventoryRecordsItemMapper.updateById(updateItems);
smErpInventoryRecordsItemMapper.insert(insertItems);
List<Long> existingCodeIds = smErpInventoryRecordsItemMapper.selectList(
new LambdaQueryWrapper<SmErpInventoryRecordsItemEntity>()
.eq(SmErpInventoryRecordsItemEntity::getInventoryId, smErpInventoryRecordsEntity.getId())
).stream().map(SmErpInventoryRecordsItemEntity::getId).collect(Collectors.toList());
// 收集本次提交的ID(排除新增的)
List<Long> submittedCodeIds = updateItems.stream()
.map(SmErpInventoryRecordsItemEntity::getId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
// 计算需要删除的ID
List<Long> toDeleteCodeIds = existingCodeIds.stream()
.filter(id -> !submittedCodeIds.contains(id))
.collect(Collectors.toList());
// 批量删除失效条码
if (!toDeleteCodeIds.isEmpty()) {
smErpInventoryRecordsItemMapper.deleteByIds(toDeleteCodeIds);
}
//todo 实际上应该审批后才会入库
//更新库存
smErpStockService.updateStock(updateStockDTOS);
return i;
}
}
@@ -96,6 +96,12 @@ public class SmErpSpuServiceImpl extends ServiceImpl<SmErpSpuMapper, SmErpSpuEnt
@Override
@Transactional
public R saveSpu(SmErpSpuEntity supermarketSpu) {
//查询货号是否存在
if (baseMapper.selectOne(new LambdaQueryWrapper<SmErpSpuEntity>().eq(SmErpSpuEntity::getProductCode, supermarketSpu.getProductCode())) != null) {
return R.failed("货号为" + supermarketSpu.getProductCode() + "的货号已存在");
}
baseMapper.insert(supermarketSpu);
//库存表