完成仓库调拨单功能。
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package com.niuan.erp.common.base;
|
package com.niuan.erp.common.base;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
||||||
public record BaseApproveAndRejectDto(
|
public record BaseApproveAndRejectDto(
|
||||||
|
@NotNull(message = "validation.common.id.notNull")
|
||||||
Long id
|
Long id
|
||||||
) {}
|
) {}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import java.math.BigDecimal;
|
|||||||
@Setter
|
@Setter
|
||||||
@ToString
|
@ToString
|
||||||
@TableName("purchaseplandetails")
|
@TableName("purchaseplandetails")
|
||||||
public class PurchasePlanItem implements Serializable {
|
public class PurchasePlanItem implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
|||||||
@@ -3,19 +3,19 @@ package com.niuan.erp.module.warehouse.controller;
|
|||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.niuan.erp.common.annotation.ApiLog;
|
import com.niuan.erp.common.annotation.ApiLog;
|
||||||
import com.niuan.erp.common.annotation.ModuleLog;
|
import com.niuan.erp.common.annotation.ModuleLog;
|
||||||
|
import com.niuan.erp.common.base.BaseApproveAndRejectDto;
|
||||||
import com.niuan.erp.common.base.BaseDeleteBody;
|
import com.niuan.erp.common.base.BaseDeleteBody;
|
||||||
import com.niuan.erp.common.base.BasePageReqParams;
|
import com.niuan.erp.common.base.BasePageReqParams;
|
||||||
import com.niuan.erp.common.base.BaseResult;
|
import com.niuan.erp.common.base.BaseResult;
|
||||||
import com.niuan.erp.common.base.CommonValidateGroup.*;
|
import com.niuan.erp.common.base.CommonValidateGroup.*;
|
||||||
import com.niuan.erp.common.base.OperationType;
|
import com.niuan.erp.common.base.OperationType;
|
||||||
|
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderAddDto;
|
||||||
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderDto;
|
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderDto;
|
||||||
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemDto;
|
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderItemDto;
|
||||||
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderSearchParams;
|
import com.niuan.erp.module.warehouse.controller.dto.StockTransferOrderSearchParams;
|
||||||
import com.niuan.erp.module.warehouse.service.StockTransferOrderService;
|
import com.niuan.erp.module.warehouse.service.StockTransferOrderService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.validation.constraints.NotNull;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@@ -40,11 +40,20 @@ public class StockTransferOrderController {
|
|||||||
return BaseResult.successWithData(stockTransferOrderService.getStockTransferOrderPage(pageParams, searchParams));
|
return BaseResult.successWithData(stockTransferOrderService.getStockTransferOrderPage(pageParams, searchParams));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiLog(type = OperationType.ADD, remark = "新增一条StockTransferOrder记录")
|
||||||
|
@Operation(summary = "新增StockTransferOrder", operationId = "addStockTransferOrder")
|
||||||
|
@PostMapping("/addStockTransferOrder")
|
||||||
|
@PreAuthorize("hasAuthority('stock_transfer_order:add')")
|
||||||
|
public BaseResult<?> addStockTransferOrder(@Validated(Add.class) @RequestBody StockTransferOrderAddDto dto) {
|
||||||
|
stockTransferOrderService.addStockTransferOrder(dto);
|
||||||
|
return BaseResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
@ApiLog(type = OperationType.UPDATE, remark = "更新一条StockTransferOrder记录")
|
@ApiLog(type = OperationType.UPDATE, remark = "更新一条StockTransferOrder记录")
|
||||||
@Operation(summary = "更新StockTransferOrder", operationId = "updateStockTransferOrder")
|
@Operation(summary = "更新StockTransferOrder", operationId = "updateStockTransferOrder")
|
||||||
@PostMapping("/updateStockTransferOrder")
|
@PostMapping("/updateStockTransferOrder")
|
||||||
@PreAuthorize("hasAuthority('stock_transfer_order:update')")
|
@PreAuthorize("hasAuthority('stock_transfer_order:update')")
|
||||||
public BaseResult<?> updateStockTransferOrder(@Validated(Update.class) @RequestBody StockTransferOrderDto dto) {
|
public BaseResult<?> updateStockTransferOrder(@Validated(Update.class) @RequestBody StockTransferOrderAddDto dto) {
|
||||||
stockTransferOrderService.updateStockTransferOrder(dto);
|
stockTransferOrderService.updateStockTransferOrder(dto);
|
||||||
return BaseResult.success();
|
return BaseResult.success();
|
||||||
}
|
}
|
||||||
@@ -71,19 +80,17 @@ public class StockTransferOrderController {
|
|||||||
@Operation(summary = "审核StockTransferOrder", operationId = "approveStockTransferOrder")
|
@Operation(summary = "审核StockTransferOrder", operationId = "approveStockTransferOrder")
|
||||||
@PostMapping("/approveStockTransferOrder")
|
@PostMapping("/approveStockTransferOrder")
|
||||||
@PreAuthorize("hasAuthority('stock_transfer_order:approve')")
|
@PreAuthorize("hasAuthority('stock_transfer_order:approve')")
|
||||||
public BaseResult<?> approveStockTransferOrder(
|
public BaseResult<?> approveStockTransferOrder(@Validated @RequestBody BaseApproveAndRejectDto dto) {
|
||||||
@Parameter(description = "调拨单ID") @RequestParam Long id) {
|
stockTransferOrderService.approve(dto.id());
|
||||||
stockTransferOrderService.approve(id);
|
|
||||||
return BaseResult.success();
|
return BaseResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiLog(type = OperationType.UPDATE, remark = "反审核StockTransferOrder")
|
@ApiLog(type = OperationType.UPDATE, remark = "反审核StockTransferOrder")
|
||||||
@Operation(summary = "反审核StockTransferOrder", operationId = "unapproveStockTransferOrder")
|
@Operation(summary = "反审核StockTransferOrder", operationId = "rejectStockTransferOrder")
|
||||||
@PostMapping("/rejectStockTransferOrder")
|
@PostMapping("/rejectStockTransferOrder")
|
||||||
@PreAuthorize("hasAuthority('stock_transfer_order:reject')")
|
@PreAuthorize("hasAuthority('stock_transfer_order:reject')")
|
||||||
public BaseResult<?> rejectStockTransferOrder(
|
public BaseResult<?> rejectStockTransferOrder(@Validated @RequestBody BaseApproveAndRejectDto dto) {
|
||||||
@Parameter(description = "调拨单ID") @RequestParam Long id) {
|
stockTransferOrderService.reject(dto.id());
|
||||||
stockTransferOrderService.reject(id);
|
|
||||||
return BaseResult.success();
|
return BaseResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,10 +98,7 @@ public class StockTransferOrderController {
|
|||||||
@GetMapping("/getStockTransferOrderItem")
|
@GetMapping("/getStockTransferOrderItem")
|
||||||
@PreAuthorize("hasAuthority('stock_transfer_order:index')")
|
@PreAuthorize("hasAuthority('stock_transfer_order:index')")
|
||||||
public BaseResult<List<StockTransferOrderItemDto>> getStockTransferOrderItem(
|
public BaseResult<List<StockTransferOrderItemDto>> getStockTransferOrderItem(
|
||||||
@Parameter(description = "调拨单ID")
|
@RequestParam("orderId") Long orderId) {
|
||||||
@RequestParam
|
|
||||||
@NotNull(message = "warehouse.stock_transfer_order.validate.order_id.not_null")
|
|
||||||
Long orderId) {
|
|
||||||
return BaseResult.successWithData(stockTransferOrderService.getItem(orderId));
|
return BaseResult.successWithData(stockTransferOrderService.getItem(orderId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import java.util.List;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加调拨单的 Dto
|
* 添加调拨单的 Dto
|
||||||
|
* @param id 调拨单ID(编辑时需要)
|
||||||
* @param formCode
|
* @param formCode
|
||||||
* @param formName
|
* @param formName
|
||||||
* @param formMark
|
* @param formMark
|
||||||
@@ -16,6 +17,7 @@ import java.util.List;
|
|||||||
* @param transferOrderItems
|
* @param transferOrderItems
|
||||||
*/
|
*/
|
||||||
public record StockTransferOrderAddDto(
|
public record StockTransferOrderAddDto(
|
||||||
|
Long id,
|
||||||
@NotNull(message = "warehouse.stock_transfer_order.validate.form_code.not_null")
|
@NotNull(message = "warehouse.stock_transfer_order.validate.form_code.not_null")
|
||||||
String formCode,
|
String formCode,
|
||||||
@NotNull(message = "warehouse.stock_transfer_order.validate.form_name.not_null")
|
@NotNull(message = "warehouse.stock_transfer_order.validate.form_name.not_null")
|
||||||
|
|||||||
@@ -5,6 +5,19 @@ import com.fasterxml.jackson.annotation.JsonInclude;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 前端展示 Dto
|
||||||
|
* @param id
|
||||||
|
* @param storeNo
|
||||||
|
* @param storeName
|
||||||
|
* @param outStoreNo
|
||||||
|
* @param outStoreName
|
||||||
|
* @param formCode
|
||||||
|
* @param formName
|
||||||
|
* @param formMark
|
||||||
|
* @param formStatus
|
||||||
|
* @param orderItems
|
||||||
|
*/
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
public record StockTransferOrderDto(
|
public record StockTransferOrderDto(
|
||||||
Long id,
|
Long id,
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public interface StockTransferOrderService {
|
|||||||
|
|
||||||
void addStockTransferOrder(StockTransferOrderAddDto dto);
|
void addStockTransferOrder(StockTransferOrderAddDto dto);
|
||||||
|
|
||||||
void updateStockTransferOrder(StockTransferOrderDto dto);
|
void updateStockTransferOrder(StockTransferOrderAddDto dto);
|
||||||
|
|
||||||
void deleteStockTransferOrder(long id);
|
void deleteStockTransferOrder(long id);
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ import com.niuan.erp.module.warehouse.controller.dto.*;
|
|||||||
import com.niuan.erp.module.warehouse.converter.StockTransferOrderConverter;
|
import com.niuan.erp.module.warehouse.converter.StockTransferOrderConverter;
|
||||||
import com.niuan.erp.module.warehouse.entity.Stock;
|
import com.niuan.erp.module.warehouse.entity.Stock;
|
||||||
import com.niuan.erp.module.warehouse.entity.WarehouseItem;
|
import com.niuan.erp.module.warehouse.entity.WarehouseItem;
|
||||||
|
import com.niuan.erp.module.warehouse.entity.Warehouse;
|
||||||
|
import com.niuan.erp.module.warehouse.mapper.WarehouseMapper;
|
||||||
import com.niuan.erp.module.warehouse.mapper.StockMapper;
|
import com.niuan.erp.module.warehouse.mapper.StockMapper;
|
||||||
import com.niuan.erp.module.warehouse.mapper.WarehouseItemMapper;
|
import com.niuan.erp.module.warehouse.mapper.WarehouseItemMapper;
|
||||||
import com.niuan.erp.module.warehouse.service.StockTransferOrderService;
|
import com.niuan.erp.module.warehouse.service.StockTransferOrderService;
|
||||||
@@ -48,6 +50,8 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
|||||||
|
|
||||||
private final StockMapper stockMapper;
|
private final StockMapper stockMapper;
|
||||||
|
|
||||||
|
private final WarehouseMapper warehouseMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<StockTransferOrderDto> getStockTransferOrderPage(BasePageReqParams pageParams,
|
public IPage<StockTransferOrderDto> getStockTransferOrderPage(BasePageReqParams pageParams,
|
||||||
StockTransferOrderSearchParams searchParams) {
|
StockTransferOrderSearchParams searchParams) {
|
||||||
@@ -93,6 +97,17 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
|||||||
validateTransferOrder(dto);
|
validateTransferOrder(dto);
|
||||||
|
|
||||||
Document entity = stockTransferOrderConverter.toEntity(dto);
|
Document entity = stockTransferOrderConverter.toEntity(dto);
|
||||||
|
|
||||||
|
var store = warehouseMapper.selectById(dto.storeNo());
|
||||||
|
if (store != null) {
|
||||||
|
entity.setStoreName(store.getStoreName());
|
||||||
|
}
|
||||||
|
|
||||||
|
var outStore = warehouseMapper.selectById(dto.outStoreNo());
|
||||||
|
if (outStore != null) {
|
||||||
|
entity.setOutStoreName(outStore.getStoreName());
|
||||||
|
}
|
||||||
|
|
||||||
entity.setCreateUserId(SecurityUtils.getUserId());
|
entity.setCreateUserId(SecurityUtils.getUserId());
|
||||||
entity.setCreateUserName(SecurityUtils.getUserName());
|
entity.setCreateUserName(SecurityUtils.getUserName());
|
||||||
entity.setCreateDate(LocalDateTime.now());
|
entity.setCreateDate(LocalDateTime.now());
|
||||||
@@ -125,7 +140,11 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateStockTransferOrder(StockTransferOrderDto dto) {
|
public void updateStockTransferOrder(StockTransferOrderAddDto dto) {
|
||||||
|
if (dto.id() == null) {
|
||||||
|
throw new BusinessException("warehouse.stock_transfer_order.exception.id_required");
|
||||||
|
}
|
||||||
|
|
||||||
Document existingEntity = this.baseMapper.selectById(dto.id());
|
Document existingEntity = this.baseMapper.selectById(dto.id());
|
||||||
if (existingEntity == null) {
|
if (existingEntity == null) {
|
||||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found");
|
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found");
|
||||||
@@ -135,10 +154,49 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
|||||||
}
|
}
|
||||||
|
|
||||||
Document entity = stockTransferOrderConverter.toEntity(dto);
|
Document entity = stockTransferOrderConverter.toEntity(dto);
|
||||||
|
entity.setId(dto.id());
|
||||||
|
|
||||||
|
var store = warehouseMapper.selectById(dto.storeNo());
|
||||||
|
if (store != null) {
|
||||||
|
entity.setStoreName(store.getStoreName());
|
||||||
|
}
|
||||||
|
|
||||||
|
var outStore = warehouseMapper.selectById(dto.outStoreNo());
|
||||||
|
if (outStore != null) {
|
||||||
|
entity.setOutStoreName(outStore.getStoreName());
|
||||||
|
}
|
||||||
|
|
||||||
entity.setUpdateUserId(SecurityUtils.getUserId());
|
entity.setUpdateUserId(SecurityUtils.getUserId());
|
||||||
entity.setUpdateUserName(SecurityUtils.getUserName());
|
entity.setUpdateUserName(SecurityUtils.getUserName());
|
||||||
entity.setUpdateDate(LocalDateTime.now());
|
entity.setUpdateDate(LocalDateTime.now());
|
||||||
this.baseMapper.updateById(entity);
|
this.baseMapper.updateById(entity);
|
||||||
|
|
||||||
|
if (dto.transferOrderItems() != null && !dto.transferOrderItems().isEmpty()) {
|
||||||
|
LambdaQueryWrapper<DocumentMaterial> materialWrapper = new LambdaQueryWrapper<>();
|
||||||
|
materialWrapper.eq(DocumentMaterial::getDocumentNo, dto.id());
|
||||||
|
documentMaterialMapper.delete(materialWrapper);
|
||||||
|
|
||||||
|
List<DocumentMaterial> materials = stockTransferOrderConverter.toEntityList(dto.transferOrderItems());
|
||||||
|
|
||||||
|
Map<String, Map<String, Object>> warehouseItems =
|
||||||
|
warehouseItemMapper.getWarehouseItemStockListByPartNumbers(materials.stream()
|
||||||
|
.map(DocumentMaterial::getPartNumber)
|
||||||
|
.toList());
|
||||||
|
|
||||||
|
materials.forEach(m -> {
|
||||||
|
m.setDocumentNo(entity.getId().intValue());
|
||||||
|
m.setCreateUserId(SecurityUtils.getUserId());
|
||||||
|
m.setCreateUserName(SecurityUtils.getUserName());
|
||||||
|
m.setCreateDate(LocalDateTime.now());
|
||||||
|
m.setStatus(0);
|
||||||
|
Map<String, Object> stockInfo = warehouseItems.get(m.getPartNumber());
|
||||||
|
if (stockInfo != null) {
|
||||||
|
m.setDemandCount(((Long) stockInfo.get("productCount")).intValue());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
documentMaterialMapper.insert(materials);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ auth.userDetailsError=用户信息错误
|
|||||||
validation.common.status.notNull=状态值不能为空
|
validation.common.status.notNull=状态值不能为空
|
||||||
validation.common.status.valueError=状态值只能为 0 或 1
|
validation.common.status.valueError=状态值只能为 0 或 1
|
||||||
validation.common.status.idNull=ID 不能为空
|
validation.common.status.idNull=ID 不能为空
|
||||||
|
validation.common.id.notNull=ID 不能为空
|
||||||
validation.common.pageParams.page.notNull=页数不能为空
|
validation.common.pageParams.page.notNull=页数不能为空
|
||||||
validation.common.pageParams.pageSize.notNull=页数不能为空
|
validation.common.pageParams.pageSize.notNull=页数不能为空
|
||||||
validation.common.pageParams.page.min=页数不能小于0
|
validation.common.pageParams.page.min=页数不能小于0
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ warehouse.stock_transfer_order.validate.product_count.not_null=调拨数量不
|
|||||||
warehouse.stock_transfer_order.validate.product_count.min=调拨数量必须大于 0
|
warehouse.stock_transfer_order.validate.product_count.min=调拨数量必须大于 0
|
||||||
warehouse.stock_transfer_order.validate.part_id.not_null=物料 ID 不能为空
|
warehouse.stock_transfer_order.validate.part_id.not_null=物料 ID 不能为空
|
||||||
warehouse.stock_transfer_order.exception.not_found=调拨单不存在
|
warehouse.stock_transfer_order.exception.not_found=调拨单不存在
|
||||||
|
warehouse.stock_transfer_order.exception.id_required=调拨单ID不能为空
|
||||||
warehouse.stock_transfer_order.exception.cannot_update_approved=已审核的调拨单不能修改
|
warehouse.stock_transfer_order.exception.cannot_update_approved=已审核的调拨单不能修改
|
||||||
warehouse.stock_transfer_order.exception.cannot_delete_approved=已审核的调拨单不能删除
|
warehouse.stock_transfer_order.exception.cannot_delete_approved=已审核的调拨单不能删除
|
||||||
warehouse.stock_transfer_order.exception.cannot_delete_approved_batch=选中的数据中存在已审核的调拨单,不能删除
|
warehouse.stock_transfer_order.exception.cannot_delete_approved_batch=选中的数据中存在已审核的调拨单,不能删除
|
||||||
|
|||||||
Reference in New Issue
Block a user