diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/ErrorCodeConstants.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/ErrorCodeConstants.java index bde6ac22..91130ae3 100644 --- a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/ErrorCodeConstants.java +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/ErrorCodeConstants.java @@ -17,4 +17,8 @@ public interface ErrorCodeConstants { ErrorCode RAW_FOIL_WORK_ORDER_POINT_CODE_NOT_EXISTS = new ErrorCode(4, "点位设备不存在"); ErrorCode RAW_FOIL_WORK_ORDER_MATERIAL_NOT_EXISTS = new ErrorCode(5, "物料不存在"); ErrorCode RAW_FOIL_WORK_ORDER_ALREADY_ENDED = new ErrorCode(6, "不能对完成状态的工单强制结束"); + + // ========== 装箱区点位库存 ========== + ErrorCode PACKAGE_POINT_NOT_EXISTS = new ErrorCode(200001, "装箱区点位库存不存在"); + } diff --git a/nl-module-lms/nl-module-lms-server/pom.xml b/nl-module-lms/nl-module-lms-server/pom.xml index dab9a5e7..856cdea8 100644 --- a/nl-module-lms/nl-module-lms-server/pom.xml +++ b/nl-module-lms/nl-module-lms-server/pom.xml @@ -32,6 +32,11 @@ nl-module-lms-api ${revision} + + cn.nl.cloud + nl-module-system-api + ${revision} + cn.nl.cloud nl-module-base-api @@ -138,4 +143,4 @@ - \ No newline at end of file + diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/PackagePointController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/PackagePointController.java new file mode 100644 index 00000000..21cec7c7 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/PackagePointController.java @@ -0,0 +1,106 @@ +package cn.code.nl.module.lms.controller.admin.packagepoint; + +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import jakarta.validation.constraints.*; +import jakarta.validation.*; +import jakarta.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.code.nl.framework.common.pojo.PageParam; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.framework.common.util.object.BeanUtils; +import static cn.code.nl.framework.common.pojo.CommonResult.success; + +import cn.code.nl.framework.excel.core.util.ExcelUtils; + +import cn.code.nl.framework.apilog.core.annotation.ApiAccessLog; +import static cn.code.nl.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.code.nl.module.lms.controller.admin.packagepoint.vo.*; +import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO; +import cn.code.nl.module.lms.service.packagepoint.PackagePointService; +import org.dromara.core.trans.anno.TransMethodResult; + +@Tag(name = "管理后台 - 装箱区点位库存") +@RestController +@RequestMapping("/lms/package-point") +@Validated +public class PackagePointController { + + @Resource + private PackagePointService packagePointService; + + @PostMapping("/create") + @Operation(summary = "创建装箱区点位库存") + @PreAuthorize("@ss.hasPermission('lms:package-point:create')") + public CommonResult createPackagePoint(@Valid @RequestBody PackagePointSaveReqVO createReqVO) { + return success(packagePointService.createPackagePoint(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新装箱区点位库存") + @PreAuthorize("@ss.hasPermission('lms:package-point:update')") + public CommonResult updatePackagePoint(@Valid @RequestBody PackagePointSaveReqVO updateReqVO) { + packagePointService.updatePackagePoint(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除装箱区点位库存") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('lms:package-point:delete')") + public CommonResult deletePackagePoint(@RequestParam("id") Long id) { + packagePointService.deletePackagePoint(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除装箱区点位库存") + @PreAuthorize("@ss.hasPermission('lms:package-point:delete')") + public CommonResult deletePackagePointList(@RequestParam("ids") List ids) { + packagePointService.deletePackagePointListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得装箱区点位库存") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('lms:package-point:query')") + public CommonResult getPackagePoint(@RequestParam("id") Long id) { + PackagePointDO packagePoint = packagePointService.getPackagePoint(id); + return success(BeanUtils.toBean(packagePoint, PackagePointRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得装箱区点位库存分页") + @TransMethodResult + @PreAuthorize("@ss.hasPermission('lms:package-point:query')") + public CommonResult> getPackagePointPage(@Valid PackagePointPageReqVO pageReqVO) { + PageResult pageResult = packagePointService.getPackagePointPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PackagePointRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出装箱区点位库存 Excel") + @PreAuthorize("@ss.hasPermission('lms:package-point:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPackagePointExcel(@Valid PackagePointPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = packagePointService.getPackagePointPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "装箱区点位库存.xls", "数据", PackagePointRespVO.class, + BeanUtils.toBean(list, PackagePointRespVO.class)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/vo/PackagePointPageReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/vo/PackagePointPageReqVO.java new file mode 100644 index 00000000..5c130929 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/vo/PackagePointPageReqVO.java @@ -0,0 +1,41 @@ +package cn.code.nl.module.lms.controller.admin.packagepoint.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.code.nl.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.code.nl.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 装箱区点位库存分页 Request VO") +@Data +public class PackagePointPageReqVO extends PageParam { + + @Schema(description = "点位名称", example = "赵六") + private String pointName; + + @Schema(description = "点位类型", example = "2") + private String pointType; + + @Schema(description = "子卷号", example = "赵六") + private String containerName; + + @Schema(description = "库存状态", example = "2") + private String pointStatus; + + @Schema(description = "载具号") + private String vehicleCode; + + @Schema(description = "位置") + private String pointLocation; + + @Schema(description = "是否启用") + private Boolean isUsed; + + @Schema(description = "更新时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] updateTime; + +} \ No newline at end of file diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/vo/PackagePointRespVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/vo/PackagePointRespVO.java new file mode 100644 index 00000000..31792e3a --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/vo/PackagePointRespVO.java @@ -0,0 +1,101 @@ +package cn.code.nl.module.lms.controller.admin.packagepoint.vo; + +import cn.code.nl.module.system.api.user.AdminUserApi; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.dromara.core.trans.anno.Trans; +import org.dromara.core.trans.constant.TransType; +import org.dromara.core.trans.vo.VO; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 装箱区点位库存 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PackagePointRespVO implements VO { + + @Schema(description = "库存记录标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "837") + @ExcelProperty("库存记录标识") + @TableId + private Long pointId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("点位编码") + private String pointCode; + + @Schema(description = "点位名称", example = "赵六") + @ExcelProperty("点位名称") + private String pointName; + + @Schema(description = "点位类型", example = "2") + @ExcelProperty("点位类型") + private String pointType; + + @Schema(description = "子卷号", example = "赵六") + @ExcelProperty("子卷号") + private String containerName; + + @Schema(description = "库存状态", example = "2") + @ExcelProperty("库存状态") + private String pointStatus; + + @Schema(description = "载具号") + @ExcelProperty("载具号") + private String vehicleCode; + + @Schema(description = "区块") + @ExcelProperty("区块") + private String block; + + @Schema(description = "位置") + @ExcelProperty("位置") + private String pointLocation; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("顺序号") + private Integer sortSeq; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private Boolean isUsed; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "规划") + @ExcelProperty("规划") + private String plan; + + @Schema(description = "排") + @ExcelProperty("排") + private String rowNum; + + @Schema(description = "列") + @ExcelProperty("列") + private String colNum; + + @Schema(description = "深浅位0浅位1深位") + @ExcelProperty("深浅位0浅位1深位") + private String depth; + + @Schema(description = "所属等待点类型", example = "2") + @ExcelProperty("所属等待点类型") + private String waitPointType; + + @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("更新时间") + private LocalDateTime updateTime; + + @Schema(description = "更新者") + @ExcelProperty("更新者") + @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "updaterName") + private String updater; + + @Schema(description = "更新者名称") + private String updaterName; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/vo/PackagePointSaveReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/vo/PackagePointSaveReqVO.java new file mode 100644 index 00000000..4c4073f8 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagepoint/vo/PackagePointSaveReqVO.java @@ -0,0 +1,66 @@ +package cn.code.nl.module.lms.controller.admin.packagepoint.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 装箱区点位库存新增/修改 Request VO") +@Data +public class PackagePointSaveReqVO { + + @Schema(description = "库存记录标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "837") + private Long pointId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "点位编码不能为空") + private String pointCode; + + @Schema(description = "点位名称", example = "赵六") + private String pointName; + + @Schema(description = "点位类型", example = "2") + private String pointType; + + @Schema(description = "子卷号", example = "赵六") + private String containerName; + + @Schema(description = "库存状态", example = "2") + private String pointStatus; + + @Schema(description = "载具号") + private String vehicleCode; + + @Schema(description = "区块") + private String block; + + @Schema(description = "位置") + private String pointLocation; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "顺序号不能为空") + private Integer sortSeq; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean isUsed; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "规划") + private String plan; + + @Schema(description = "排") + private String rowNum; + + @Schema(description = "列") + private String colNum; + + @Schema(description = "深浅位0浅位1深位") + private String depth; + + @Schema(description = "所属等待点类型", example = "2") + private String waitPointType; + +} \ No newline at end of file diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/packagepoint/PackagePointDO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/packagepoint/PackagePointDO.java new file mode 100644 index 00000000..5f7f6f0d --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/packagepoint/PackagePointDO.java @@ -0,0 +1,96 @@ +package cn.code.nl.module.lms.dal.dataobject.packagepoint; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.code.nl.framework.mybatis.core.dataobject.BaseDO; + +/** + * 装箱区点位库存 DO + * + * @author 诺力管理员 + */ +@TableName("lms_package_point") +@KeySequence("lms_package_point_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PackagePointDO extends BaseDO { + + /** + * 库存记录标识 + */ + @TableId + private Long pointId; + /** + * 点位编码 + */ + private String pointCode; + /** + * 点位名称 + */ + private String pointName; + /** + * 点位类型 + */ + private String pointType; + /** + * 子卷号 + */ + private String containerName; + /** + * 库存状态 + */ + private String pointStatus; + /** + * 载具号 + */ + private String vehicleCode; + /** + * 区块 + */ + private String block; + /** + * 位置 + */ + private String pointLocation; + /** + * 顺序号 + */ + private Integer sortSeq; + /** + * 是否启用 + */ + private Boolean isUsed; + /** + * 备注 + */ + private String remark; + /** + * 规划 + */ + private String plan; + /** + * 排 + */ + private String rowNum; + /** + * 列 + */ + private String colNum; + /** + * 深浅位0浅位1深位 + */ + private String depth; + /** + * 所属等待点类型 + */ + private String waitPointType; + + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/packagepoint/PackagePointMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/packagepoint/PackagePointMapper.java new file mode 100644 index 00000000..08251602 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/packagepoint/PackagePointMapper.java @@ -0,0 +1,34 @@ +package cn.code.nl.module.lms.dal.mysql.packagepoint; + +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.code.nl.module.lms.controller.admin.packagepoint.vo.PackagePointPageReqVO; +import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.util.StringUtils; + +/** + * 装箱区点位库存 Mapper + * + * @author 诺力管理员 + */ +@Mapper +public interface PackagePointMapper extends BaseMapperX { + + default PageResult selectPage(PackagePointPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PackagePointDO::getPointType, reqVO.getPointType()) + .likeIfPresent(PackagePointDO::getContainerName, reqVO.getContainerName()) + .eqIfPresent(PackagePointDO::getPointStatus, reqVO.getPointStatus()) + .eqIfPresent(PackagePointDO::getVehicleCode, reqVO.getVehicleCode()) + .eqIfPresent(PackagePointDO::getPointLocation, reqVO.getPointLocation()) + .eqIfPresent(PackagePointDO::getIsUsed, reqVO.getIsUsed()) + .and(StringUtils.hasText(reqVO.getPointName()), wrapper -> wrapper + .like(PackagePointDO::getPointName, reqVO.getPointName()) + .or() + .like(PackagePointDO::getPointCode, reqVO.getPointName())) + .orderByAsc(PackagePointDO::getPointId)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePointService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePointService.java new file mode 100644 index 00000000..7cfa7138 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePointService.java @@ -0,0 +1,62 @@ +package cn.code.nl.module.lms.service.packagepoint; + +import java.util.*; +import jakarta.validation.*; +import cn.code.nl.module.lms.controller.admin.packagepoint.vo.*; +import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.PageParam; + +/** + * 装箱区点位库存 Service 接口 + * + * @author 诺力管理员 + */ +public interface PackagePointService { + + /** + * 创建装箱区点位库存 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPackagePoint(@Valid PackagePointSaveReqVO createReqVO); + + /** + * 更新装箱区点位库存 + * + * @param updateReqVO 更新信息 + */ + void updatePackagePoint(@Valid PackagePointSaveReqVO updateReqVO); + + /** + * 删除装箱区点位库存 + * + * @param id 编号 + */ + void deletePackagePoint(Long id); + + /** + * 批量删除装箱区点位库存 + * + * @param ids 编号 + */ + void deletePackagePointListByIds(List ids); + + /** + * 获得装箱区点位库存 + * + * @param id 编号 + * @return 装箱区点位库存 + */ + PackagePointDO getPackagePoint(Long id); + + /** + * 获得装箱区点位库存分页 + * + * @param pageReqVO 分页查询 + * @return 装箱区点位库存分页 + */ + PageResult getPackagePointPage(PackagePointPageReqVO pageReqVO); + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePointServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePointServiceImpl.java new file mode 100644 index 00000000..ff62b3a4 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePointServiceImpl.java @@ -0,0 +1,85 @@ +package cn.code.nl.module.lms.service.packagepoint; + +import cn.hutool.core.collection.CollUtil; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.code.nl.module.lms.controller.admin.packagepoint.vo.*; +import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.PageParam; +import cn.code.nl.framework.common.util.object.BeanUtils; + +import cn.code.nl.module.lms.dal.mysql.packagepoint.PackagePointMapper; + +import static cn.code.nl.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.code.nl.framework.common.util.collection.CollectionUtils.convertList; +import static cn.code.nl.framework.common.util.collection.CollectionUtils.diffList; +import static cn.code.nl.module.lms.enums.ErrorCodeConstants.*; + +/** + * 装箱区点位库存 Service 实现类 + * + * @author 诺力管理员 + */ +@Service +@Validated +public class PackagePointServiceImpl implements PackagePointService { + + @Resource + private PackagePointMapper packagePointMapper; + + @Override + public Long createPackagePoint(PackagePointSaveReqVO createReqVO) { + // 插入 + PackagePointDO packagePoint = BeanUtils.toBean(createReqVO, PackagePointDO.class); + packagePointMapper.insert(packagePoint); + + // 返回 + return packagePoint.getPointId(); + } + + @Override + public void updatePackagePoint(PackagePointSaveReqVO updateReqVO) { + // 校验存在 + validatePackagePointExists(updateReqVO.getPointId()); + // 更新 + PackagePointDO updateObj = BeanUtils.toBean(updateReqVO, PackagePointDO.class); + packagePointMapper.updateById(updateObj); + } + + @Override + public void deletePackagePoint(Long id) { + // 校验存在 + validatePackagePointExists(id); + // 删除 + packagePointMapper.deleteById(id); + } + + @Override + public void deletePackagePointListByIds(List ids) { + // 删除 + packagePointMapper.deleteByIds(ids); + } + + + private void validatePackagePointExists(Long id) { + if (packagePointMapper.selectById(id) == null) { + throw exception(PACKAGE_POINT_NOT_EXISTS); + } + } + + @Override + public PackagePointDO getPackagePoint(Long id) { + return packagePointMapper.selectById(id); + } + + @Override + public PageResult getPackagePointPage(PackagePointPageReqVO pageReqVO) { + return packagePointMapper.selectPage(pageReqVO); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/packagepoint/PackagePointMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/packagepoint/PackagePointMapper.xml new file mode 100644 index 00000000..58dfd574 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/packagepoint/PackagePointMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/packagepoint/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/packagepoint/index.ts new file mode 100644 index 00000000..f9a7a395 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/packagepoint/index.ts @@ -0,0 +1,72 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace LmsPackagePointApi { + /** 装箱区点位库存信息 */ + export interface PackagePoint { + pointId: number; // 库存记录标识 + pointCode?: string; // 点位编码 + pointName: string; // 点位名称 + pointType: string; // 点位类型 + containerName: string; // 子卷号 + pointStatus: string; // 库存状态 + vehicleCode: string; // 载具号 + block: string; // 区块 + pointLocation: string; // 位置 + sortSeq?: number; // 顺序号 + isUsed?: boolean; // 是否启用 + remark: string; // 备注 + plan: string; // 规划 + rowNum: string; // 排 + colNum: string; // 列 + depth: string; // 深浅位0浅位1深位 + waitPointType: string; // 所属等待点类型 + updaterName?: string; // 更新者名称 + updateTime?: string; // 更新时间 + } +} + +/** 查询装箱区点位库存分页 */ +export function getPackagePointPage(params: PageParam) { + return requestClient.get>( + '/lms/package-point/page', + { params }, + ); +} + +/** 查询装箱区点位库存详情 */ +export function getPackagePoint(id: number) { + return requestClient.get( + `/lms/package-point/get?id=${id}`, + ); +} + +/** 新增装箱区点位库存 */ +export function createPackagePoint(data: LmsPackagePointApi.PackagePoint) { + return requestClient.post('/lms/package-point/create', data); +} + +/** 修改装箱区点位库存 */ +export function updatePackagePoint(data: LmsPackagePointApi.PackagePoint) { + return requestClient.put('/lms/package-point/update', data); +} + +/** 删除装箱区点位库存 */ +export function deletePackagePoint(id: number) { + return requestClient.delete(`/lms/package-point/delete?id=${id}`); +} + +/** 批量删除装箱区点位库存 */ +export function deletePackagePointList(ids: number[]) { + return requestClient.delete( + `/lms/package-point/delete-list?ids=${ids.join(',')}`, + ); +} + +/** 导出装箱区点位库存 */ +export function exportPackagePoint(params: any) { + return requestClient.download('/lms/package-point/export-excel', { params }); +} + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagepoint/data.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagepoint/data.ts new file mode 100644 index 00000000..51ca58a8 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagepoint/data.ts @@ -0,0 +1,355 @@ +import type {VbenFormSchema} from '#/adapter/form'; +import type {VxeTableGridOptions} from '#/adapter/vxe-table'; +import type {LmsPackagePointApi} from '#/api/lms/packagepoint'; + +import {DICT_TYPE} from "@vben/constants"; +import {getDictOptions} from "@vben/hooks"; + +import {getRangePickerDefaultProps} from '#/utils'; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'point_id', + component: 'Input', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'pointCode', + label: '点位编码', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入点位编码', + }, + }, + { + fieldName: 'pointName', + label: '点位名称', + component: 'Input', + componentProps: { + placeholder: '请输入点位名称', + }, + }, + { + fieldName: 'pointType', + label: '点位类型', + component: 'Select', + componentProps: { + options: getDictOptions(DICT_TYPE.BOX_POINT_TYPE), + placeholder: '请选择点位类型', + }, + }, + { + fieldName: 'containerName', + label: '子卷号', + component: 'Input', + componentProps: { + placeholder: '请输入子卷号', + }, + }, + { + fieldName: 'pointStatus', + label: '点位状态', + component: 'RadioGroup', + componentProps: { + options: getDictOptions(DICT_TYPE.BOX_POINT_STATUS), + buttonStyle: 'solid', + optionType: 'button', + defaultValue: "1" + }, + }, + { + fieldName: 'vehicleCode', + label: '载具号', + component: 'Input', + componentProps: { + placeholder: '请输入载具号', + }, + }, + { + fieldName: 'pointLocation', + label: '位置', + component: 'Input', + componentProps: { + placeholder: '请输入位置', + }, + }, + { + fieldName: 'sortSeq', + label: '顺序号', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入顺序号', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + rules: 'required', + component: 'RadioGroup', + componentProps: { + options: getDictOptions(DICT_TYPE.COMMON_TRUE_FALSE, "boolean"), + buttonStyle: 'solid', + optionType: 'button', + defaultValue: true, + }, + }, + { + fieldName: 'remark', + label: '备注', + component: 'Input', + componentProps: { + placeholder: '请输入备注', + }, + }, + { + fieldName: 'plan', + label: '规划', + component: 'Input', + componentProps: { + placeholder: '请输入规划', + }, + }, + { + fieldName: 'block', + label: '区块', + component: 'Input', + componentProps: { + placeholder: '请输入区块', + }, + }, + { + fieldName: 'rowNum', + label: '排', + component: 'Input', + componentProps: { + placeholder: '请输入排', + }, + }, + { + fieldName: 'colNum', + label: '列', + component: 'Input', + componentProps: { + placeholder: '请输入列', + }, + }, + { + fieldName: 'depth', + label: '深浅位', + component: 'Select', + componentProps: { + options: getDictOptions(DICT_TYPE.BOX_POINT_DEPTH), + placeholder: '请选择深浅位', + }, + } + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'pointName', + label: '点位名称', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入点位名称', + }, + }, + { + fieldName: 'pointType', + label: '点位类型', + component: 'Select', + componentProps: { + allowClear: true, + options: getDictOptions(DICT_TYPE.BOX_POINT_TYPE), + placeholder: '请选择点位类型', + }, + }, + { + fieldName: 'containerName', + label: '子卷号', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入子卷号', + }, + }, + { + fieldName: 'pointStatus', + label: '点位状态', + component: 'Select', + componentProps: { + allowClear: true, + options: getDictOptions(DICT_TYPE.BOX_POINT_STATUS), + placeholder: '请选择库存状态', + }, + }, + { + fieldName: 'vehicleCode', + label: '载具号', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入载具号', + }, + }, + { + fieldName: 'pointLocation', + label: '位置', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入位置', + }, + }, + { + fieldName: 'sortSeq', + label: '顺序号', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入顺序号', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + component: 'Select', + componentProps: { + allowClear: true, + options: getDictOptions(DICT_TYPE.COMMON_TRUE_FALSE, "boolean"), + placeholder: '请选择是否启用', + }, + }, + { + fieldName: 'updateTime', + label: '更新时间', + component: 'RangePicker', + componentProps: { + ...getRangePickerDefaultProps(), + allowClear: true, + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + {type: 'checkbox', width: 40}, + { + field: 'pointCode', + title: '点位编码', + minWidth: 120, + }, + { + field: 'pointName', + title: '点位名称', + minWidth: 120, + }, + { + field: 'pointType', + title: '点位类型', + minWidth: 120, + cellRender: { + name: 'CellDict', + props: { + type: DICT_TYPE.BOX_POINT_TYPE + } + }, + }, + { + field: 'containerName', + title: '子卷号', + minWidth: 120, + }, + { + field: 'pointStatus', + title: '点位状态', + minWidth: 120, + cellRender: { + name: 'CellDict', + props: { + type: DICT_TYPE.BOX_POINT_STATUS + } + }, + }, + { + field: 'vehicleCode', + title: '载具号', + minWidth: 120, + }, + { + field: 'block', + title: '区块', + minWidth: 120, + }, + { + field: 'pointLocation', + title: '位置', + minWidth: 120, + }, + { + field: 'sortSeq', + title: '顺序号', + minWidth: 120, + }, + { + field: 'isUsed', + title: '是否启用', + minWidth: 120, + }, + { + field: 'remark', + title: '备注', + minWidth: 120, + }, + { + field: 'plan', + title: '规划', + minWidth: 120, + }, + { + field: 'rowNum', + title: '排', + minWidth: 120, + }, + { + field: 'colNum', + title: '列', + minWidth: 120, + }, + { + field: 'depth', + title: '深浅位', + minWidth: 120, + }, + { + field: 'updaterName', + title: '更新人', + minWidth: 120, + }, + { + field: 'updateTime', + title: '更新时间', + minWidth: 120, + formatter: 'formatDateTime', + }, + { + title: '操作', + width: 200, + fixed: 'right', + slots: {default: 'actions'}, + }, + ]; +} + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagepoint/index.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagepoint/index.vue new file mode 100644 index 00000000..37e94d82 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagepoint/index.vue @@ -0,0 +1,186 @@ + + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagepoint/modules/form.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagepoint/modules/form.vue new file mode 100644 index 00000000..e11af911 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagepoint/modules/form.vue @@ -0,0 +1,82 @@ + + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/packages/constants/src/dict-enum.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/packages/constants/src/dict-enum.ts index 8b802722..9a155fb2 100644 --- a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/packages/constants/src/dict-enum.ts +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/packages/constants/src/dict-enum.ts @@ -308,6 +308,13 @@ const RawFoil_DICT = { RAWFOIL_WORKORDER_STATUS: 'rawfoil_workorder_status', // 生箔工序工单状态 } as const; +/** ========== LMS - 管理模块 ========== */ +const LMS_DICT = { + BOX_POINT_TYPE: 'box_point_type', // 装箱点位类型 + BOX_POINT_STATUS: 'box_point_status', // 装箱点位状态 + BOX_POINT_DEPTH: 'box_point_depth', // 装箱点位深浅 +} as const; + /** 字典类型枚举 - 统一导出 */ const DICT_TYPE = { ...AI_DICT, @@ -327,6 +334,7 @@ const DICT_TYPE = { ...COMMON_DICT, ...TASK_DICT, ...RawFoil_DICT, + ...LMS_DICT, } as const; export { DICT_TYPE }; diff --git a/sql/mysql/lms_package_point.sql b/sql/mysql/lms_package_point.sql new file mode 100644 index 00000000..760652b6 --- /dev/null +++ b/sql/mysql/lms_package_point.sql @@ -0,0 +1,80 @@ +CREATE TABLE `lms_package_point` +( + `point_id` bigint NOT NULL COMMENT '库存记录标识', + `point_code` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '点位编码', + `point_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '点位名称', + `point_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '点位类型', + `container_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '子卷号', + `point_status` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '库存状态', + `vehicle_code` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '载具号', + `block` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '区块', + `point_location` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '位置', + `sort_seq` decimal(5, 0) NOT NULL DEFAULT '1' COMMENT '顺序号', + `is_used` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否启用', + `remark` varchar(1000) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '备注', + `plan` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '规划', + `row_num` char(6) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '0' COMMENT '排', + `col_num` char(6) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '0' COMMENT '列', + `depth` char(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '0' COMMENT '深浅位0浅位1深位', + `wait_point_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '0' COMMENT '所属等待点类型', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`point_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='装箱区点位库存表'; + +-- 子卷下线点初始化数据 +INSERT INTO lms_package_point (point_id, point_code, point_name, point_type, point_status) +SELECT UUID_SHORT(), seed.point_code, seed.point_name, '1', '1' +FROM ( + SELECT 'ZJXX_01' AS point_code, '子卷下线点01' AS point_name + UNION ALL + SELECT 'ZJXX_02', '子卷下线点02' + UNION ALL + SELECT 'ZJXX_03', '子卷下线点03' + UNION ALL + SELECT 'ZJXX_04', '子卷下线点04' + UNION ALL + SELECT 'ZJXX_05', '子卷下线点05' + UNION ALL + SELECT 'ZJXX_06', '子卷下线点06' + ) seed +WHERE NOT EXISTS ( + SELECT 1 + FROM lms_package_point existing + WHERE existing.point_code = seed.point_code + AND existing.deleted = b'0' +); + +-- 菜单 SQL +INSERT INTO system_menu(name, permission, type, sort, parent_id, + path, icon, component, status, component_name) +VALUES ('装箱区管理', '', 2, 0, 6741, + 'package-point', '', 'lms/packagepoint/index', 0, 'PackagePoint'); + +-- 按钮父菜单ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +INSERT INTO system_menu(name, permission, type, sort, parent_id, + path, icon, component, status) +VALUES ('装箱区点位库存查询', 'lms:package-point:query', 3, 1, @parentId, + '', '', '', 0); +INSERT INTO system_menu(name, permission, type, sort, parent_id, + path, icon, component, status) +VALUES ('装箱区点位库存创建', 'lms:package-point:create', 3, 2, @parentId, + '', '', '', 0); +INSERT INTO system_menu(name, permission, type, sort, parent_id, + path, icon, component, status) +VALUES ('装箱区点位库存更新', 'lms:package-point:update', 3, 3, @parentId, + '', '', '', 0); +INSERT INTO system_menu(name, permission, type, sort, parent_id, + path, icon, component, status) +VALUES ('装箱区点位库存删除', 'lms:package-point:delete', 3, 4, @parentId, + '', '', '', 0); +INSERT INTO system_menu(name, permission, type, sort, parent_id, + path, icon, component, status) +VALUES ('装箱区点位库存导出', 'lms:package-point:export', 3, 5, @parentId, + '', '', '', 0);