feat:新增出库单新增功能

This commit is contained in:
zhouz
2026-07-23 13:28:17 +08:00
parent 25cbaf9078
commit 05c3d92abf
15 changed files with 335 additions and 308 deletions

View File

@@ -14,7 +14,8 @@
VALUES (#{ruleId}, #{resetKey}, #{startAt} + #{step} - 1, #{maxValue}) VALUES (#{ruleId}, #{resetKey}, #{startAt} + #{step} - 1, #{maxValue})
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
current_value = current_value + #{step}, current_value = current_value + #{step},
max_value = #{maxValue} max_value = #{maxValue},
deleted = 0
</update> </update>
</mapper> </mapper>

View File

@@ -41,7 +41,7 @@ public class IostorInvController {
@PostMapping("/createOutbound") @PostMapping("/createOutbound")
@Operation(summary = "创建出库单及明细") @Operation(summary = "创建出库单及明细")
@PreAuthorize("@ss.hasPermission('wms:iostor-inv:create')") @PreAuthorize("@ss.hasPermission('wms:iostor-inv:create')")
public CommonResult<String> createOutbound(@Valid @RequestBody IostorInvCreateReqVO reqVO) { public CommonResult<Long> createOutbound(@Valid @RequestBody IostorInvCreateReqVO reqVO) {
return success(iostorInvService.createOutbound(reqVO)); return success(iostorInvService.createOutbound(reqVO));
} }
@@ -64,7 +64,7 @@ public class IostorInvController {
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建出入库单主表") @Operation(summary = "创建出入库单主表")
@PreAuthorize("@ss.hasPermission('wms:iostor-inv:create')") @PreAuthorize("@ss.hasPermission('wms:iostor-inv:create')")
public CommonResult<String> createIostorInv(@Valid @RequestBody IostorInvSaveReqVO createReqVO) { public CommonResult<Long> createIostorInv(@Valid @RequestBody IostorInvSaveReqVO createReqVO) {
return success(iostorInvService.createIostorInv(createReqVO)); return success(iostorInvService.createIostorInv(createReqVO));
} }

View File

@@ -8,6 +8,7 @@ import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import static cn.code.nl.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
import static cn.code.nl.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; import static cn.code.nl.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 出入库单主表分页 Request VO") @Schema(description = "管理后台 - 出入库单主表分页 Request VO")
@@ -21,7 +22,7 @@ public class IostorInvPageReqVO extends PageParam {
private String billType; private String billType;
@Schema(description = "业务日期") @Schema(description = "业务日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDateTime[] bizDate; private LocalDateTime[] bizDate;
@Schema(description = "仓库标识", example = "12635") @Schema(description = "仓库标识", example = "12635")
@@ -76,7 +77,7 @@ public class IostorInvPageReqVO extends PageParam {
private String syscompanyid; private String syscompanyid;
@Schema(description = "是否已上传") @Schema(description = "是否已上传")
private String isUpload; private Boolean isUpload;
@Schema(description = "回传人", example = "25284") @Schema(description = "回传人", example = "25284")
private String uploadOptid; private String uploadOptid;

View File

@@ -4,10 +4,13 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.idev.excel.annotation.*; import cn.idev.excel.annotation.*;
import static cn.code.nl.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
@Schema(description = "管理后台 - 出入库单主表 Response VO") @Schema(description = "管理后台 - 出入库单主表 Response VO")
@Data @Data
@ExcelIgnoreUnannotated @ExcelIgnoreUnannotated
@@ -23,12 +26,17 @@ public class IostorInvRespVO {
@Schema(description = "业务日期", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "业务日期", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("业务日期") @ExcelProperty("业务日期")
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDateTime bizDate; private LocalDateTime bizDate;
@Schema(description = "仓库标识", example = "12635") @Schema(description = "仓库标识", example = "12635")
@ExcelProperty("仓库标识") @ExcelProperty("仓库标识")
private String storId; private String storId;
@Schema(description = "仓库", example = "1号仓")
@ExcelProperty("仓库")
private String storName;
@Schema(description = "来源方标识", example = "21190") @Schema(description = "来源方标识", example = "21190")
@ExcelProperty("来源方标识") @ExcelProperty("来源方标识")
private String sourceId; private String sourceId;

View File

@@ -1,104 +1,104 @@
package cn.code.nl.module.wms.controller.admin.iostorinvdtl; package cn.code.nl.module.wms.controller.admin.iostorinvdtl;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import jakarta.validation.*; import jakarta.validation.*;
import jakarta.servlet.http.*; import jakarta.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;
import cn.code.nl.framework.common.pojo.PageParam; import cn.code.nl.framework.common.pojo.PageParam;
import cn.code.nl.framework.common.pojo.PageResult; import cn.code.nl.framework.common.pojo.PageResult;
import cn.code.nl.framework.common.pojo.CommonResult; import cn.code.nl.framework.common.pojo.CommonResult;
import cn.code.nl.framework.common.util.object.BeanUtils; import cn.code.nl.framework.common.util.object.BeanUtils;
import static cn.code.nl.framework.common.pojo.CommonResult.success; import static cn.code.nl.framework.common.pojo.CommonResult.success;
import cn.code.nl.framework.excel.core.util.ExcelUtils; import cn.code.nl.framework.excel.core.util.ExcelUtils;
import cn.code.nl.framework.apilog.core.annotation.ApiAccessLog; import cn.code.nl.framework.apilog.core.annotation.ApiAccessLog;
import static cn.code.nl.framework.apilog.core.enums.OperateTypeEnum.*; import static cn.code.nl.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.code.nl.module.wms.controller.admin.iostorinvdtl.vo.*; import cn.code.nl.module.wms.controller.admin.iostorinvdtl.vo.*;
import cn.code.nl.module.wms.dal.dataobject.iostorinvdtl.IostorinvDtlDO; import cn.code.nl.module.wms.dal.dataobject.iostorinvdtl.IostorinvDtlDO;
import cn.code.nl.module.wms.service.iostorinvdtl.IostorinvDtlService; import cn.code.nl.module.wms.service.iostorinvdtl.IostorinvDtlService;
@Tag(name = "管理后台 - 出入库单明细") @Tag(name = "管理后台 - 出入库单明细")
@RestController @RestController
@RequestMapping("/wms/iostorinv-dtl") @RequestMapping("/wms/iostorinv-dtl")
@Validated @Validated
public class IostorinvDtlController { public class IostorinvDtlController {
@Resource @Resource
private IostorinvDtlService iostorinvDtlService; private IostorinvDtlService iostorinvDtlService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建出入库单明细") @Operation(summary = "创建出入库单明细")
@PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:create')") @PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:create')")
public CommonResult<String> createIostorinvDtl(@Valid @RequestBody IostorinvDtlSaveReqVO createReqVO) { public CommonResult<Long> createIostorinvDtl(@Valid @RequestBody IostorinvDtlSaveReqVO createReqVO) {
return success(iostorinvDtlService.createIostorinvDtl(createReqVO)); return success(iostorinvDtlService.createIostorinvDtl(createReqVO));
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "更新出入库单明细") @Operation(summary = "更新出入库单明细")
@PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:update')") @PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:update')")
public CommonResult<Boolean> updateIostorinvDtl(@Valid @RequestBody IostorinvDtlSaveReqVO updateReqVO) { public CommonResult<Boolean> updateIostorinvDtl(@Valid @RequestBody IostorinvDtlSaveReqVO updateReqVO) {
iostorinvDtlService.updateIostorinvDtl(updateReqVO); iostorinvDtlService.updateIostorinvDtl(updateReqVO);
return success(true); return success(true);
} }
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除出入库单明细") @Operation(summary = "删除出入库单明细")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:delete')") @PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:delete')")
public CommonResult<Boolean> deleteIostorinvDtl(@RequestParam("id") String id) { public CommonResult<Boolean> deleteIostorinvDtl(@RequestParam("id") String id) {
iostorinvDtlService.deleteIostorinvDtl(id); iostorinvDtlService.deleteIostorinvDtl(id);
return success(true); return success(true);
} }
@DeleteMapping("/delete-list") @DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true) @Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除出入库单明细") @Operation(summary = "批量删除出入库单明细")
@PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:delete')") @PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:delete')")
public CommonResult<Boolean> deleteIostorinvDtlList(@RequestParam("ids") List<String> ids) { public CommonResult<Boolean> deleteIostorinvDtlList(@RequestParam("ids") List<String> ids) {
iostorinvDtlService.deleteIostorinvDtlListByIds(ids); iostorinvDtlService.deleteIostorinvDtlListByIds(ids);
return success(true); return success(true);
} }
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得出入库单明细") @Operation(summary = "获得出入库单明细")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:query')") @PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:query')")
public CommonResult<IostorinvDtlRespVO> getIostorinvDtl(@RequestParam("id") String id) { public CommonResult<IostorinvDtlRespVO> getIostorinvDtl(@RequestParam("id") String id) {
IostorinvDtlDO iostorinvDtl = iostorinvDtlService.getIostorinvDtl(id); IostorinvDtlDO iostorinvDtl = iostorinvDtlService.getIostorinvDtl(id);
return success(BeanUtils.toBean(iostorinvDtl, IostorinvDtlRespVO.class)); return success(BeanUtils.toBean(iostorinvDtl, IostorinvDtlRespVO.class));
} }
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得出入库单明细分页") @Operation(summary = "获得出入库单明细分页")
@PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:query')") @PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:query')")
public CommonResult<PageResult<IostorinvDtlRespVO>> getIostorinvDtlPage(@Valid IostorinvDtlPageReqVO pageReqVO) { public CommonResult<PageResult<IostorinvDtlRespVO>> getIostorinvDtlPage(@Valid IostorinvDtlPageReqVO pageReqVO) {
PageResult<IostorinvDtlDO> pageResult = iostorinvDtlService.getIostorinvDtlPage(pageReqVO); PageResult<IostorinvDtlDO> pageResult = iostorinvDtlService.getIostorinvDtlPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, IostorinvDtlRespVO.class)); return success(BeanUtils.toBean(pageResult, IostorinvDtlRespVO.class));
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出出入库单明细 Excel") @Operation(summary = "导出出入库单明细 Excel")
@PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:export')") @PreAuthorize("@ss.hasPermission('wms:iostorinv-dtl:export')")
@ApiAccessLog(operateType = EXPORT) @ApiAccessLog(operateType = EXPORT)
public void exportIostorinvDtlExcel(@Valid IostorinvDtlPageReqVO pageReqVO, public void exportIostorinvDtlExcel(@Valid IostorinvDtlPageReqVO pageReqVO,
HttpServletResponse response) throws IOException { HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<IostorinvDtlDO> list = iostorinvDtlService.getIostorinvDtlPage(pageReqVO).getList(); List<IostorinvDtlDO> list = iostorinvDtlService.getIostorinvDtlPage(pageReqVO).getList();
// 导出 Excel // 导出 Excel
ExcelUtils.write(response, "出入库单明细.xls", "数据", IostorinvDtlRespVO.class, ExcelUtils.write(response, "出入库单明细.xls", "数据", IostorinvDtlRespVO.class,
BeanUtils.toBean(list, IostorinvDtlRespVO.class)); BeanUtils.toBean(list, IostorinvDtlRespVO.class));
} }
} }

View File

@@ -30,8 +30,8 @@ public class IostorInvDO extends BaseDO {
/** /**
* 出入单标识 * 出入单标识
*/ */
@TableId(type = IdType.INPUT) @TableId
private String iostorinvId; private Long iostorinvId;
/** /**
* 单据编号 * 单据编号
*/ */

View File

@@ -1,110 +1,106 @@
package cn.code.nl.module.wms.dal.dataobject.iostorinvdtl; package cn.code.nl.module.wms.dal.dataobject.iostorinvdtl;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigDecimal; import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import cn.code.nl.framework.mybatis.core.dataobject.BaseDO; import cn.code.nl.framework.mybatis.core.dataobject.BaseDO;
/** /**
* 出入库单明细 DO * 出入库单明细 DO
* *
* @author 诺力管理员 * @author 诺力管理员
*/ */
@TableName("wms_iostorinvdtl") @TableName("wms_iostorinvdtl")
@KeySequence("wms_iostorinvdtl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @KeySequence("wms_iostorinvdtl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data @Data
@EqualsAndHashCode(callSuper = true) @ToString(callSuper = true)
@ToString(callSuper = true) @Builder
@Builder @NoArgsConstructor
@NoArgsConstructor @AllArgsConstructor
@AllArgsConstructor public class IostorinvDtlDO {
public class IostorinvDtlDO extends BaseDO {
/**
/** * 出入单明细标识
* 出入单明细标识 */
*/ @TableId
@TableId(type = IdType.INPUT) private Long iostorinvdtlId;
private String iostorinvdtlId; /**
/** * 出入单标识
* 出入单标识 */
*/ private Long iostorinvId;
private String iostorinvId; /**
/** * 明细序号
* 明细序号 */
*/ private Integer seqNo;
private Integer seqNo; /**
/** * 批次
* 批次 */
*/ private String pcsn;
private String pcsn; /**
/** * 单据明细状态
* 单据明细状态 */
*/ private String billStatus;
private String billStatus; /**
/** * 数量计量单位标识
* 数量计量单位标识 */
*/ private String qtyUnitId;
private String qtyUnitId;
/** /**
* 数量计量单位名称 * 计划数量
*/ */
private String qtyUnitName; private BigDecimal planQty;
/** /**
* 计划数量 * 实际数量
*/ */
private BigDecimal planQty; private BigDecimal realQty;
/** /**
* 实际数量 * 来源单据明细标识
*/ */
private BigDecimal realQty; private String sourceBilldtlId;
/** /**
* 来源单据明细标识 * 来源单据类型
*/ */
private String sourceBilldtlId; private String sourceBillType;
/** /**
* 来源单据类型 * 来源单编号
*/ */
private String sourceBillType; private String sourceBillCode;
/** /**
* 来源单编号 * 来源单表名
*/ */
private String sourceBillCode; private String sourceBillTable;
/** /**
* 来源单表名 * 备注
*/ */
private String sourceBillTable; private String remark;
/** /**
* 备注 * 已分配数量
*/ */
private String remark; private BigDecimal assignQty;
/** /**
* 分配数量 * 分配数量
*/ */
private BigDecimal assignQty; private BigDecimal unassignQty;
/** /**
* 未分配数量 * 物料编号
*/ */
private BigDecimal unassignQty; private String materialCode;
/** /**
* 物料编号 * 来源单指定上料口
*/ */
private String materialCode; private String sourceLoadPort;
/** /**
* 来源单指定上料口 * 单据回传策略配置类名
*/ */
private String sourceLoadPort; private String callbackStrategy;
/** /**
* 单据回传策略配置类名 * 物料标识
*/ */
private String callbackStrategy; private String materialId;
/**
* 物料标识
*/ }
private String materialId;
}

View File

@@ -54,7 +54,6 @@ public interface IostorinvDtlMapper extends BaseMapperX<IostorinvDtlDO> {
.eqIfPresent(IostorinvDtlDO::getPcsn, reqVO.getPcsn()) .eqIfPresent(IostorinvDtlDO::getPcsn, reqVO.getPcsn())
.eqIfPresent(IostorinvDtlDO::getBillStatus, reqVO.getBillStatus()) .eqIfPresent(IostorinvDtlDO::getBillStatus, reqVO.getBillStatus())
.eqIfPresent(IostorinvDtlDO::getQtyUnitId, reqVO.getQtyUnitId()) .eqIfPresent(IostorinvDtlDO::getQtyUnitId, reqVO.getQtyUnitId())
.likeIfPresent(IostorinvDtlDO::getQtyUnitName, reqVO.getQtyUnitName())
.eqIfPresent(IostorinvDtlDO::getPlanQty, reqVO.getPlanQty()) .eqIfPresent(IostorinvDtlDO::getPlanQty, reqVO.getPlanQty())
.eqIfPresent(IostorinvDtlDO::getRealQty, reqVO.getRealQty()) .eqIfPresent(IostorinvDtlDO::getRealQty, reqVO.getRealQty())
.eqIfPresent(IostorinvDtlDO::getSourceBilldtlId, reqVO.getSourceBilldtlId()) .eqIfPresent(IostorinvDtlDO::getSourceBilldtlId, reqVO.getSourceBilldtlId())

View File

@@ -20,7 +20,7 @@ public interface IostorInvService {
* @param reqVO 出库单创建信息 * @param reqVO 出库单创建信息
* @return 出库单编号 * @return 出库单编号
*/ */
String createOutbound(@Valid IostorInvCreateReqVO reqVO); Long createOutbound(@Valid IostorInvCreateReqVO reqVO);
/** /**
* 获得指定仓库的可用库存分页。 * 获得指定仓库的可用库存分页。
@@ -44,7 +44,7 @@ public interface IostorInvService {
* @param createReqVO 创建信息 * @param createReqVO 创建信息
* @return 编号 * @return 编号
*/ */
String createIostorInv(@Valid IostorInvSaveReqVO createReqVO); Long createIostorInv(@Valid IostorInvSaveReqVO createReqVO);
/** /**
* 更新出入库单主表 * 更新出入库单主表

View File

@@ -53,7 +53,7 @@ public class IostorInvServiceImpl implements IostorInvService {
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String createOutbound(IostorInvCreateReqVO reqVO) { public Long createOutbound(IostorInvCreateReqVO reqVO) {
Map<Long, AvailableInventoryRespVO> inventorySnapshot = validateAndLockInventory(reqVO); Map<Long, AvailableInventoryRespVO> inventorySnapshot = validateAndLockInventory(reqVO);
String ruleCode = "IO_CODE"; String ruleCode = "IO_CODE";
@@ -77,13 +77,12 @@ public class IostorInvServiceImpl implements IostorInvService {
.map(IostorInvCreateReqVO.Detail::getPlanQty) .map(IostorInvCreateReqVO.Detail::getPlanQty)
.reduce(BigDecimal.ZERO, BigDecimal::add); .reduce(BigDecimal.ZERO, BigDecimal::add);
IostorInvDO iostorInv = new IostorInvDO(); IostorInvDO iostorInv = new IostorInvDO();
iostorInv.setIostorinvId(IdUtil.fastSimpleUUID());
iostorInv.setBillCode(codeResult.getData()); iostorInv.setBillCode(codeResult.getData());
iostorInv.setIoType("OUT"); iostorInv.setIoType("1");
iostorInv.setBillType(reqVO.getBillType()); iostorInv.setBillType(reqVO.getBillType());
iostorInv.setBizDate(reqVO.getBizDate()); iostorInv.setBizDate(reqVO.getBizDate());
iostorInv.setStorId(reqVO.getStorId()); iostorInv.setStorId(reqVO.getStorId());
iostorInv.setBillStatus("生成"); iostorInv.setBillStatus("10");
iostorInv.setRemark(reqVO.getRemark()); iostorInv.setRemark(reqVO.getRemark());
iostorInv.setDetailCount(reqVO.getDetails().size()); iostorInv.setDetailCount(reqVO.getDetails().size());
iostorInv.setTotalWeight(totalWeight); iostorInv.setTotalWeight(totalWeight);
@@ -92,7 +91,6 @@ public class IostorInvServiceImpl implements IostorInvService {
for (int index = 0; index < reqVO.getDetails().size(); index++) { for (int index = 0; index < reqVO.getDetails().size(); index++) {
IostorInvCreateReqVO.Detail detail = reqVO.getDetails().get(index); IostorInvCreateReqVO.Detail detail = reqVO.getDetails().get(index);
IostorinvDtlDO detailDO = new IostorinvDtlDO(); IostorinvDtlDO detailDO = new IostorinvDtlDO();
detailDO.setIostorinvdtlId(IdUtil.fastSimpleUUID());
detailDO.setIostorinvId(iostorInv.getIostorinvId()); detailDO.setIostorinvId(iostorInv.getIostorinvId());
detailDO.setSeqNo(index + 1); detailDO.setSeqNo(index + 1);
AvailableInventoryRespVO inventory = inventorySnapshot.get(detail.getGroupId()); AvailableInventoryRespVO inventory = inventorySnapshot.get(detail.getGroupId());
@@ -102,8 +100,8 @@ public class IostorInvServiceImpl implements IostorInvService {
detailDO.setPlanQty(detail.getPlanQty()); detailDO.setPlanQty(detail.getPlanQty());
detailDO.setUnassignQty(detail.getPlanQty()); detailDO.setUnassignQty(detail.getPlanQty());
detailDO.setAssignQty(BigDecimal.ZERO); detailDO.setAssignQty(BigDecimal.ZERO);
detailDO.setBillStatus("10");
detailDO.setQtyUnitId(inventory == null ? detail.getQtyUnitId() : inventory.getQtyUnitId()); detailDO.setQtyUnitId(inventory == null ? detail.getQtyUnitId() : inventory.getQtyUnitId());
detailDO.setQtyUnitName(inventory == null ? detail.getQtyUnitName() : inventory.getQtyUnitName());
detailDO.setSourceBillCode(inventory == null ? detail.getSourceBillCode() : inventory.getExtCode()); detailDO.setSourceBillCode(inventory == null ? detail.getSourceBillCode() : inventory.getExtCode());
detailDO.setSourceBillType(inventory == null ? detail.getSourceBillType() : inventory.getExtType()); detailDO.setSourceBillType(inventory == null ? detail.getSourceBillType() : inventory.getExtType());
detailDO.setSourceBilldtlId(inventory == null ? detail.getSourceBilldtlId() : inventory.getExtDtlCode()); detailDO.setSourceBilldtlId(inventory == null ? detail.getSourceBilldtlId() : inventory.getExtDtlCode());
@@ -175,7 +173,7 @@ public class IostorInvServiceImpl implements IostorInvService {
} }
@Override @Override
public String createIostorInv(IostorInvSaveReqVO createReqVO) { public Long createIostorInv(IostorInvSaveReqVO createReqVO) {
// 插入 // 插入
IostorInvDO iostorInv = BeanUtils.toBean(createReqVO, IostorInvDO.class); IostorInvDO iostorInv = BeanUtils.toBean(createReqVO, IostorInvDO.class);
iostorInvMapper.insert(iostorInv); iostorInvMapper.insert(iostorInv);

View File

@@ -1,62 +1,62 @@
package cn.code.nl.module.wms.service.iostorinvdtl; package cn.code.nl.module.wms.service.iostorinvdtl;
import java.util.*; import java.util.*;
import jakarta.validation.*; import jakarta.validation.*;
import cn.code.nl.module.wms.controller.admin.iostorinvdtl.vo.*; import cn.code.nl.module.wms.controller.admin.iostorinvdtl.vo.*;
import cn.code.nl.module.wms.dal.dataobject.iostorinvdtl.IostorinvDtlDO; import cn.code.nl.module.wms.dal.dataobject.iostorinvdtl.IostorinvDtlDO;
import cn.code.nl.framework.common.pojo.PageResult; import cn.code.nl.framework.common.pojo.PageResult;
import cn.code.nl.framework.common.pojo.PageParam; import cn.code.nl.framework.common.pojo.PageParam;
/** /**
* 出入库单明细 Service 接口 * 出入库单明细 Service 接口
* *
* @author 诺力管理员 * @author 诺力管理员
*/ */
public interface IostorinvDtlService { public interface IostorinvDtlService {
/** /**
* 创建出入库单明细 * 创建出入库单明细
* *
* @param createReqVO 创建信息 * @param createReqVO 创建信息
* @return 编号 * @return 编号
*/ */
String createIostorinvDtl(@Valid IostorinvDtlSaveReqVO createReqVO); Long createIostorinvDtl(@Valid IostorinvDtlSaveReqVO createReqVO);
/** /**
* 更新出入库单明细 * 更新出入库单明细
* *
* @param updateReqVO 更新信息 * @param updateReqVO 更新信息
*/ */
void updateIostorinvDtl(@Valid IostorinvDtlSaveReqVO updateReqVO); void updateIostorinvDtl(@Valid IostorinvDtlSaveReqVO updateReqVO);
/** /**
* 删除出入库单明细 * 删除出入库单明细
* *
* @param id 编号 * @param id 编号
*/ */
void deleteIostorinvDtl(String id); void deleteIostorinvDtl(String id);
/** /**
* 批量删除出入库单明细 * 批量删除出入库单明细
* *
* @param ids 编号 * @param ids 编号
*/ */
void deleteIostorinvDtlListByIds(List<String> ids); void deleteIostorinvDtlListByIds(List<String> ids);
/** /**
* 获得出入库单明细 * 获得出入库单明细
* *
* @param id 编号 * @param id 编号
* @return 出入库单明细 * @return 出入库单明细
*/ */
IostorinvDtlDO getIostorinvDtl(String id); IostorinvDtlDO getIostorinvDtl(String id);
/** /**
* 获得出入库单明细分页 * 获得出入库单明细分页
* *
* @param pageReqVO 分页查询 * @param pageReqVO 分页查询
* @return 出入库单明细分页 * @return 出入库单明细分页
*/ */
PageResult<IostorinvDtlDO> getIostorinvDtlPage(IostorinvDtlPageReqVO pageReqVO); PageResult<IostorinvDtlDO> getIostorinvDtlPage(IostorinvDtlPageReqVO pageReqVO);
} }

View File

@@ -33,7 +33,7 @@ public class IostorinvDtlServiceImpl implements IostorinvDtlService {
private IostorinvDtlMapper iostorinvDtlMapper; private IostorinvDtlMapper iostorinvDtlMapper;
@Override @Override
public String createIostorinvDtl(IostorinvDtlSaveReqVO createReqVO) { public Long createIostorinvDtl(IostorinvDtlSaveReqVO createReqVO) {
// 插入 // 插入
IostorinvDtlDO iostorinvDtl = BeanUtils.toBean(createReqVO, IostorinvDtlDO.class); IostorinvDtlDO iostorinvDtl = BeanUtils.toBean(createReqVO, IostorinvDtlDO.class);
iostorinvDtlMapper.insert(iostorinvDtl); iostorinvDtlMapper.insert(iostorinvDtl);

View File

@@ -65,10 +65,10 @@ mybatis-plus:
map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
global-config: global-config:
db-config: db-config:
id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 # id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。
# id-type: AUTO # 自增 ID适合 MySQL 等直接自增的数据库 # id-type: AUTO # 自增 ID适合 MySQL 等直接自增的数据库
# id-type: INPUT # 用户输入 ID适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 # id-type: INPUT # 用户输入 ID适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库
# id-type: ASSIGN_ID # 分配 ID默认使用雪花算法。注意Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 id-type: ASSIGN_ID # 分配 ID默认使用雪花算法。注意Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解
logic-delete-value: 1 # 逻辑已删除值(默认为 1) logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
banner: false # 关闭控制台的 Banner 打印 banner: false # 关闭控制台的 Banner 打印

View File

@@ -3,6 +3,16 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { WmsIostorInvApi } from '#/api/wms/iostorinv'; import type { WmsIostorInvApi } from '#/api/wms/iostorinv';
import { getRangePickerDefaultProps } from '#/utils'; import { getRangePickerDefaultProps } from '#/utils';
import { getBsrealStorAttrSimpleList } from '#/api/wms/bsrealstorattr';
import {getDictOptions} from "@vben/hooks";
import {DICT_TYPE} from "@vben/constants";
// ========== 启用的仓库下拉 ==========
async function loadWarehouseList() {
const data = await getBsrealStorAttrSimpleList();
return data || [];
}
/** 新增/修改的表单 */ /** 新增/修改的表单 */
export function useFormSchema(): VbenFormSchema[] { export function useFormSchema(): VbenFormSchema[] {
@@ -260,7 +270,7 @@ export function useGridFormSchema(): VbenFormSchema[] {
component: 'Select', component: 'Select',
componentProps: { componentProps: {
allowClear: true, allowClear: true,
options: [], options: getDictOptions(DICT_TYPE.WMS_OUT_BILL_TYPE),
placeholder: '请选择单据类型', placeholder: '请选择单据类型',
}, },
}, },
@@ -275,11 +285,14 @@ export function useGridFormSchema(): VbenFormSchema[] {
}, },
{ {
fieldName: 'storId', fieldName: 'storId',
label: '仓库标识', label: '仓库',
component: 'Input', component: 'ApiSelect',
componentProps: { componentProps: {
api: loadWarehouseList,
labelField: 'storName',
valueField: 'storId',
placeholder: '请选择仓库',
allowClear: true, allowClear: true,
placeholder: '请输入仓库标识',
}, },
}, },
{ {
@@ -288,7 +301,7 @@ export function useGridFormSchema(): VbenFormSchema[] {
component: 'Select', component: 'Select',
componentProps: { componentProps: {
allowClear: true, allowClear: true,
options: [], options: getDictOptions(DICT_TYPE.WMS_IO_BILL_STATUS),
placeholder: '请选择单据状态', placeholder: '请选择单据状态',
}, },
}, },
@@ -303,11 +316,12 @@ export function useGridFormSchema(): VbenFormSchema[] {
}, },
{ {
fieldName: 'isUpload', fieldName: 'isUpload',
label: '是否回传', label: '是否回传',
component: 'Input', component: 'Select',
componentProps: { componentProps: {
allowClear: true, allowClear: true,
placeholder: '请输入是否已回传', options: getDictOptions(DICT_TYPE.COMMON_TRUE_FALSE, 'boolean'),
placeholder: '请选择是否回传',
}, },
} }
]; ];
@@ -331,11 +345,11 @@ export function useGridColumns(): VxeTableGridOptions<WmsIostorInvApi.IostorInv>
field: 'bizDate', field: 'bizDate',
title: '业务日期', title: '业务日期',
minWidth: 120, minWidth: 120,
formatter: 'formatDateTime', formatter: 'formatDate',
}, },
{ {
field: 'storId', field: 'storName',
title: '仓库标识', title: '仓库',
minWidth: 120, minWidth: 120,
}, },
{ {
@@ -372,6 +386,10 @@ export function useGridColumns(): VxeTableGridOptions<WmsIostorInvApi.IostorInv>
field: 'billStatus', field: 'billStatus',
title: '单据状态', title: '单据状态',
minWidth: 120, minWidth: 120,
cellRender: {
name: 'CellDict',
props: { type: DICT_TYPE.WMS_IO_BILL_STATUS },
},
}, },
{ {
field: 'remark', field: 'remark',
@@ -382,6 +400,10 @@ export function useGridColumns(): VxeTableGridOptions<WmsIostorInvApi.IostorInv>
field: 'createMode', field: 'createMode',
title: '生成方式', title: '生成方式',
minWidth: 120, minWidth: 120,
cellRender: {
name: 'CellDict',
props: { type: DICT_TYPE.WMS_CREATE_TYPE },
},
}, },
{ {
field: 'createTime', field: 'createTime',
@@ -444,4 +466,3 @@ export function useGridColumns(): VxeTableGridOptions<WmsIostorInvApi.IostorInv>
}, },
]; ];
} }

View File

@@ -287,6 +287,9 @@ const WMS_DICT = {
WMS_GROUP_PLATE_STATUS: 'wms_group_plate_status', // 组盘记录 WMS_GROUP_PLATE_STATUS: 'wms_group_plate_status', // 组盘记录
WMS_VEHICLE_TYPE: 'wms_vehicle_type', // 载具类型 WMS_VEHICLE_TYPE: 'wms_vehicle_type', // 载具类型
WMS_OVER_STRUCT_TYPE: 'wms_over_struct_type', // 是否超限 WMS_OVER_STRUCT_TYPE: 'wms_over_struct_type', // 是否超限
WMS_OUT_BILL_TYPE: 'wms_out_bill_type', // 出库单据类型
WMS_IO_BILL_STATUS: 'wms_io_bill_status', // 出入库单据状态
WMS_CREATE_TYPE: 'wms_create_type', // 生成方式
} as const; } as const;
/** ========== TASK - 任务管理模块 ========== */ /** ========== TASK - 任务管理模块 ========== */