diff --git a/nl-gateway/src/main/resources/application-dev.yaml b/nl-gateway/src/main/resources/application-dev.yaml index 1c16ab0b..7b546c05 100644 --- a/nl-gateway/src/main/resources/application-dev.yaml +++ b/nl-gateway/src/main/resources/application-dev.yaml @@ -7,10 +7,10 @@ spring: username: nacos password: nacos discovery: # 【配置中心】配置项 - namespace: 91c8ac41-7fb0-423b-947e-2caad4c87d41 # 命名空间。这里使用 dev 开发环境 + namespace: 9a321b6b-68c6-45e1-90b0-bc187d7c29bb # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP config: # 【注册中心】配置项 - namespace: 91c8ac41-7fb0-423b-947e-2caad4c87d41 # 命名空间。这里使用 dev 开发环境 + namespace: 9a321b6b-68c6-45e1-90b0-bc187d7c29bb # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP --- #################### 监控相关配置 #################### @@ -32,4 +32,4 @@ spring: instance: service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] username: admin - password: admin \ No newline at end of file + password: admin diff --git a/nl-module-base/nl-module-base-server/src/main/resources/application-dev.yaml b/nl-module-base/nl-module-base-server/src/main/resources/application-dev.yaml index 37d19abb..63b9fe66 100644 --- a/nl-module-base/nl-module-base-server/src/main/resources/application-dev.yaml +++ b/nl-module-base/nl-module-base-server/src/main/resources/application-dev.yaml @@ -3,16 +3,16 @@ spring: cloud: nacos: - server-addr: 192.168.81.193:8848 # Nacos 服务器地址 + server-addr: http://192.168.81.193:8848 # Nacos 服务器地址 username: nacos password: nacos discovery: # 【配置中心】配置项 - namespace: 91c8ac41-7fb0-423b-947e-2caad4c87d41 # 命名空间。这里使用 dev 开发环境 + namespace: 9a321b6b-68c6-45e1-90b0-bc187d7c29bb # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP metadata: version: 1.0.0 # 服务实例的版本号,可用于灰度发布 config: # 【注册中心】配置项 - namespace: 91c8ac41-7fb0-423b-947e-2caad4c87d41 # 命名空间。这里使用 dev 开发环境 + namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP --- #################### 数据库相关配置 #################### @@ -57,14 +57,14 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.81.193:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: root + password: root123 slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.81.193:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: root + password: root123 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: @@ -95,11 +95,11 @@ spring: xxl: job: admin: - addresses: http://192.168.81.193:8080/xxl-job-admin # 调度中心部署跟地址 - accessToken: default_token # 执行器通讯TOKEN + addresses: http://localhost:8080/xxl-job-admin # 调度中心部署跟地址 + accessToken: 123456 # 执行器通讯TOKEN executor: - ip: 192.168.81.193 - port: 8993 + ip: localhost + port: 9993 --- #################### 服务保障相关配置 #################### @@ -140,4 +140,4 @@ logging: # 芋道配置项,设置当前项目所有自定义的配置 nl: - demo: false # 开启演示模式 \ No newline at end of file + demo: false # 开启演示模式 diff --git a/nl-module-base/nl-module-base-server/src/main/resources/mapper/classstandard/ClassStandardMapper.xml b/nl-module-base/nl-module-base-server/src/main/resources/mapper/classstandard/BtIvtCutpointivtMapper.xml similarity index 100% rename from nl-module-base/nl-module-base-server/src/main/resources/mapper/classstandard/ClassStandardMapper.xml rename to nl-module-base/nl-module-base-server/src/main/resources/mapper/classstandard/BtIvtCutpointivtMapper.xml diff --git a/nl-module-base/nl-module-base-server/src/main/resources/mapper/codegen/CodeSequenceMapper.xml b/nl-module-base/nl-module-base-server/src/main/resources/mapper/codegen/BtIvtCutpointivtMapper.xml similarity index 100% rename from nl-module-base/nl-module-base-server/src/main/resources/mapper/codegen/CodeSequenceMapper.xml rename to nl-module-base/nl-module-base-server/src/main/resources/mapper/codegen/BtIvtCutpointivtMapper.xml diff --git a/nl-module-base/nl-module-base-server/src/main/resources/mapper/materialbase/MaterialBaseMapper.xml b/nl-module-base/nl-module-base-server/src/main/resources/mapper/materialbase/BtIvtCutpointivtMapper.xml similarity index 100% rename from nl-module-base/nl-module-base-server/src/main/resources/mapper/materialbase/MaterialBaseMapper.xml rename to nl-module-base/nl-module-base-server/src/main/resources/mapper/materialbase/BtIvtCutpointivtMapper.xml diff --git a/nl-module-base/nl-module-base-server/src/main/resources/mapper/measureunit/MeasureUnitMapper.xml b/nl-module-base/nl-module-base-server/src/main/resources/mapper/measureunit/BtIvtCutpointivtMapper.xml similarity index 100% rename from nl-module-base/nl-module-base-server/src/main/resources/mapper/measureunit/MeasureUnitMapper.xml rename to nl-module-base/nl-module-base-server/src/main/resources/mapper/measureunit/BtIvtCutpointivtMapper.xml diff --git a/nl-module-infra/nl-module-infra-server/src/main/resources/application-dev.yaml b/nl-module-infra/nl-module-infra-server/src/main/resources/application-dev.yaml index bd488096..606d8cf3 100644 --- a/nl-module-infra/nl-module-infra-server/src/main/resources/application-dev.yaml +++ b/nl-module-infra/nl-module-infra-server/src/main/resources/application-dev.yaml @@ -7,12 +7,12 @@ spring: username: nacos password: nacos discovery: # 【配置中心】配置项 - namespace: 91c8ac41-7fb0-423b-947e-2caad4c87d41 # 命名空间。这里使用 dev 开发环境 + namespace: 9a321b6b-68c6-45e1-90b0-bc187d7c29bb # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP metadata: version: 1.0.0 # 服务实例的版本号,可用于灰度发布 config: # 【注册中心】配置项 - namespace: 91c8ac41-7fb0-423b-947e-2caad4c87d41 # 命名空间。这里使用 dev 开发环境 + namespace: 9a321b6b-68c6-45e1-90b0-bc187d7c29bb # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP --- #################### 数据库相关配置 #################### @@ -57,14 +57,14 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.81.193:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: root + password: root123 slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.81.193:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: root + password: root123 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: @@ -96,10 +96,10 @@ xxl: job: admin: addresses: http://192.168.81.193:8080/xxl-job-admin # 调度中心部署跟地址 - accessToken: default_token # 执行器通讯TOKEN + accessToken: 123456 # 执行器通讯TOKEN executor: ip: 192.168.81.193 - port: 8991 + port: 9981 --- #################### 服务保障相关配置 #################### diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/EmptyRollerPointTypeEnum.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/EmptyRollerPointTypeEnum.java new file mode 100644 index 00000000..47630234 --- /dev/null +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/EmptyRollerPointTypeEnum.java @@ -0,0 +1,26 @@ +package cn.code.nl.module.lms.enums; + +import lombok.Getter; + +/** + * @author dsh + * 2026/7/28 + */ +@Getter +public enum EmptyRollerPointTypeEnum { + + RAW_FOIL_EMPTY_ROLLER_POINT("1","生箔空辊点"), + CUT_EMPTY_ROLLER_POINT("2","分切空辊点"), + RAW_FOIL_EMPTY_ROLLER_WAIT_POINT("3","生箔空辊等待点"), + CUT_EMPTY_ROLLER_POINT_WAIT_POINT("4","分切空辊等待点"); + + + private String code; + + private String name; + + EmptyRollerPointTypeEnum(String code,String name){ + this.code = code; + this.name = name; + } +} 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 91130ae3..0dbab9ae 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 @@ -10,6 +10,10 @@ public interface ErrorCodeConstants { // ========== 生箔点位库存 ========== ErrorCode RAW_FOIL_POINT_IVT_NOT_EXISTS = new ErrorCode(1, "生箔点位库存不存在"); + ErrorCode IVT_CUTPOINTIVT_NOT_EXISTS = new ErrorCode(2, "分切设备点位不存在"); + + ErrorCode IVT_SHAFTTUBEIVT_NOT_EXISTS = new ErrorCode(3, "穿拔轴点位不存在"); + // ========== 生箔工序工单 ========== ErrorCode RAW_FOIL_WORK_ORDER_NOT_EXISTS = new ErrorCode(2, "生箔工序工单不存在"); @@ -17,6 +21,29 @@ 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 RAW_FOIL_WORK_ORDER_STATUS_NOT_START = new ErrorCode(7, "工单状态不为开始"); + ErrorCode RAW_FOIL_WORK_ORDER_POINT_CODE_NOT_USED = new ErrorCode(8, "生箔设备未启用"); + ErrorCode RAW_FOIL_WORK_ORDER_POINT_OCCUPIED = new ErrorCode(12, "点位:{}被占用"); + ErrorCode RAW_FOIL_WORK_ORDER_FAIL = new ErrorCode(15, "获取生箔工单存在未完成的任务异常"); + ErrorCode RAW_FOIL_WORK_ORDER_NOT_SELECT = new ErrorCode(16, "生箔工单存在未完成的任务,请先完成任务"); + + // ========== 空辊缓存位 ========== + ErrorCode RAW_FOIL_EMPTY_ROLLER_CASHE_POSITION_NOT_EXISTS = new ErrorCode(9, "空辊缓存位不存在"); + ErrorCode EMPTY_ROLLER_CASHE_POSITION_WAIT_POINT_NOT_EXISTS = new ErrorCode(10, "空辊缓存位找不到等待点"); + ErrorCode EMPTY_ROLLER_CASHE_POSITION_NOT_ALLOCATE = new ErrorCode(18, "未查询到有空辊缓存位"); + + // ========== 生箔母卷缓存位 ========== + ErrorCode RAW_FOIL_CASHE_POSITION_NOT_EXISTS = new ErrorCode(11, "生箔母卷缓存位不存在"); + ErrorCode RAW_FOIL_CASHE_POSITION_NOT_SELECT = new ErrorCode(13, "未查询到有生箔母卷缓存位"); + ErrorCode RAW_FOIL_TRANSPORT_TASK_CREATE_FAIL = new ErrorCode(14, "创建搬运任务失败"); + + // =========== 生箔任务 ========== + ErrorCode RAW_FOIL_TASK_ERROR = new ErrorCode(17, "任务不存在或查询失败"); + + // ========== 生箔称重完成入库 ========== + ErrorCode RAW_FOIL_WORK_ORDER_STATUS_NOT_EXECUTION = new ErrorCode(19, "生箔工序工单状态不为执行中"); + ErrorCode RAW_FOIL_WEIGHING_POSITION_NOT_EXISTS = new ErrorCode(20, "称重位不存在"); + ErrorCode RAW_FOIL_CONTAINER_NOT_ON_WEIGHING_POSITION = new ErrorCode(21, "母卷不在称重位"); // ========== 装箱区点位库存 ========== ErrorCode PACKAGE_POINT_NOT_EXISTS = new ErrorCode(200001, "装箱区点位库存不存在"); diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/LockStatusEnum.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/LockStatusEnum.java new file mode 100644 index 00000000..8d09a040 --- /dev/null +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/LockStatusEnum.java @@ -0,0 +1,24 @@ +package cn.code.nl.module.lms.enums; + +import lombok.Getter; + +/** + * @author dsh + * 2026/7/30 + */ +@Getter +public enum LockStatusEnum { + + IDLE("0","空闲"), + OCCUPIED("1","占用"); + + + private String code; + + private String name; + + LockStatusEnum(String code,String name){ + this.code = code; + this.name = name; + } +} diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilCashePositionTypeEnum.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilCashePositionTypeEnum.java new file mode 100644 index 00000000..501326c2 --- /dev/null +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilCashePositionTypeEnum.java @@ -0,0 +1,27 @@ +package cn.code.nl.module.lms.enums; + +import lombok.Getter; + +/** + * @author dsh + * 2026/7/28 + */ +@Getter +public enum RawFoilCashePositionTypeEnum { + + CONVENTIONAL("1","常规"), + WEIGHING_BUFFER_POSITION("2","称重缓存位"), + WEIGHING_POSITION("3","称重位"); + + + private String code; + + private String name; + + RawFoilCashePositionTypeEnum(String code,String name){ + this.code = code; + this.name = name; + } + + +} diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilHandleCodeConstants.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilHandleCodeConstants.java new file mode 100644 index 00000000..44cd7035 --- /dev/null +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilHandleCodeConstants.java @@ -0,0 +1,14 @@ +package cn.code.nl.module.lms.enums; + +/** + * 生箔工序任务回调处理器编码常量 + * @author dsh + * 2026/7/28 + */ +public interface RawFoilHandleCodeConstants { + + String RAW_FOIL_TASK = "rawFoilTask"; + + /** 生箔入库任务(称重完成 → 常规缓存位)回调处理器编码 */ + String RAW_FOIL_INSTORAGE_TASK = "rawFoilInstorageTask"; +} diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilWorkOrderStatusEnum.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilWorkOrderStatusEnum.java index 6e64e4b2..c3cbcb12 100644 --- a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilWorkOrderStatusEnum.java +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/RawFoilWorkOrderStatusEnum.java @@ -11,9 +11,7 @@ import lombok.Getter; public enum RawFoilWorkOrderStatusEnum { START("01","开始"), - EMPTY_OUT("02","空轴搬出"), - CONFIRM_VOLUME("03","确认下卷"), - VOLUME_COMPLETE("04","下卷完成"), + EXECUTION("02","执行中"), END("09","结束"); diff --git a/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/StockStatusEnum.java b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/StockStatusEnum.java new file mode 100644 index 00000000..654d75e1 --- /dev/null +++ b/nl-module-lms/nl-module-lms-api/src/main/java/cn/code/nl/module/lms/enums/StockStatusEnum.java @@ -0,0 +1,24 @@ +package cn.code.nl.module.lms.enums; + +import lombok.Getter; + +/** + * @author dsh + * 2026/8/4 + */ +@Getter +public enum StockStatusEnum { + + YES("1","有货"), + NO("2","无货"); + + + private String code; + + private String name; + + StockStatusEnum(String code,String name){ + this.code = code; + this.name = name; + } +} diff --git a/nl-module-lms/nl-module-lms-server/pom.xml b/nl-module-lms/nl-module-lms-server/pom.xml index 856cdea8..19c1f7cc 100644 --- a/nl-module-lms/nl-module-lms-server/pom.xml +++ b/nl-module-lms/nl-module-lms-server/pom.xml @@ -121,6 +121,19 @@ cn.nl.cloud nl-spring-boot-starter-monitor + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.mockito + mockito-core + + + diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/acs/AcsToLmsController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/acs/AcsToLmsController.java new file mode 100644 index 00000000..84ebd4ab --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/acs/AcsToLmsController.java @@ -0,0 +1,36 @@ +package cn.code.nl.module.lms.controller.acs; + +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.module.lms.controller.acs.vo.WeighingCompleteReqVO; +import cn.code.nl.module.lms.service.acs.AcsToLmsService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author dsh + * 2026/8/4 + */ +@Tag(name = "管理后台 - ACS上报LMS") +@RestController +@RequestMapping("api/lms/task") +@Validated +public class AcsToLmsController { + + @Resource + private AcsToLmsService acsToLmsService; + + + @PostMapping("/apply") + @Operation(summary = "ACS上报称重完成") + public CommonResult weighingComplete(@Valid @RequestBody WeighingCompleteReqVO weighingCompleteReqVO) { + acsToLmsService.weighingComplete(weighingCompleteReqVO); + return CommonResult.success(null); + } +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/acs/vo/WeighingCompleteReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/acs/vo/WeighingCompleteReqVO.java new file mode 100644 index 00000000..b7e97290 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/acs/vo/WeighingCompleteReqVO.java @@ -0,0 +1,25 @@ +package cn.code.nl.module.lms.controller.acs.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author dsh + * 2026/8/4 + */ +@Data +public class WeighingCompleteReqVO { + + @Schema(description = "母卷号") + @NotNull(message = "母卷号不能为空") + private String containerName; + + @Schema(description = "重量") + @NotNull(message = "重量不能为空") + private BigDecimal productWeight; + + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/BtIvtCutpointivtController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/BtIvtCutpointivtController.java new file mode 100644 index 00000000..5fbb8ab0 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/BtIvtCutpointivtController.java @@ -0,0 +1,105 @@ +package cn.code.nl.module.lms.controller.admin.btcutpointivt; + +import cn.code.nl.module.lms.controller.admin.btcutpointivt.vo.BtIvtCutpointivtPageReqVO; +import cn.code.nl.module.lms.controller.admin.btcutpointivt.vo.BtIvtCutpointivtRespVO; +import cn.code.nl.module.lms.controller.admin.btcutpointivt.vo.BtIvtCutpointivtSaveReqVO; +import cn.code.nl.module.lms.dal.dataobject.btivtcutpointivt.BtIvtCutpointivtDO; +import cn.code.nl.module.lms.service.ivtcutpointivt.BtIvtCutpointivtService; +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.*; +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.*; + + +@Tag(name = "管理后台 - 分切区缓存点位库存") +@RestController +@RequestMapping("/btcutpointivt/ivt-cutpointivt") +@Validated +public class BtIvtCutpointivtController { + + @Resource + private BtIvtCutpointivtService ivtCutpointivtService; + + @PostMapping("/create") + @Operation(summary = "创建分切区缓存点位库存") + @PreAuthorize("@ss.hasPermission('btcutpointivt:ivt-cutpointivt:create')") + public CommonResult createIvtCutpointivt(@Valid @RequestBody BtIvtCutpointivtSaveReqVO createReqVO) { + return success(ivtCutpointivtService.createIvtCutpointivt(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新分切区缓存点位库存") + @PreAuthorize("@ss.hasPermission('btcutpointivt:ivt-cutpointivt:update')") + public CommonResult updateIvtCutpointivt(@Valid @RequestBody BtIvtCutpointivtSaveReqVO updateReqVO) { + ivtCutpointivtService.updateIvtCutpointivt(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除分切区缓存点位库存") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('btcutpointivt:ivt-cutpointivt:delete')") + public CommonResult deleteIvtCutpointivt(@RequestParam("id") Long id) { + ivtCutpointivtService.deleteIvtCutpointivt(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除分切区缓存点位库存") + @PreAuthorize("@ss.hasPermission('btcutpointivt:ivt-cutpointivt:delete')") + public CommonResult deleteIvtCutpointivtList(@RequestParam("ids") List ids) { + ivtCutpointivtService.deleteIvtCutpointivtListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得分切区缓存点位库存") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('btcutpointivt:ivt-cutpointivt:query')") + public CommonResult getIvtCutpointivt(@RequestParam("id") Long id) { + BtIvtCutpointivtDO ivtCutpointivt = ivtCutpointivtService.getIvtCutpointivt(id); + return success(BeanUtils.toBean(ivtCutpointivt, BtIvtCutpointivtRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得分切区缓存点位库存分页") + @PreAuthorize("@ss.hasPermission('btcutpointivt:ivt-cutpointivt:query')") + public CommonResult> getIvtCutpointivtPage(@Valid BtIvtCutpointivtPageReqVO pageReqVO) { + PageResult pageResult = ivtCutpointivtService.getIvtCutpointivtPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, BtIvtCutpointivtRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出分切区缓存点位库存 Excel") + @PreAuthorize("@ss.hasPermission('btcutpointivt:ivt-cutpointivt:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportIvtCutpointivtExcel(@Valid BtIvtCutpointivtPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = ivtCutpointivtService.getIvtCutpointivtPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "分切区缓存点位库存.xls", "数据", BtIvtCutpointivtRespVO.class, + BeanUtils.toBean(list, BtIvtCutpointivtRespVO.class)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/vo/BtIvtCutpointivtPageReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/vo/BtIvtCutpointivtPageReqVO.java new file mode 100644 index 00000000..f8a28159 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/vo/BtIvtCutpointivtPageReqVO.java @@ -0,0 +1,36 @@ +package cn.code.nl.module.lms.controller.admin.btcutpointivt.vo; + +import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.code.nl.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; + +import static cn.code.nl.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 分切区缓存点位库存分页 Request VO") +@Data +public class BtIvtCutpointivtPageReqVO extends PageParam { + + @Schema(description = "id") + private Long ivtId; + + @Schema(description = "AGV点位编码") + private String pointCode; + + @Schema(description = "点位类型,1-分切缓存位,2-分切对接位,3-套轴对接位,4-套轴缓存位", example = "2") + private String pointType; + + @Schema(description = "生产区域") + private String productArea; + + @Schema(description = "是否启用") + private String isUsed; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] createTime; + + @Schema(description = "点位状态", example = "2") + private String pointStatus; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/vo/BtIvtCutpointivtRespVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/vo/BtIvtCutpointivtRespVO.java new file mode 100644 index 00000000..a48fced1 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/vo/BtIvtCutpointivtRespVO.java @@ -0,0 +1,92 @@ +package cn.code.nl.module.lms.controller.admin.btcutpointivt.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 分切区缓存点位库存 Response VO") +@Data +@ExcelIgnoreUnannotated +public class BtIvtCutpointivtRespVO { + + @Schema(description = "库存记录标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "16196") + @ExcelProperty("库存记录标识") + private Long ivtId; + + @Schema(description = "AGV点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("AGV点位编码") + private String pointCode; + + @Schema(description = "AGV点位名称", example = "芋艿") + @ExcelProperty("AGV点位名称") + private String pointName; + + @Schema(description = "桁架点位编码1 ", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("桁架点位编码1 ") + private String trussPointCode1; + + @Schema(description = "桁架点位编码2", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("桁架点位编码2") + private String trussPointCode2; + + @Schema(description = "气胀轴编码1") + @ExcelProperty("气胀轴编码1") + private String qzzNo1; + + @Schema(description = "气胀轴编码2") + @ExcelProperty("气胀轴编码2") + private String qzzNo2; + + @Schema(description = "上轴管芯") + @ExcelProperty("上轴管芯") + private String upGx; + + @Schema(description = "下轴管芯") + @ExcelProperty("下轴管芯") + private String downGx; + + @Schema(description = "点位类型,1-分切缓存位,2-分切对接位,3-套轴对接位,4-套轴缓存位", example = "2") + @ExcelProperty("点位类型,1-分切缓存位,2-分切对接位,3-套轴对接位,4-套轴缓存位") + private String pointType; + + @Schema(description = "生产区域") + @ExcelProperty("生产区域") + private String productArea; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("顺序号") + private Integer sortSeq; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private String isUsed; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED, example = "16464") + @ExcelProperty("创建人") + private String createId; + + @Schema(description = "创建人姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @ExcelProperty("创建人姓名") + private String createName; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private String createTime; + + @Schema(description = "修改人", example = "1014") + @ExcelProperty("修改人") + private String updateOptid; + + @Schema(description = "修改人姓名", example = "芋艿") + @ExcelProperty("修改人姓名") + private String updateOptname; + + @Schema(description = "点位状态", example = "2") + @ExcelProperty("点位状态") + private String pointStatus; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/vo/BtIvtCutpointivtSaveReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/vo/BtIvtCutpointivtSaveReqVO.java new file mode 100644 index 00000000..a056f5c2 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/btcutpointivt/vo/BtIvtCutpointivtSaveReqVO.java @@ -0,0 +1,62 @@ +package cn.code.nl.module.lms.controller.admin.btcutpointivt.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 分切区缓存点位库存新增/修改 Request VO") +@Data +public class BtIvtCutpointivtSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "id不能为空") + private Long ivtId; + + @Schema(description = "AGV点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "AGV点位编码不能为空") + private String pointCode; + + @Schema(description = "AGV点位名称", example = "芋艿") + private String pointName; + + @Schema(description = "桁架点位编码1 ", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "桁架点位编码1 不能为空") + private String trussPointCode1; + + @Schema(description = "桁架点位编码2", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "桁架点位编码2不能为空") + private String trussPointCode2; + + @Schema(description = "气胀轴编码1") + private String qzzNo1; + + @Schema(description = "气胀轴编码2") + private String qzzNo2; + + @Schema(description = "上轴管芯") + private String upGx; + + @Schema(description = "下轴管芯") + private String downGx; + + @Schema(description = "点位类型,1-分切缓存位,2-分切对接位,3-套轴对接位,4-套轴缓存位", example = "2") + private String pointType; + + @Schema(description = "生产区域") + private String productArea; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "顺序号不能为空") + private Integer sortSeq; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否启用不能为空") + private String isUsed; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "点位状态", example = "2") + private String pointStatus; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/IvtCutpointivtController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/IvtCutpointivtController.java new file mode 100644 index 00000000..81edaaa2 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/IvtCutpointivtController.java @@ -0,0 +1,104 @@ +package cn.code.nl.module.lms.controller.admin.cutpointivt; + +import cn.code.nl.module.lms.controller.admin.cutpointivt.vo.IvtCutpointivtPageReqVO; +import cn.code.nl.module.lms.controller.admin.cutpointivt.vo.IvtCutpointivtRespVO; +import cn.code.nl.module.lms.controller.admin.cutpointivt.vo.IvtCutpointivtSaveReqVO; +import cn.code.nl.module.lms.dal.dataobject.cutpointIvt.IvtCutpointivtDO; +import cn.code.nl.module.lms.service.cutpointIvt.IvtCutpointivtService; +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.*; +@Tag(name = "管理后台 - 分切区点位库存") +@RestController +@RequestMapping("/cutpointivt/ivt-cutpointivt") +@Validated +public class IvtCutpointivtController { + + @Resource + private IvtCutpointivtService ivtCutpointivtService; + + @PostMapping("/create") + @Operation(summary = "创建分切区点位库存") + @PreAuthorize("@ss.hasPermission('cutpointivt:ivt-cutpointivt:create')") + public CommonResult createIvtCutpointivt(@Valid @RequestBody IvtCutpointivtSaveReqVO createReqVO) { + return success(ivtCutpointivtService.createIvtCutpointivt(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新分切区点位库存") + @PreAuthorize("@ss.hasPermission('cutpointivt:ivt-cutpointivt:update')") + public CommonResult updateIvtCutpointivt(@Valid @RequestBody IvtCutpointivtSaveReqVO updateReqVO) { + ivtCutpointivtService.updateIvtCutpointivt(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除分切区点位库存") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('cutpointivt:ivt-cutpointivt:delete')") + public CommonResult deleteIvtCutpointivt(@RequestParam("id") Long id) { + ivtCutpointivtService.deleteIvtCutpointivt(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除分切区点位库存") + @PreAuthorize("@ss.hasPermission('cutpointivt:ivt-cutpointivt:delete')") + public CommonResult deleteIvtCutpointivtList(@RequestParam("ids") List ids) { + ivtCutpointivtService.deleteIvtCutpointivtListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得分切区点位库存") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('cutpointivt:ivt-cutpointivt:query')") + public CommonResult getIvtCutpointivt(@RequestParam("id") Long id) { + IvtCutpointivtDO ivtCutpointivt = ivtCutpointivtService.getIvtCutpointivt(id); + return success(BeanUtils.toBean(ivtCutpointivt, IvtCutpointivtRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得分切区点位库存分页") + @PreAuthorize("@ss.hasPermission('cutpointivt:ivt-cutpointivt:query')") + public CommonResult> getIvtCutpointivtPage(@Valid IvtCutpointivtPageReqVO pageReqVO) { + PageResult pageResult = ivtCutpointivtService.getIvtCutpointivtPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, IvtCutpointivtRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出分切区点位库存 Excel") + @PreAuthorize("@ss.hasPermission('cutpointivt:ivt-cutpointivt:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportIvtCutpointivtExcel(@Valid IvtCutpointivtPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = ivtCutpointivtService.getIvtCutpointivtPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "分切区点位库存.xls", "数据", IvtCutpointivtRespVO.class, + BeanUtils.toBean(list, IvtCutpointivtRespVO.class)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/vo/IvtCutpointivtPageReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/vo/IvtCutpointivtPageReqVO.java new file mode 100644 index 00000000..f6948ede --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/vo/IvtCutpointivtPageReqVO.java @@ -0,0 +1,27 @@ +package cn.code.nl.module.lms.controller.admin.cutpointivt.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.code.nl.framework.common.pojo.PageParam; + +@Schema(description = "管理后台 - 分切区点位库存分页 Request VO") +@Data +public class IvtCutpointivtPageReqVO extends PageParam { + + @Schema(description = "点位编码") + private String pointCode; + + @Schema(description = "满轴位状态", example = "1") + private String fullPointStatus; + + @Schema(description = "空轴位状态", example = "1") + private String emptyPointStatus; + + @Schema(description = "生产区域") + private String productArea; + + @Schema(description = "是否启用") + private String isUsed; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/vo/IvtCutpointivtRespVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/vo/IvtCutpointivtRespVO.java new file mode 100644 index 00000000..98e10979 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/vo/IvtCutpointivtRespVO.java @@ -0,0 +1,117 @@ +package cn.code.nl.module.lms.controller.admin.cutpointivt.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 分切区点位库存 Response VO") +@Data +@ExcelIgnoreUnannotated +public class IvtCutpointivtRespVO { + + @Schema(description = "库存记录标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "12268") + @ExcelProperty("库存记录标识") + private Long ivtId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("点位编码") + private String pointCode; + + @Schema(description = "满轴位编码") + @ExcelProperty("满轴位编码") + private String fullPointCode; + + @Schema(description = "满轴位状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("满轴位状态") + private String fullPointStatus; + + @Schema(description = "母卷号", example = "芋艿") + @ExcelProperty("母卷号") + private String containerName; + + @Schema(description = "母卷轴编码") + @ExcelProperty("母卷轴编码") + private String fullVehicleCode; + + @Schema(description = "空轴位编码") + @ExcelProperty("空轴位编码") + private String emptyPointCode; + + @Schema(description = "空轴位状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("空轴位状态") + private String emptyPointStatus; + + @Schema(description = "空轴编码") + @ExcelProperty("空轴编码") + private String emptyVehicleCode; + + @Schema(description = "生产区域") + @ExcelProperty("生产区域") + private String productArea; + + @Schema(description = "位置") + @ExcelProperty("位置") + private String pointLocation; + + @Schema(description = "分切下料位上轴点位") + @ExcelProperty("分切下料位上轴点位") + private String upPointCode; + + @Schema(description = "分切下料位下轴点位") + @ExcelProperty("分切下料位下轴点位") + private String downPointCode; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("顺序号") + private Integer sortSeq; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private String isUsed; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED, example = "3118") + @ExcelProperty("创建人") + private Long createId; + + @Schema(description = "创建人姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @ExcelProperty("创建人姓名") + private String createName; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private String createTime; + + @Schema(description = "修改人", example = "3176") + @ExcelProperty("修改人") + private Long updateOptid; + + @Schema(description = "修改人姓名", example = "赵六") + @ExcelProperty("修改人姓名") + private String updateOptname; + + @Schema(description = "规划") + @ExcelProperty("规划") + private String plan; + + @Schema(description = "对应MES系统设备编码") + @ExcelProperty("对应MES系统设备编码") + private String extCode; + + @Schema(description = "分切下料位上轴") + @ExcelProperty("分切下料位上轴") + private String upQzzno; + + @Schema(description = "分切下料位下轴") + @ExcelProperty("分切下料位下轴") + private String downQzzno; + + @Schema(description = "气胀轴代数") + @ExcelProperty("气胀轴代数") + private String qzzGeneration; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/vo/IvtCutpointivtSaveReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/vo/IvtCutpointivtSaveReqVO.java new file mode 100644 index 00000000..35cd34d8 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/cutpointivt/vo/IvtCutpointivtSaveReqVO.java @@ -0,0 +1,95 @@ +package cn.code.nl.module.lms.controller.admin.cutpointivt.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 IvtCutpointivtSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "id不能为空") + private Long ivtId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "点位编码不能为空") + private String pointCode; + + @Schema(description = "满轴位编码") + private String fullPointCode; + + @Schema(description = "满轴位状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "满轴位状态不能为空") + private String fullPointStatus; + + @Schema(description = "母卷号", example = "芋艿") + private String containerName; + + @Schema(description = "母卷轴编码") + private String fullVehicleCode; + + @Schema(description = "空轴位编码") + private String emptyPointCode; + + @Schema(description = "空轴位状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "空轴位状态不能为空") + private String emptyPointStatus; + + @Schema(description = "空轴编码") + private String emptyVehicleCode; + + @Schema(description = "生产区域") + private String productArea; + + @Schema(description = "位置") + private String pointLocation; + + @Schema(description = "分切下料位上轴点位") + private String upPointCode; + + @Schema(description = "分切下料位下轴点位") + private String downPointCode; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "顺序号不能为空") + private Integer sortSeq; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否启用不能为空") + private String isUsed; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED, example = "3118") + @NotNull(message = "创建人不能为空") + private Long createId; + + @Schema(description = "创建人姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @NotEmpty(message = "创建人姓名不能为空") + private String createName; + + @Schema(description = "修改人", example = "3176") + private Long updateOptid; + + @Schema(description = "修改人姓名", example = "赵六") + private String updateOptname; + + @Schema(description = "规划") + private String plan; + + @Schema(description = "对应MES系统设备编码") + private String extCode; + + @Schema(description = "分切下料位上轴") + private String upQzzno; + + @Schema(description = "分切下料位下轴") + private String downQzzno; + + @Schema(description = "气胀轴代数") + private String qzzGeneration; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/IvtShafttubeivtController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/IvtShafttubeivtController.java new file mode 100644 index 00000000..bc2259a7 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/IvtShafttubeivtController.java @@ -0,0 +1,107 @@ +package cn.code.nl.module.lms.controller.admin.ivtshafttubeivt; + +import cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo.IvtShafttubeivtPageReqVO; +import cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo.IvtShafttubeivtRespVO; +import cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo.IvtShafttubeivtSaveReqVO; +import cn.code.nl.module.lms.dal.dataobject.ivtshafttubeivt.IvtShafttubeivtDO; +import cn.code.nl.module.lms.service.ivtshafttubeivt.IvtShafttubeivtService; +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.*; + + + +@Tag(name = "管理后台 - 穿拔轴区点位库存") +@RestController +@RequestMapping("/ivtshafttubeivt/ivt-shafttubeivt") +@Validated +public class IvtShafttubeivtController { + + @Resource + private IvtShafttubeivtService ivtShafttubeivtService; + + @PostMapping("/create") + @Operation(summary = "创建穿拔轴区点位库存") + @PreAuthorize("@ss.hasPermission('ivtshafttubeivt:ivt-shafttubeivt:create')") + public CommonResult createIvtShafttubeivt(@Valid @RequestBody IvtShafttubeivtSaveReqVO createReqVO) { + return success(ivtShafttubeivtService.createIvtShafttubeivt(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新穿拔轴区点位库存") + @PreAuthorize("@ss.hasPermission('ivtshafttubeivt:ivt-shafttubeivt:update')") + public CommonResult updateIvtShafttubeivt(@Valid @RequestBody IvtShafttubeivtSaveReqVO updateReqVO) { + ivtShafttubeivtService.updateIvtShafttubeivt(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除穿拔轴区点位库存") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('ivtshafttubeivt:ivt-shafttubeivt:delete')") + public CommonResult deleteIvtShafttubeivt(@RequestParam("id") Long id) { + ivtShafttubeivtService.deleteIvtShafttubeivt(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除穿拔轴区点位库存") + @PreAuthorize("@ss.hasPermission('ivtshafttubeivt:ivt-shafttubeivt:delete')") + public CommonResult deleteIvtShafttubeivtList(@RequestParam("ids") List ids) { + ivtShafttubeivtService.deleteIvtShafttubeivtListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得穿拔轴区点位库存") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('ivtshafttubeivt:ivt-shafttubeivt:query')") + public CommonResult getIvtShafttubeivt(@RequestParam("id") Long id) { + IvtShafttubeivtDO ivtShafttubeivt = ivtShafttubeivtService.getIvtShafttubeivt(id); + return success(BeanUtils.toBean(ivtShafttubeivt, IvtShafttubeivtRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得穿拔轴区点位库存分页") + @PreAuthorize("@ss.hasPermission('ivtshafttubeivt:ivt-shafttubeivt:query')") + public CommonResult> getIvtShafttubeivtPage(@Valid IvtShafttubeivtPageReqVO pageReqVO) { + PageResult pageResult = ivtShafttubeivtService.getIvtShafttubeivtPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, IvtShafttubeivtRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出穿拔轴区点位库存 Excel") + @PreAuthorize("@ss.hasPermission('ivtshafttubeivt:ivt-shafttubeivt:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportIvtShafttubeivtExcel(@Valid IvtShafttubeivtPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = ivtShafttubeivtService.getIvtShafttubeivtPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "穿拔轴区点位库存.xls", "数据", IvtShafttubeivtRespVO.class, + BeanUtils.toBean(list, IvtShafttubeivtRespVO.class)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/vo/IvtShafttubeivtPageReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/vo/IvtShafttubeivtPageReqVO.java new file mode 100644 index 00000000..934f6046 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/vo/IvtShafttubeivtPageReqVO.java @@ -0,0 +1,22 @@ +package cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo; + +import cn.idev.excel.annotation.ExcelProperty; +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.code.nl.framework.common.pojo.PageParam; + +@Schema(description = "管理后台 - 穿拔轴区点位库存分页 Request VO") +@Data +public class IvtShafttubeivtPageReqVO extends PageParam { + + @Schema(description = "id") + private Long ivtId; + + @Schema(description = "点位编码") + private String pointCode; + + @Schema(description = "点位类型", example = "2") + private String pointType; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/vo/IvtShafttubeivtRespVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/vo/IvtShafttubeivtRespVO.java new file mode 100644 index 00000000..cda9c4e1 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/vo/IvtShafttubeivtRespVO.java @@ -0,0 +1,93 @@ +package cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 穿拔轴区点位库存 Response VO") +@Data +@ExcelIgnoreUnannotated +public class IvtShafttubeivtRespVO { + + @Schema(description = "库存记录标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "15458") + @ExcelProperty("库存记录标识") + private Long ivtId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("点位编码") + private String pointCode; + + @Schema(description = "点位名称", example = "赵六") + @ExcelProperty("点位名称") + private String pointName; + + @Schema(description = "气涨轴尺寸") + @ExcelProperty("气涨轴尺寸") + private String qzzSize; + + @Schema(description = "气涨轴代数") + @ExcelProperty("气涨轴代数") + private String qzzGeneration; + + @Schema(description = "纸管编码") + @ExcelProperty("纸管编码") + private String tubeCode; + + @Schema(description = "纸管描述", example = "赵六") + @ExcelProperty("纸管描述") + private String tubeName; + + @Schema(description = "子卷号", example = "李四") + @ExcelProperty("子卷号") + private String containerName; + + @Schema(description = "点位类型", example = "2") + @ExcelProperty("点位类型") + private String pointType; + + @Schema(description = "位置") + @ExcelProperty("位置") + private String pointLocation; + + @Schema(description = "是否有轴") + @ExcelProperty("是否有轴") + private String haveQzz; + + @Schema(description = "是否启用") + @ExcelProperty("是否启用") + private String isUsed; + + @Schema(description = "顺序号") + @ExcelProperty("顺序号") + private Integer sortSeq; + + @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED, example = "7598") + @ExcelProperty("创建人") + private String createId; + + @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("创建人") + private String createName; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private String createTime; + + @Schema(description = "修改人", example = "1720") + @ExcelProperty("修改人") + private String updateOptid; + + @Schema(description = "修改人", example = "李四") + @ExcelProperty("修改人") + private String updateOptname; + + @Schema(description = "规划") + @ExcelProperty("规划") + private String plan; + + @Schema(description = "关联点位") + @ExcelProperty("关联点位") + private String parentCode; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/vo/IvtShafttubeivtSaveReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/vo/IvtShafttubeivtSaveReqVO.java new file mode 100644 index 00000000..0f37ed13 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/ivtshafttubeivt/vo/IvtShafttubeivtSaveReqVO.java @@ -0,0 +1,59 @@ +package cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.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 IvtShafttubeivtSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "id不能为空") + private Long ivtId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "点位编码不能为空") + private String pointCode; + + @Schema(description = "点位名称", example = "赵六") + private String pointName; + + @Schema(description = "气涨轴尺寸") + private String qzzSize; + + @Schema(description = "气涨轴代数") + private String qzzGeneration; + + @Schema(description = "纸管编码") + private String tubeCode; + + @Schema(description = "纸管描述", example = "赵六") + private String tubeName; + + @Schema(description = "子卷号", example = "李四") + private String containerName; + + @Schema(description = "点位类型", example = "2") + private String pointType; + + @Schema(description = "位置") + private String pointLocation; + + @Schema(description = "是否有轴") + private String haveQzz; + + @Schema(description = "是否启用") + private String isUsed; + + @Schema(description = "顺序号") + private Integer sortSeq; + + @Schema(description = "规划") + private String plan; + + @Schema(description = "关联点位") + private String parentCode; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/RawFoilCashePositionController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/RawFoilCashePositionController.java new file mode 100644 index 00000000..413f4474 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/RawFoilCashePositionController.java @@ -0,0 +1,104 @@ +package cn.code.nl.module.lms.controller.admin.rawfoilcasheposition; + +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.rawfoilcasheposition.vo.*; +import cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition.RawFoilCashePositionDO; +import cn.code.nl.module.lms.service.rawfoilcasheposition.RawFoilCashePositionService; + +@Tag(name = "管理后台 - 生箔母卷缓存位") +@RestController +@RequestMapping("/lms/raw-foil-cashe-position") +@Validated +public class RawFoilCashePositionController { + + @Resource + private RawFoilCashePositionService rawFoilCashePositionService; + + @PostMapping("/create") + @Operation(summary = "创建生箔母卷缓存位") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-cashe-position:create')") + public CommonResult createRawFoilCashePosition(@Valid @RequestBody RawFoilCashePositionSaveReqVO createReqVO) { + return success(rawFoilCashePositionService.createRawFoilCashePosition(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新生箔母卷缓存位") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-cashe-position:update')") + public CommonResult updateRawFoilCashePosition(@Valid @RequestBody RawFoilCashePositionSaveReqVO updateReqVO) { + rawFoilCashePositionService.updateRawFoilCashePosition(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除生箔母卷缓存位") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('lms:raw-foil-cashe-position:delete')") + public CommonResult deleteRawFoilCashePosition(@RequestParam("id") Long id) { + rawFoilCashePositionService.deleteRawFoilCashePosition(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除生箔母卷缓存位") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-cashe-position:delete')") + public CommonResult deleteRawFoilCashePositionList(@RequestParam("ids") List ids) { + rawFoilCashePositionService.deleteRawFoilCashePositionListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得生箔母卷缓存位") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-cashe-position:query')") + public CommonResult getRawFoilCashePosition(@RequestParam("id") Long id) { + RawFoilCashePositionDO rawFoilCashePosition = rawFoilCashePositionService.getRawFoilCashePosition(id); + return success(BeanUtils.toBean(rawFoilCashePosition, RawFoilCashePositionRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得生箔母卷缓存位分页") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-cashe-position:query')") + public CommonResult> getRawFoilCashePositionPage(@Valid RawFoilCashePositionPageReqVO pageReqVO) { + PageResult pageResult = rawFoilCashePositionService.getRawFoilCashePositionPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, RawFoilCashePositionRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出生箔母卷缓存位 Excel") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-cashe-position:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportRawFoilCashePositionExcel(@Valid RawFoilCashePositionPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = rawFoilCashePositionService.getRawFoilCashePositionPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "生箔母卷缓存位.xls", "数据", RawFoilCashePositionRespVO.class, + BeanUtils.toBean(list, RawFoilCashePositionRespVO.class)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/vo/RawFoilCashePositionPageReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/vo/RawFoilCashePositionPageReqVO.java new file mode 100644 index 00000000..524875a6 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/vo/RawFoilCashePositionPageReqVO.java @@ -0,0 +1,35 @@ +package cn.code.nl.module.lms.controller.admin.rawfoilcasheposition.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 RawFoilCashePositionPageReqVO extends PageParam { + + @Schema(description = "点位编码") + private String pointCode; + + @Schema(description = "母卷号", example = "王五") + private String containerName; + + @Schema(description = "入库时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] instorageTime; + + @Schema(description = "生产区域") + private String productionArea; + + @Schema(description = "是否启用") + private String isUsed; + + @Schema(description = "库存状态", example = "1") + private String coolIvtStatus; + +} \ 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/rawfoilcasheposition/vo/RawFoilCashePositionRespVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/vo/RawFoilCashePositionRespVO.java new file mode 100644 index 00000000..ef236200 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/vo/RawFoilCashePositionRespVO.java @@ -0,0 +1,87 @@ +package cn.code.nl.module.lms.controller.admin.rawfoilcasheposition.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 生箔母卷缓存位 Response VO") +@Data +@ExcelIgnoreUnannotated +public class RawFoilCashePositionRespVO { + + @Schema(description = "库存记录标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "30894") + @ExcelProperty("库存记录标识") + private Long ivtId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("点位编码") + private String pointCode; + + @Schema(description = "母卷号", example = "王五") + @ExcelProperty("母卷号") + private String containerName; + + @Schema(description = "母卷工单标识", example = "13519") + @ExcelProperty("母卷工单标识") + private String workorderId; + + @Schema(description = "母卷轴编码") + @ExcelProperty("母卷轴编码") + private String fullVehicleCode; + + @Schema(description = "入库时间") + @ExcelProperty("入库时间") + private LocalDateTime instorageTime; + + @Schema(description = "生产区域") + @ExcelProperty("生产区域") + private String productionArea; + + @Schema(description = "位置") + @ExcelProperty("位置") + private String pointLocation; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("顺序号") + private Integer sortSeq; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private String isUsed; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建人") + private String creator; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private String createTime; + + @Schema(description = "修改人") + @ExcelProperty("修改人") + private String updater; + + @Schema(description = "修改时间") + @ExcelProperty("修改时间") + private String updateTime; + + @Schema(description = "库存状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("库存状态") + private String coolIvtStatus; + + @Schema(description = "点位类型", example = "2") + @ExcelProperty("点位类型") + private String pointType; + + @Schema(description = "是否删除", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否删除") + private String deleted; + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/vo/RawFoilCashePositionSaveReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/vo/RawFoilCashePositionSaveReqVO.java new file mode 100644 index 00000000..0f9387ce --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilcasheposition/vo/RawFoilCashePositionSaveReqVO.java @@ -0,0 +1,57 @@ +package cn.code.nl.module.lms.controller.admin.rawfoilcasheposition.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 生箔母卷缓存位新增/修改 Request VO") +@Data +public class RawFoilCashePositionSaveReqVO { + + @Schema(description = "库存记录标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "30894") + private Long ivtId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "点位编码不能为空") + private String pointCode; + + @Schema(description = "母卷号", example = "王五") + private String containerName; + + @Schema(description = "母卷工单标识", example = "13519") + private String workorderId; + + @Schema(description = "母卷轴编码") + private String fullVehicleCode; + + @Schema(description = "入库时间") + private LocalDateTime instorageTime; + + @Schema(description = "生产区域") + private String productionArea; + + @Schema(description = "位置") + private String pointLocation; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "顺序号不能为空") + private Integer sortSeq; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否启用不能为空") + private String isUsed; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "库存状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "库存状态不能为空") + private String coolIvtStatus; + + @Schema(description = "点位类型", example = "2") + private String pointType; + +} \ 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/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionController.java new file mode 100644 index 00000000..3889dc60 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionController.java @@ -0,0 +1,104 @@ +package cn.code.nl.module.lms.controller.admin.rawfoilemptyrollercasheposition; + +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.rawfoilemptyrollercasheposition.vo.*; +import cn.code.nl.module.lms.dal.dataobject.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionDO; +import cn.code.nl.module.lms.service.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionService; + +@Tag(name = "管理后台 - 空辊缓存位") +@RestController +@RequestMapping("/lms/raw-foil-empty-roller-cashe-position") +@Validated +public class RawFoilEmptyRollerCashePositionController { + + @Resource + private RawFoilEmptyRollerCashePositionService rawFoilEmptyRollerCashePositionService; + + @PostMapping("/create") + @Operation(summary = "创建空辊缓存位") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-empty-roller-cashe-position:create')") + public CommonResult createRawFoilEmptyRollerCashePosition(@Valid @RequestBody RawFoilEmptyRollerCashePositionSaveReqVO createReqVO) { + return success(rawFoilEmptyRollerCashePositionService.createRawFoilEmptyRollerCashePosition(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新空辊缓存位") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-empty-roller-cashe-position:update')") + public CommonResult updateRawFoilEmptyRollerCashePosition(@Valid @RequestBody RawFoilEmptyRollerCashePositionSaveReqVO updateReqVO) { + rawFoilEmptyRollerCashePositionService.updateRawFoilEmptyRollerCashePosition(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除空辊缓存位") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('lms:raw-foil-empty-roller-cashe-position:delete')") + public CommonResult deleteRawFoilEmptyRollerCashePosition(@RequestParam("id") Long id) { + rawFoilEmptyRollerCashePositionService.deleteRawFoilEmptyRollerCashePosition(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除空辊缓存位") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-empty-roller-cashe-position:delete')") + public CommonResult deleteRawFoilEmptyRollerCashePositionList(@RequestParam("ids") List ids) { + rawFoilEmptyRollerCashePositionService.deleteRawFoilEmptyRollerCashePositionListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得空辊缓存位") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-empty-roller-cashe-position:query')") + public CommonResult getRawFoilEmptyRollerCashePosition(@RequestParam("id") Long id) { + RawFoilEmptyRollerCashePositionDO rawFoilEmptyRollerCashePosition = rawFoilEmptyRollerCashePositionService.getRawFoilEmptyRollerCashePosition(id); + return success(BeanUtils.toBean(rawFoilEmptyRollerCashePosition, RawFoilEmptyRollerCashePositionRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得空辊缓存位分页") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-empty-roller-cashe-position:query')") + public CommonResult> getRawFoilEmptyRollerCashePositionPage(@Valid RawFoilEmptyRollerCashePositionPageReqVO pageReqVO) { + PageResult pageResult = rawFoilEmptyRollerCashePositionService.getRawFoilEmptyRollerCashePositionPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, RawFoilEmptyRollerCashePositionRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出空辊缓存位 Excel") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-empty-roller-cashe-position:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportRawFoilEmptyRollerCashePositionExcel(@Valid RawFoilEmptyRollerCashePositionPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = rawFoilEmptyRollerCashePositionService.getRawFoilEmptyRollerCashePositionPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "空辊缓存位.xls", "数据", RawFoilEmptyRollerCashePositionRespVO.class, + BeanUtils.toBean(list, RawFoilEmptyRollerCashePositionRespVO.class)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/vo/RawFoilEmptyRollerCashePositionPageReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/vo/RawFoilEmptyRollerCashePositionPageReqVO.java new file mode 100644 index 00000000..ee9c0ede --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/vo/RawFoilEmptyRollerCashePositionPageReqVO.java @@ -0,0 +1,25 @@ +package cn.code.nl.module.lms.controller.admin.rawfoilemptyrollercasheposition.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.code.nl.framework.common.pojo.PageParam; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 空辊缓存位分页 Request VO") +@Data +public class RawFoilEmptyRollerCashePositionPageReqVO extends PageParam { + + @Schema(description = "点位编码") + private String pointCode; + + @Schema(description = "生产区域") + private String productionArea; + + @Schema(description = "是否启用") + private String isUsed; + + @Schema(description = "是否有货") + private String hasStock; + +} \ 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/rawfoilemptyrollercasheposition/vo/RawFoilEmptyRollerCashePositionRespVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/vo/RawFoilEmptyRollerCashePositionRespVO.java new file mode 100644 index 00000000..180ec7e8 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/vo/RawFoilEmptyRollerCashePositionRespVO.java @@ -0,0 +1,61 @@ +package cn.code.nl.module.lms.controller.admin.rawfoilemptyrollercasheposition.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 空辊缓存位 Response VO") +@Data +@ExcelIgnoreUnannotated +public class RawFoilEmptyRollerCashePositionRespVO { + + @Schema(description = "点位标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "1242") + @ExcelProperty("点位标识") + private Long pointId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("点位编码") + private String pointCode; + + @Schema(description = "载具编码") + @ExcelProperty("载具编码") + private String vehicleCode; + + @Schema(description = "生产区域") + @ExcelProperty("生产区域") + private String productionArea; + + @Schema(description = "位置") + @ExcelProperty("位置") + private String pointLocation; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private String isUsed; + + @Schema(description = "修改时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("修改时间") + private String updateTime; + + @Schema(description = "重量") + @ExcelProperty("重量") + private BigDecimal weight; + + @Schema(description = "是否有货", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否有货") + private String hasStock; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("顺序号") + private Integer sortSeq; + + @Schema(description = "点位类型") + @ExcelProperty("点位类型") + private String pointType; +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/vo/RawFoilEmptyRollerCashePositionSaveReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/vo/RawFoilEmptyRollerCashePositionSaveReqVO.java new file mode 100644 index 00000000..0920357d --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/rawfoilemptyrollercasheposition/vo/RawFoilEmptyRollerCashePositionSaveReqVO.java @@ -0,0 +1,49 @@ +package cn.code.nl.module.lms.controller.admin.rawfoilemptyrollercasheposition.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 空辊缓存位新增/修改 Request VO") +@Data +public class RawFoilEmptyRollerCashePositionSaveReqVO { + + @Schema(description = "点位标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "1242") + private Long pointId; + + @Schema(description = "点位编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "点位编码不能为空") + private String pointCode; + + @Schema(description = "载具编码") + private String vehicleCode; + + @Schema(description = "生产区域") + private String productionArea; + + @Schema(description = "位置") + private String pointLocation; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否启用不能为空") + private String isUsed; + + @Schema(description = "重量") + private BigDecimal weight; + + @Schema(description = "是否有货", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "是否有货不能为空") + private String hasStock; + + @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "顺序号不能为空") + private Integer sortSeq; + + @Schema(description = "点位类型") + private String pointType; +} \ 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/pda/RawFoilController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/RawFoilController.java new file mode 100644 index 00000000..c34458de --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/RawFoilController.java @@ -0,0 +1,42 @@ +package cn.code.nl.module.lms.controller.pda; + +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.module.lms.controller.pda.vo.NeedEmptyAxisReqVO; +import cn.code.nl.module.lms.controller.pda.vo.RawFoilWorkOrderCreateReqVO; +import cn.code.nl.module.lms.service.pda.RawFoilService; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static cn.code.nl.framework.common.pojo.CommonResult.success; + +/** + * @author dsh + * 2026/7/23 + * 手持-生箔控制层 + */ +@RestController +@RequestMapping("/api/pda/rawFoil") +@RequiredArgsConstructor +public class RawFoilController { + + private final RawFoilService rawFoilService; + + @PostMapping("/createWorkOrder") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-work-order:create')") + public CommonResult createWorkOrder(@Valid @RequestBody RawFoilWorkOrderCreateReqVO createReqVO) { + return success(rawFoilService.createWorkOrder(createReqVO)); + } + + @PostMapping("/needEmptyAxis") + @PreAuthorize("@ss.hasPermission('lms:raw-foil-work-order:query')") + public CommonResult needEmptyAxis(@Valid @RequestBody NeedEmptyAxisReqVO needEmptyAxisReqVO) { + rawFoilService.needEmptyAxis(needEmptyAxisReqVO); + return success(true); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/NeedEmptyAxisReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/NeedEmptyAxisReqVO.java new file mode 100644 index 00000000..270534e3 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/NeedEmptyAxisReqVO.java @@ -0,0 +1,18 @@ +package cn.code.nl.module.lms.controller.pda.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * @author dsh + * 2026/7/24 + */ +@Schema(description = "手持 - 生箔工序工单 呼叫-上满下空") +@Data +public class NeedEmptyAxisReqVO { + + @Schema(description = "工单标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "4374") + @NotNull(message = "生箔工序工单标识不能为空") + private Long workorderId; +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/pda/controller/rawfoil/vo/RawFoilWorkOrderCreateReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/RawFoilWorkOrderCreateReqVO.java similarity index 96% rename from nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/pda/controller/rawfoil/vo/RawFoilWorkOrderCreateReqVO.java rename to nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/RawFoilWorkOrderCreateReqVO.java index 9b046cc3..110b5d85 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/pda/controller/rawfoil/vo/RawFoilWorkOrderCreateReqVO.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/vo/RawFoilWorkOrderCreateReqVO.java @@ -1,7 +1,8 @@ -package cn.code.nl.module.lms.pda.controller.rawfoil.vo; +package cn.code.nl.module.lms.controller.pda.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; +import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -11,6 +12,7 @@ import java.time.LocalDateTime; * 2026/7/23 */ @Schema(description = "手持 - 生箔工序工单新增 Request VO") +@Data public class RawFoilWorkOrderCreateReqVO { @Schema(description = "母卷号", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/btivtcutpointivt/BtIvtCutpointivtDO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/btivtcutpointivt/BtIvtCutpointivtDO.java new file mode 100644 index 00000000..a20b67a3 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/btivtcutpointivt/BtIvtCutpointivtDO.java @@ -0,0 +1,101 @@ +package cn.code.nl.module.lms.dal.dataobject.btivtcutpointivt; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import cn.code.nl.framework.mybatis.core.dataobject.BaseDO; + +/** + * 分切区缓存点位库存 DO + * + * @author 诺力管理员 + */ +@TableName("bst_ivt_cutpointivt") +@KeySequence("bst_ivt_cutpointivt_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BtIvtCutpointivtDO extends BaseDO { + + /** + * 库存记录标识 + */ + @TableId + private Long ivtId; + /** + * AGV点位编码 + */ + private String pointCode; + /** + * AGV点位名称 + */ + private String pointName; + /** + * 桁架点位编码1 + */ + private String trussPointCode1; + /** + * 桁架点位编码2 + */ + private String trussPointCode2; + /** + * 气胀轴编码1 + */ + private String qzzNo1; + /** + * 气胀轴编码2 + */ + private String qzzNo2; + /** + * 上轴管芯 + */ + private String upGx; + /** + * 下轴管芯 + */ + private String downGx; + /** + * 点位类型,1-分切缓存位,2-分切对接位,3-套轴对接位,4-套轴缓存位 + */ + private String pointType; + /** + * 生产区域 + */ + private String productArea; + /** + * 顺序号 + */ + private Integer sortSeq; + /** + * 是否启用 + */ + private String isUsed; + /** + * 备注 + */ + private String remark; + /** + * 创建人 + */ + private String createId; + /** + * 创建人姓名 + */ + private String createName; + /** + * 修改人 + */ + private String updateOptid; + /** + * 修改人姓名 + */ + private String updateOptname; + /** + * 点位状态 + */ + private String pointStatus; + + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/cutpointIvt/IvtCutpointivtDO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/cutpointIvt/IvtCutpointivtDO.java new file mode 100644 index 00000000..8a6e6d5c --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/cutpointIvt/IvtCutpointivtDO.java @@ -0,0 +1,120 @@ +package cn.code.nl.module.lms.dal.dataobject.cutpointIvt; + +import lombok.*; +import java.util.*; +import com.baomidou.mybatisplus.annotation.*; +import cn.code.nl.framework.mybatis.core.dataobject.BaseDO; + +/** + * 分切区点位库存 DO + * + * @author 诺力管理员 + */ +@TableName("st_ivt_cutpointivt") +@KeySequence("st_ivt_cutpointivt_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class IvtCutpointivtDO extends BaseDO { + + /** + * 库存记录标识 + */ + @TableId + private Long ivtId; + /** + * 点位编码 + */ + private String pointCode; + /** + * 满轴位编码 + */ + private String fullPointCode; + /** + * 满轴位状态 + */ + private String fullPointStatus; + /** + * 母卷号 + */ + private String containerName; + /** + * 母卷轴编码 + */ + private String fullVehicleCode; + /** + * 空轴位编码 + */ + private String emptyPointCode; + /** + * 空轴位状态 + */ + private String emptyPointStatus; + /** + * 空轴编码 + */ + private String emptyVehicleCode; + /** + * 生产区域 + */ + private String productArea; + /** + * 位置 + */ + private String pointLocation; + /** + * 分切下料位上轴点位 + */ + private String upPointCode; + /** + * 分切下料位下轴点位 + */ + private String downPointCode; + /** + * 顺序号 + */ + private Integer sortSeq; + /** + * 是否启用 + */ + private String isUsed; + /** + * 备注 + */ + private String remark; + + /** + * 创建人姓名 + */ + private String createName; + + /** + * 修改人姓名 + */ + private String updateOptname; + /** + * 规划 + */ + private String plan; + /** + * 对应MES系统设备编码 + */ + private String extCode; + /** + * 分切下料位上轴 + */ + private String upQzzno; + /** + * 分切下料位下轴 + */ + private String downQzzno; + /** + * 气胀轴代数 + */ + private String qzzGeneration; + + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/ivtshafttubeivt/IvtShafttubeivtDO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/ivtshafttubeivt/IvtShafttubeivtDO.java new file mode 100644 index 00000000..df1f1733 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/ivtshafttubeivt/IvtShafttubeivtDO.java @@ -0,0 +1,96 @@ +package cn.code.nl.module.lms.dal.dataobject.ivtshafttubeivt; + +import lombok.*; +import java.util.*; +import com.baomidou.mybatisplus.annotation.*; +import cn.code.nl.framework.mybatis.core.dataobject.BaseDO; + +/** + * 穿拔轴区点位库存 DO + * + * @author 诺力管理员 + */ +@TableName("bst_ivt_shafttubeivt") +@KeySequence("bst_ivt_shafttubeivt_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class IvtShafttubeivtDO extends BaseDO { + + /** + * 库存记录标识 + */ + @TableId + private Long ivtId; + /** + * 点位编码 + */ + private String pointCode; + /** + * 点位名称 + */ + private String pointName; + /** + * 气涨轴尺寸 + */ + private String qzzSize; + /** + * 气涨轴代数 + */ + private String qzzGeneration; + /** + * 纸管编码 + */ + private String tubeCode; + /** + * 纸管描述 + */ + private String tubeName; + /** + * 子卷号 + */ + private String containerName; + /** + * 点位类型 + */ + private String pointType; + /** + * 位置 + */ + private String pointLocation; + /** + * 是否有轴 + */ + private String haveQzz; + /** + * 是否启用 + */ + private String isUsed; + /** + * 顺序号 + */ + private Integer sortSeq; + + /** + * 创建人 + */ + private String createName; + + /** + * 修改人 + */ + private String updateOptname; + /** + * 规划 + */ + private String plan; + /** + * 关联点位 + */ + private String parentCode; + + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilcasheposition/RawFoilCashePositionDO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilcasheposition/RawFoilCashePositionDO.java new file mode 100644 index 00000000..28961f60 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilcasheposition/RawFoilCashePositionDO.java @@ -0,0 +1,82 @@ +package cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.code.nl.framework.mybatis.core.dataobject.BaseDO; + +/** + * 生箔母卷缓存位 DO + * + * @author 诺力管理员 + */ +@TableName("lms_rawfoil_casheposition") +@KeySequence("lms_rawfoil_casheposition_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RawFoilCashePositionDO extends BaseDO { + + /** + * 库存记录标识 + */ + @TableId + private Long ivtId; + /** + * 点位编码 + */ + private String pointCode; + /** + * 母卷号 + */ + private String containerName; + /** + * 母卷工单标识 + */ + private String workorderId; + /** + * 母卷轴编码 + */ + private String fullVehicleCode; + /** + * 入库时间 + */ + private LocalDateTime instorageTime; + /** + * 生产区域 + */ + private String productionArea; + /** + * 位置 + */ + private String pointLocation; + /** + * 顺序号 + */ + private Integer sortSeq; + /** + * 是否启用 + */ + private String isUsed; + /** + * 备注 + */ + private String remark; + /** + * 库存状态 + */ + private String coolIvtStatus; + /** + * 点位类型 + */ + private String pointType; + + /** + * 锁(0.空闲,1占用) + */ + private String lockStatus; +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionDO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionDO.java new file mode 100644 index 00000000..19a3490f --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionDO.java @@ -0,0 +1,75 @@ +package cn.code.nl.module.lms.dal.dataobject.rawfoilemptyrollercasheposition; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.*; +import cn.code.nl.framework.mybatis.core.dataobject.BaseDO; + +/** + * 空辊缓存位 DO + * + * @author 诺力管理员 + */ +@TableName("lms_rawfoil_emptyroller_casheposition") +@KeySequence("lms_rawfoil_emptyroller_casheposition_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RawFoilEmptyRollerCashePositionDO extends BaseDO { + + /** + * 点位标识 + */ + @TableId + private Long pointId; + /** + * 点位编码 + */ + private String pointCode; + /** + * 载具编码 + */ + private String vehicleCode; + /** + * 生产区域 + */ + private String productionArea; + /** + * 位置 + */ + private String pointLocation; + /** + * 备注 + */ + private String remark; + /** + * 是否启用 + */ + private String isUsed; + /** + * 重量 + */ + private BigDecimal weight; + /** + * 是否有货 + */ + private String hasStock; + /** + * 顺序号 + */ + private Integer sortSeq; + + /** + * 点位类型 + */ + private String pointType; + + /** + * 锁(0.空闲,1占用) + */ + private String lockStatus; +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilpointivt/RawFoilPointIVTDO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilpointivt/RawFoilPointIVTDO.java index a6c12b50..b2faa315 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilpointivt/RawFoilPointIVTDO.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/rawfoilpointivt/RawFoilPointIVTDO.java @@ -53,4 +53,8 @@ public class RawFoilPointIVTDO extends BaseDO { */ private String isUsed; + /** + * 锁(0.空闲,1占用) + */ + private String lockStatus; } diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/btivtcutpointivt/BtIvtCutpointivtMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/btivtcutpointivt/BtIvtCutpointivtMapper.java new file mode 100644 index 00000000..901cb05f --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/btivtcutpointivt/BtIvtCutpointivtMapper.java @@ -0,0 +1,29 @@ +package cn.code.nl.module.lms.dal.mysql.btivtcutpointivt; + +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.module.lms.controller.admin.btcutpointivt.vo.BtIvtCutpointivtPageReqVO; +import cn.code.nl.module.lms.dal.dataobject.btivtcutpointivt.BtIvtCutpointivtDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 分切区缓存点位库存 Mapper + * + * @author 诺力管理员 + */ +@Mapper +public interface BtIvtCutpointivtMapper extends BaseMapperX { + + default PageResult selectPage(BtIvtCutpointivtPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(BtIvtCutpointivtDO::getPointCode, reqVO.getPointCode()) + .eqIfPresent(BtIvtCutpointivtDO::getPointType, reqVO.getPointType()) + .eqIfPresent(BtIvtCutpointivtDO::getProductArea, reqVO.getProductArea()) + .eqIfPresent(BtIvtCutpointivtDO::getIsUsed, reqVO.getIsUsed()) + .betweenIfPresent(BtIvtCutpointivtDO::getCreateTime, reqVO.getCreateTime()) + .eqIfPresent(BtIvtCutpointivtDO::getPointStatus, reqVO.getPointStatus()) + .orderByDesc(BtIvtCutpointivtDO::getIvtId)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/ivtcutpointivt/IvtCutpointivtMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/ivtcutpointivt/IvtCutpointivtMapper.java new file mode 100644 index 00000000..bc63907d --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/ivtcutpointivt/IvtCutpointivtMapper.java @@ -0,0 +1,30 @@ +package cn.code.nl.module.lms.dal.mysql.ivtcutpointivt; + +import java.util.*; + +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.module.lms.controller.admin.cutpointivt.vo.IvtCutpointivtPageReqVO; +import cn.code.nl.module.lms.dal.dataobject.cutpointIvt.IvtCutpointivtDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 分切区点位库存 Mapper + * + * @author 诺力管理员 + */ +@Mapper +public interface IvtCutpointivtMapper extends BaseMapperX { + + default PageResult selectPage(IvtCutpointivtPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(IvtCutpointivtDO::getPointCode, reqVO.getPointCode()) + .eqIfPresent(IvtCutpointivtDO::getFullPointStatus, reqVO.getFullPointStatus()) + .eqIfPresent(IvtCutpointivtDO::getEmptyPointStatus, reqVO.getEmptyPointStatus()) + .eqIfPresent(IvtCutpointivtDO::getProductArea, reqVO.getProductArea()) + .eqIfPresent(IvtCutpointivtDO::getIsUsed, reqVO.getIsUsed()) + .orderByDesc(IvtCutpointivtDO::getIvtId)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/ivtshafttubeivt/IvtShafttubeivtMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/ivtshafttubeivt/IvtShafttubeivtMapper.java new file mode 100644 index 00000000..376d6d9f --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/ivtshafttubeivt/IvtShafttubeivtMapper.java @@ -0,0 +1,27 @@ +package cn.code.nl.module.lms.dal.mysql.ivtshafttubeivt; + +import java.util.*; + +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo.IvtShafttubeivtPageReqVO; +import cn.code.nl.module.lms.dal.dataobject.ivtshafttubeivt.IvtShafttubeivtDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 穿拔轴区点位库存 Mapper + * + * @author 诺力管理员 + */ +@Mapper +public interface IvtShafttubeivtMapper extends BaseMapperX { + + default PageResult selectPage(IvtShafttubeivtPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(IvtShafttubeivtDO::getPointCode, reqVO.getPointCode()) + .eqIfPresent(IvtShafttubeivtDO::getPointType, reqVO.getPointType()) + .orderByDesc(IvtShafttubeivtDO::getIvtId)); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/rawfoilcasheposition/RawFoilCashePositionMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/rawfoilcasheposition/RawFoilCashePositionMapper.java new file mode 100644 index 00000000..cd27b058 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/rawfoilcasheposition/RawFoilCashePositionMapper.java @@ -0,0 +1,121 @@ +package cn.code.nl.module.lms.dal.mysql.rawfoilcasheposition; + +import java.time.LocalDateTime; +import java.util.*; + +import cn.code.nl.framework.common.enums.CommonStatusEnum; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition.RawFoilCashePositionDO; +import cn.code.nl.module.lms.enums.LockStatusEnum; +import cn.code.nl.module.lms.enums.RawFoilCashePositionTypeEnum; +import org.apache.ibatis.annotations.Mapper; +import cn.code.nl.module.lms.controller.admin.rawfoilcasheposition.vo.*; + +/** + * 生箔母卷缓存位 Mapper + * + * @author 诺力管理员 + */ +@Mapper +public interface RawFoilCashePositionMapper extends BaseMapperX { + + default PageResult selectPage(RawFoilCashePositionPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(RawFoilCashePositionDO::getPointCode, reqVO.getPointCode()) + .likeIfPresent(RawFoilCashePositionDO::getContainerName, reqVO.getContainerName()) + .betweenIfPresent(RawFoilCashePositionDO::getInstorageTime, reqVO.getInstorageTime()) + .eqIfPresent(RawFoilCashePositionDO::getProductionArea, reqVO.getProductionArea()) + .eqIfPresent(RawFoilCashePositionDO::getIsUsed, reqVO.getIsUsed()) + .eqIfPresent(RawFoilCashePositionDO::getCoolIvtStatus, reqVO.getCoolIvtStatus()) + .orderByDesc(RawFoilCashePositionDO::getIvtId)); + } + + /** + * 根据点位类型查询空闲且未占用的候选点位列表 + * 筛选条件:点位类型、已启用、无母卷、未占用,按顺序号升序(越小离称重位越近) + * + * @param pointType 点位类型 + * @return 候选点位列表 + */ + default List selectEmptyPositionList(String pointType) { + return selectList(new LambdaQueryWrapperX() + .eq(RawFoilCashePositionDO::getPointType, pointType) + .eq(RawFoilCashePositionDO::getIsUsed, CommonStatusEnum.DISABLE.getStatus()) + .and(w -> w.isNull(RawFoilCashePositionDO::getContainerName) + .or().eq(RawFoilCashePositionDO::getContainerName, "")) + .eq(RawFoilCashePositionDO::getLockStatus, LockStatusEnum.IDLE.getCode()) + .orderByAsc(RawFoilCashePositionDO::getSortSeq)); + } + + /** + * CAS 占用候选点位:仅当点位空闲时更新为占用 + * + * @param ivtId 库存记录标识 + * @return 影响行数,大于 0 表示抢占成功 + */ + default int lockPosition(Long ivtId) { + RawFoilCashePositionDO updateObj = new RawFoilCashePositionDO(); + updateObj.setLockStatus(LockStatusEnum.OCCUPIED.getCode()); + return update(updateObj, new LambdaUpdateWrapper() + .eq(RawFoilCashePositionDO::getIvtId, ivtId) + .eq(RawFoilCashePositionDO::getLockStatus, LockStatusEnum.IDLE.getCode())); + } + + /** + * 释放点位占用:仅当点位被占用时更新为空闲 + * + * @param pointCode 点位编码 + * @return 影响行数,0 表示点位已释放(幂等) + */ + default int releaseLockByPointCode(String pointCode) { + RawFoilCashePositionDO updateObj = new RawFoilCashePositionDO(); + updateObj.setLockStatus(LockStatusEnum.IDLE.getCode()); + return update(updateObj, new LambdaUpdateWrapper() + .eq(RawFoilCashePositionDO::getPointCode, pointCode) + .eq(RawFoilCashePositionDO::getLockStatus, LockStatusEnum.OCCUPIED.getCode())); + } + + /** + * 母卷入库:仅当点位被占用且无母卷时写入母卷信息并释放占用 + * + * @param pointCode 点位编码 + * @param containerName 母卷号 + * @param workorderId 母卷工单标识(可为空) + * @param instorageTime 入库时间 + * @return 影响行数,0 表示已入库或已释放(幂等) + */ + default int instoragePosition(String pointCode, String containerName, String workorderId, + LocalDateTime instorageTime) { + RawFoilCashePositionDO updateObj = new RawFoilCashePositionDO(); + updateObj.setContainerName(containerName); + updateObj.setWorkorderId(workorderId); + updateObj.setInstorageTime(instorageTime); + updateObj.setLockStatus(LockStatusEnum.IDLE.getCode()); + return update(updateObj, new LambdaUpdateWrapper() + .eq(RawFoilCashePositionDO::getPointCode, pointCode) + .eq(RawFoilCashePositionDO::getLockStatus, LockStatusEnum.OCCUPIED.getCode()) + .and(w -> w.isNull(RawFoilCashePositionDO::getContainerName) + .or().eq(RawFoilCashePositionDO::getContainerName, ""))); + } + + /** + * 母卷出库:清空起点点位上的母卷记录 + * 仅当母卷号匹配时清空,防止重复回调误清已新入库的母卷,天然幂等 + * + * @param pointCode 点位编码 + * @param containerName 母卷号 + * @return 影响行数,0 表示点位上无该母卷(幂等) + */ + default int outstockPosition(String pointCode, String containerName) { + return update(null, new LambdaUpdateWrapper() + .set(RawFoilCashePositionDO::getContainerName, null) + .set(RawFoilCashePositionDO::getWorkorderId, null) + .set(RawFoilCashePositionDO::getInstorageTime, null) + .eq(RawFoilCashePositionDO::getPointCode, pointCode) + .eq(RawFoilCashePositionDO::getContainerName, containerName)); + } + +} \ 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/mysql/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionMapper.java new file mode 100644 index 00000000..86856563 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionMapper.java @@ -0,0 +1,87 @@ +package cn.code.nl.module.lms.dal.mysql.rawfoilemptyrollercasheposition; + +import java.util.*; + +import cn.code.nl.framework.common.enums.CommonStatusEnum; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition.RawFoilCashePositionDO; +import cn.code.nl.module.lms.dal.dataobject.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionDO; +import cn.code.nl.module.lms.enums.EmptyRollerPointTypeEnum; +import cn.code.nl.module.lms.enums.LockStatusEnum; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.apache.ibatis.annotations.Mapper; +import cn.code.nl.module.lms.controller.admin.rawfoilemptyrollercasheposition.vo.*; + +/** + * 空辊缓存位 Mapper + * + * @author 诺力管理员 + */ +@Mapper +public interface RawFoilEmptyRollerCashePositionMapper extends BaseMapperX { + + default PageResult selectPage(RawFoilEmptyRollerCashePositionPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(RawFoilEmptyRollerCashePositionDO::getPointCode, reqVO.getPointCode()) + .eqIfPresent(RawFoilEmptyRollerCashePositionDO::getProductionArea, reqVO.getProductionArea()) + .eqIfPresent(RawFoilEmptyRollerCashePositionDO::getIsUsed, reqVO.getIsUsed()) + .eqIfPresent(RawFoilEmptyRollerCashePositionDO::getHasStock, reqVO.getHasStock()) + .orderByDesc(RawFoilEmptyRollerCashePositionDO::getPointId)); + } + + /** + * 根据点位类型获取空辊缓存位等待点 + * @param pointType 点位类型 3:生箔空辊等待点 4:分切空辊等待点 + * @return RawFoilEmptyRollerCashePositionDO + */ + default RawFoilEmptyRollerCashePositionDO selectEmptyRollerWaitPointByPointType(String pointType){ + return selectOne(RawFoilEmptyRollerCashePositionDO::getPointType, pointType, + RawFoilEmptyRollerCashePositionDO::getIsUsed, CommonStatusEnum.DISABLE.getStatus()); + } + + /** + * 根据点位类型查询空闲且未占用的候选点位列表 + * 筛选条件:点位类型、已启用、有货无货、未占用,按顺序号降序 + * + * @param pointType 点位类型, hasStock 是否有货 + * @return 候选点位列表 + */ + default List selectEmptyPositionList(String pointType,String hasStock){ + return selectList(new LambdaQueryWrapperX() + .eq(RawFoilEmptyRollerCashePositionDO::getHasStock,hasStock) + .eq(RawFoilEmptyRollerCashePositionDO::getPointType,pointType) + .eq(RawFoilEmptyRollerCashePositionDO::getIsUsed,CommonStatusEnum.DISABLE.getStatus()) + .eq(RawFoilEmptyRollerCashePositionDO::getLockStatus,LockStatusEnum.IDLE.getCode()) + .orderByDesc(RawFoilEmptyRollerCashePositionDO::getSortSeq) + ); + } + + +// default List selectEmptyPositionList(String pointType) { +// return selectList(new LambdaQueryWrapperX() +// .eq(RawFoilCashePositionDO::getPointType, pointType) +// .eq(RawFoilCashePositionDO::getIsUsed, CommonStatusEnum.DISABLE.getStatus()) +// .and(w -> w.isNull(RawFoilCashePositionDO::getContainerName) +// .or().eq(RawFoilCashePositionDO::getContainerName, "")) +// .eq(RawFoilCashePositionDO::getLockStatus, LockStatusEnum.IDLE.getCode()) +// .orderByAsc(RawFoilCashePositionDO::getSortSeq)); +// } + + /** + * CAS 占用候选点位:仅当点位空闲时更新为占用 + * + * @param pointId 点位标识 + * @return 影响行数,大于 0 表示抢占成功 + */ + default int lockPosition(Long pointId){ + RawFoilEmptyRollerCashePositionDO updateObj = new RawFoilEmptyRollerCashePositionDO(); + updateObj.setLockStatus(LockStatusEnum.OCCUPIED.getCode()); + return update(updateObj, new LambdaUpdateWrapper<>(RawFoilEmptyRollerCashePositionDO.class) + .eq(RawFoilEmptyRollerCashePositionDO::getPointId,pointId) + .eq(RawFoilEmptyRollerCashePositionDO::getLockStatus,LockStatusEnum.IDLE.getCode()) + ); + } + +} \ 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/mysql/rawfoilpointivt/RawFoilPointIVTMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/rawfoilpointivt/RawFoilPointIVTMapper.java index cca904d0..6c939454 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/rawfoilpointivt/RawFoilPointIVTMapper.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/rawfoilpointivt/RawFoilPointIVTMapper.java @@ -6,6 +6,8 @@ import cn.code.nl.framework.common.pojo.PageResult; import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; import cn.code.nl.module.lms.dal.dataobject.rawfoilpointivt.RawFoilPointIVTDO; +import cn.code.nl.module.lms.enums.LockStatusEnum; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; import cn.code.nl.module.lms.controller.admin.rawfoilpointivt.vo.*; @@ -37,4 +39,32 @@ public interface RawFoilPointIVTMapper extends BaseMapperX { return selectOne(RawFoilPointIVTDO::getPointCode,pointCode); } + /** + * CAS 占用生箔机点位:仅当点位空闲时更新为占用 + * + * @param pointId 点位标识 + * @return 影响行数,大于 0 表示抢占成功 + */ + default int lockPoint(Long pointId) { + RawFoilPointIVTDO updateObj = new RawFoilPointIVTDO(); + updateObj.setLockStatus(LockStatusEnum.OCCUPIED.getCode()); + return update(updateObj, new LambdaUpdateWrapper() + .eq(RawFoilPointIVTDO::getPointId, pointId) + .eq(RawFoilPointIVTDO::getLockStatus, LockStatusEnum.IDLE.getCode())); + } + + /** + * 释放生箔机点位占用:仅当点位被占用时更新为空闲 + * + * @param pointCode 点位编码 + * @return 影响行数,0 表示点位已释放(幂等) + */ + default int releaseLockByPointCode(String pointCode) { + RawFoilPointIVTDO updateObj = new RawFoilPointIVTDO(); + updateObj.setLockStatus(LockStatusEnum.IDLE.getCode()); + return update(updateObj, new LambdaUpdateWrapper() + .eq(RawFoilPointIVTDO::getPointCode, pointCode) + .eq(RawFoilPointIVTDO::getLockStatus, LockStatusEnum.OCCUPIED.getCode())); + } + } \ No newline at end of file diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/demo/DemoApi.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/demo/DemoApi.java new file mode 100644 index 00000000..b08f3ad9 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/demo/DemoApi.java @@ -0,0 +1,80 @@ +//package cn.code.nl.module.lms.demo; +// +//import cn.code.nl.framework.common.pojo.CommonResult; +//import cn.code.nl.framework.execute.biz.api.lms.LmsTaskCommonApi; +//import cn.code.nl.framework.execute.biz.dto.TaskStatusCallApiReqDTO; +//import cn.code.nl.framework.execute.biz.vo.AcsApplyActionRespVO; +//import com.alibaba.fastjson.JSON; +//import org.springframework.validation.annotation.Validated; +//import org.springframework.web.bind.annotation.RestController; +// +//import static cn.code.nl.framework.common.pojo.CommonResult.success; +// +///** +// * +// * @Author: liyongde +// * @Date: 2026/7/15 15:25 +// */ +//@RestController // 提供 RESTful API 接口,给 Feign 调用 +//@Validated +//public class DemoApi implements LmsTaskCommonApi { +// @Override +// public CommonResult doHandlePicked(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) { +// // 构建外层VO +// AcsApplyActionRespVO respVO = new AcsApplyActionRespVO(); +// respVO.setTaskId(10001L); +// respVO.setTaskCode("ACS20260716001"); +// // 内层data赋值 "success" +// return success(respVO); +// } +// +// @Override +// public CommonResult doHandleApplyAgain(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) { +// DemoRespVO demoRespVO = new DemoRespVO(); +// demoRespVO.setTargetPoint("A_10001"); +// +// // 构建外层VO +// AcsApplyActionRespVO respVO = new AcsApplyActionRespVO(); +// respVO.setTaskId(10001L); +// respVO.setTaskCode("ACS20260716001"); +// // 内层data赋值 "success" +// respVO.setData(JSON.parseObject(JSON.toJSONString(demoRespVO))); +// return success(respVO); +// } +// +// @Override +// public CommonResult doHandleRequestRelease(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) { +// // 构建外层VO +// AcsApplyActionRespVO respVO = new AcsApplyActionRespVO(); +// respVO.setTaskId(10001L); +// respVO.setTaskCode("ACS20260716001"); +// return success(respVO); +// } +// +// @Override +// public CommonResult doHandleRequestPick(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) { +// // 构建外层VO +// AcsApplyActionRespVO respVO = new AcsApplyActionRespVO(); +// respVO.setTaskId(10001L); +// respVO.setTaskCode("ACS20260716001"); +// return success(respVO); +// } +// +// @Override +// public CommonResult doHandleRequestLeave(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) { +// // 构建外层VO +// AcsApplyActionRespVO respVO = new AcsApplyActionRespVO(); +// respVO.setTaskId(10001L); +// respVO.setTaskCode("ACS20260716001"); +// return success(respVO); +// } +// +// @Override +// public CommonResult doHandleRequestEnter(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) { +// // 构建外层VO +// AcsApplyActionRespVO respVO = new AcsApplyActionRespVO(); +// respVO.setTaskId(10001L); +// respVO.setTaskCode("ACS20260716001"); +// return success(respVO); +// } +//} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/acs/AcsToLmsService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/acs/AcsToLmsService.java new file mode 100644 index 00000000..fa6680ec --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/acs/AcsToLmsService.java @@ -0,0 +1,16 @@ +package cn.code.nl.module.lms.service.acs; + +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.module.lms.controller.acs.vo.WeighingCompleteReqVO; + +/** + * @author dsh + * 2026/8/4 + */ +public interface AcsToLmsService { + + /** + * 称重完成 + */ + void weighingComplete(WeighingCompleteReqVO weighingCompleteReqVO); +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/acs/AcsToLmsServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/acs/AcsToLmsServiceImpl.java new file mode 100644 index 00000000..629f1c02 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/acs/AcsToLmsServiceImpl.java @@ -0,0 +1,134 @@ +package cn.code.nl.module.lms.service.acs; + +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.code.nl.module.lms.controller.acs.vo.WeighingCompleteReqVO; +import cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition.RawFoilCashePositionDO; +import cn.code.nl.module.lms.dal.dataobject.rawfoilworkorder.RawFoilWorkOrderDO; +import cn.code.nl.module.lms.dal.mysql.rawfoilcasheposition.RawFoilCashePositionMapper; +import cn.code.nl.module.lms.dal.mysql.rawfoilworkorder.RawFoilWorkOrderMapper; +import cn.code.nl.module.lms.enums.RawFoilCashePositionTypeEnum; +import cn.code.nl.module.lms.enums.RawFoilHandleCodeConstants; +import cn.code.nl.module.lms.enums.RawFoilWorkOrderStatusEnum; +import cn.code.nl.module.lms.service.rawfoilcasheposition.RawFoilCashePositionService; +import cn.code.nl.module.task.api.TransportTaskApi; +import cn.code.nl.module.task.dto.TaskInfoDTO; +import cn.code.nl.module.task.dto.TransportTaskCreateReqDTO; +import cn.code.nl.module.task.enums.AcsTaskTypeEnum; +import cn.code.nl.module.task.enums.TaskOwnerServiceEnum; +import cn.code.nl.module.task.enums.TaskTypeEnum; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.UUID; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static cn.code.nl.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.code.nl.module.lms.enums.ErrorCodeConstants.*; + +/** + * ACS 上报 LMS 服务实现类 + * + * @author dsh + * 2026/8/5 + */ +@Slf4j +@Service +public class AcsToLmsServiceImpl implements AcsToLmsService { + + @Resource + private TransportTaskApi transportTaskApi; + + @Resource + private RawFoilWorkOrderMapper rawFoilWorkOrderMapper; + + @Resource + private RawFoilCashePositionMapper rawFoilCashePositionMapper; + + @Resource + private RawFoilCashePositionService rawFoilCashePositionService; + + /** + * ACS 上报称重完成:校验后更新工单重量,创建母卷从称重位到常规缓存位的入库搬运任务 + * + * @param weighingCompleteReqVO 称重完成请求信息 + */ + @Override + public void weighingComplete(WeighingCompleteReqVO weighingCompleteReqVO) { + String containerName = weighingCompleteReqVO.getContainerName(); + + // 1. 根据母卷号查询生箔工单 + RawFoilWorkOrderDO workOrder = rawFoilWorkOrderMapper.selectByContainerNameAndNotEndStatus(containerName); + if (workOrder == null) { + throw exception(RAW_FOIL_WORK_ORDER_NOT_EXISTS); + } + // 2. 校验工单状态为执行中(称重完成只可能发生在需要空轴任务下发之后) +// if (!RawFoilWorkOrderStatusEnum.EXECUTION.getCode().equals(workOrder.getStatus())) { +// throw exception(RAW_FOIL_WORK_ORDER_STATUS_NOT_EXECUTION); +// } + // 3. 幂等校验:母卷存在在途搬运任务则拒绝(拦截任务执行期间的重复上报) + CommonResult> runningResult = transportTaskApi + .getRunningTaskByMaterialCode(containerName, TaskOwnerServiceEnum.LMS.getCode()); + if (runningResult.isError()) { + log.error("查询在途搬运任务失败, containerName={}, 返回={}", containerName, runningResult); + throw exception(RAW_FOIL_WORK_ORDER_FAIL); + } + if (CollUtil.isNotEmpty(runningResult.getData())) { + throw exception(RAW_FOIL_WORK_ORDER_NOT_SELECT); + } + // 4. 起点:称重位 + List weighingPositions = rawFoilCashePositionMapper.selectList( + new LambdaQueryWrapperX() + .eq(RawFoilCashePositionDO::getPointType, + RawFoilCashePositionTypeEnum.WEIGHING_POSITION.getCode())); + if (CollUtil.isEmpty(weighingPositions)) { + throw exception(RAW_FOIL_WEIGHING_POSITION_NOT_EXISTS); + } + RawFoilCashePositionDO weighingPosition = weighingPositions.get(0); + + // 5. 校验母卷在称重位 + if (!containerName.equals(weighingPosition.getContainerName())) { + throw exception(RAW_FOIL_CONTAINER_NOT_ON_WEIGHING_POSITION); + } + + // 6. 更新生箔工单重量 + RawFoilWorkOrderDO weightUpdate = new RawFoilWorkOrderDO(); + weightUpdate.setWorkorderId(workOrder.getWorkorderId()); + weightUpdate.setProductWeight(weighingCompleteReqVO.getProductWeight()); + rawFoilWorkOrderMapper.updateById(weightUpdate); + + // 7. 终点:分配常规缓存位并 CAS 占用 + RawFoilCashePositionDO conventionalPosition = rawFoilCashePositionService.allocateConventionalPosition(); + + // 8. 创建入库搬运任务;失败必须补偿释放已占用的常规位,否则点位死锁 + try { + TransportTaskCreateReqDTO reqDTO = new TransportTaskCreateReqDTO(); + reqDTO.setTaskName(UUID.randomUUID().toString()); + reqDTO.setOwnerService(TaskOwnerServiceEnum.LMS.getCode()); + reqDTO.setHandleCode(RawFoilHandleCodeConstants.RAW_FOIL_INSTORAGE_TASK); + reqDTO.setAcsTaskType(AcsTaskTypeEnum.TRUSS_TASK.getCode()); + reqDTO.setAgvSystemType("1"); + reqDTO.setPointCode1(weighingPosition.getPointCode()); + reqDTO.setPointCode2(conventionalPosition.getPointCode()); + reqDTO.setMaterialCode(containerName); + reqDTO.setPriority("1"); + reqDTO.setProductArea(workOrder.getProductionArea()); + reqDTO.setIsAutoIssue("1"); + reqDTO.setIsCreateFinish(true); + reqDTO.setTaskType(TaskTypeEnum.RAW_FOIL_INSTORAGE_TASK.getCode()); + + CommonResult taskResult = transportTaskApi.createTransportTask(reqDTO); + if (taskResult.isError()) { + log.error("创建生箔入库任务失败, containerName={}, reqDTO={}, 返回={}", + containerName, reqDTO, taskResult); + throw exception(RAW_FOIL_TRANSPORT_TASK_CREATE_FAIL); + } + } catch (Exception e) { + // 补偿释放:常规缓存位 + rawFoilCashePositionService.releasePositionLock(conventionalPosition.getPointCode()); + throw e; + } + } +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/cutpointIvt/IvtCutpointivtService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/cutpointIvt/IvtCutpointivtService.java new file mode 100644 index 00000000..f8e66ece --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/cutpointIvt/IvtCutpointivtService.java @@ -0,0 +1,64 @@ +package cn.code.nl.module.lms.service.cutpointIvt; + +import java.util.*; + +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.module.lms.controller.admin.cutpointivt.vo.IvtCutpointivtPageReqVO; +import cn.code.nl.module.lms.controller.admin.cutpointivt.vo.IvtCutpointivtSaveReqVO; +import cn.code.nl.module.lms.dal.dataobject.cutpointIvt.IvtCutpointivtDO; +import jakarta.validation.*; + + +/** + * 分切区点位库存 Service 接口 + * + * @author 诺力管理员 + */ +public interface IvtCutpointivtService { + + /** + * 创建分切区点位库存 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createIvtCutpointivt(@Valid IvtCutpointivtSaveReqVO createReqVO); + + /** + * 更新分切区点位库存 + * + * @param updateReqVO 更新信息 + */ + void updateIvtCutpointivt(@Valid IvtCutpointivtSaveReqVO updateReqVO); + + /** + * 删除分切区点位库存 + * + * @param id 编号 + */ + void deleteIvtCutpointivt(Long id); + + /** + * 批量删除分切区点位库存 + * + * @param ids 编号 + */ + void deleteIvtCutpointivtListByIds(List ids); + + /** + * 获得分切区点位库存 + * + * @param id 编号 + * @return 分切区点位库存 + */ + IvtCutpointivtDO getIvtCutpointivt(Long id); + + /** + * 获得分切区点位库存分页 + * + * @param pageReqVO 分页查询 + * @return 分切区点位库存分页 + */ + PageResult getIvtCutpointivtPage(IvtCutpointivtPageReqVO pageReqVO); + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/cutpointIvt/IvtCutpointivtServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/cutpointIvt/IvtCutpointivtServiceImpl.java new file mode 100644 index 00000000..b19bc70d --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/cutpointIvt/IvtCutpointivtServiceImpl.java @@ -0,0 +1,86 @@ +package cn.code.nl.module.lms.service.cutpointIvt; + +import cn.code.nl.module.lms.controller.admin.cutpointivt.vo.IvtCutpointivtPageReqVO; +import cn.code.nl.module.lms.controller.admin.cutpointivt.vo.IvtCutpointivtSaveReqVO; +import cn.code.nl.module.lms.dal.dataobject.cutpointIvt.IvtCutpointivtDO; +import cn.code.nl.module.lms.dal.mysql.ivtcutpointivt.IvtCutpointivtMapper; +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.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.PageParam; +import cn.code.nl.framework.common.util.object.BeanUtils; + + +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.IVT_CUTPOINTIVT_NOT_EXISTS; + +/** + * 分切区点位库存 Service 实现类 + * + * @author 诺力管理员 + */ +@Service +@Validated +public class IvtCutpointivtServiceImpl implements IvtCutpointivtService { + + @Resource + private IvtCutpointivtMapper ivtCutpointivtMapper; + + @Override + public Long createIvtCutpointivt(IvtCutpointivtSaveReqVO createReqVO) { + // 插入 + IvtCutpointivtDO ivtCutpointivt = BeanUtils.toBean(createReqVO, IvtCutpointivtDO.class); + ivtCutpointivtMapper.insert(ivtCutpointivt); + + // 返回 + return ivtCutpointivt.getIvtId(); + } + + @Override + public void updateIvtCutpointivt(IvtCutpointivtSaveReqVO updateReqVO) { + // 校验存在 + validateIvtCutpointivtExists(updateReqVO.getIvtId()); + // 更新 + IvtCutpointivtDO updateObj = BeanUtils.toBean(updateReqVO, IvtCutpointivtDO.class); + ivtCutpointivtMapper.updateById(updateObj); + } + + @Override + public void deleteIvtCutpointivt(Long id) { + // 校验存在 + validateIvtCutpointivtExists(id); + // 删除 + ivtCutpointivtMapper.deleteById(id); + } + + @Override + public void deleteIvtCutpointivtListByIds(List ids) { + // 删除 + ivtCutpointivtMapper.deleteByIds(ids); + } + + + private void validateIvtCutpointivtExists(Long id) { + if (ivtCutpointivtMapper.selectById(id) == null) { + throw exception(IVT_CUTPOINTIVT_NOT_EXISTS); + } + } + + @Override + public IvtCutpointivtDO getIvtCutpointivt(Long id) { + return ivtCutpointivtMapper.selectById(id); + } + + @Override + public PageResult getIvtCutpointivtPage(IvtCutpointivtPageReqVO pageReqVO) { + return ivtCutpointivtMapper.selectPage(pageReqVO); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtcutpointivt/BtIvtCutpointivtService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtcutpointivt/BtIvtCutpointivtService.java new file mode 100644 index 00000000..0442b5de --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtcutpointivt/BtIvtCutpointivtService.java @@ -0,0 +1,63 @@ +package cn.code.nl.module.lms.service.ivtcutpointivt; + +import java.util.*; + +import cn.code.nl.module.lms.controller.admin.btcutpointivt.vo.BtIvtCutpointivtPageReqVO; +import cn.code.nl.module.lms.controller.admin.btcutpointivt.vo.BtIvtCutpointivtSaveReqVO; +import cn.code.nl.module.lms.dal.dataobject.btivtcutpointivt.BtIvtCutpointivtDO; +import jakarta.validation.*; +import cn.code.nl.framework.common.pojo.PageResult; + +/** + * 分切区缓存点位库存 Service 接口 + * + * @author 诺力管理员 + */ +public interface BtIvtCutpointivtService { + + /** + * 创建分切区缓存点位库存 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createIvtCutpointivt(@Valid BtIvtCutpointivtSaveReqVO createReqVO); + + /** + * 更新分切区缓存点位库存 + * + * @param updateReqVO 更新信息 + */ + void updateIvtCutpointivt(@Valid BtIvtCutpointivtSaveReqVO updateReqVO); + + /** + * 删除分切区缓存点位库存 + * + * @param id 编号 + */ + void deleteIvtCutpointivt(Long id); + + /** + * 批量删除分切区缓存点位库存 + * + * @param ids 编号 + */ + void deleteIvtCutpointivtListByIds(List ids); + + /** + * 获得分切区缓存点位库存 + * + * @param id 编号 + * @return 分切区缓存点位库存 + */ + BtIvtCutpointivtDO getIvtCutpointivt(Long id); + + /** + * 获得分切区缓存点位库存分页 + * + * @param pageReqVO 分页查询 + * @return 分切区缓存点位库存分页 + */ + PageResult getIvtCutpointivtPage(BtIvtCutpointivtPageReqVO pageReqVO); + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtcutpointivt/BtIvtCutpointivtServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtcutpointivt/BtIvtCutpointivtServiceImpl.java new file mode 100644 index 00000000..605b2cbd --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtcutpointivt/BtIvtCutpointivtServiceImpl.java @@ -0,0 +1,82 @@ +package cn.code.nl.module.lms.service.ivtcutpointivt; + +import cn.code.nl.module.lms.controller.admin.btcutpointivt.vo.BtIvtCutpointivtPageReqVO; +import cn.code.nl.module.lms.controller.admin.btcutpointivt.vo.BtIvtCutpointivtSaveReqVO; +import cn.code.nl.module.lms.dal.dataobject.btivtcutpointivt.BtIvtCutpointivtDO; +import cn.code.nl.module.lms.dal.mysql.btivtcutpointivt.BtIvtCutpointivtMapper; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.util.object.BeanUtils; + + +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.module.lms.enums.ErrorCodeConstants.IVT_CUTPOINTIVT_NOT_EXISTS; + +/** + * 分切区缓存点位库存 Service 实现类 + * + * @author 诺力管理员 + */ +@Service +@Validated +public class BtIvtCutpointivtServiceImpl implements BtIvtCutpointivtService { + + @Resource + private BtIvtCutpointivtMapper btIvtCutpointivtMapper; + + @Override + public Long createIvtCutpointivt(BtIvtCutpointivtSaveReqVO createReqVO) { + // 插入 + BtIvtCutpointivtDO ivtCutpointivt = BeanUtils.toBean(createReqVO, BtIvtCutpointivtDO.class); + btIvtCutpointivtMapper.insert(ivtCutpointivt); + + // 返回 + return ivtCutpointivt.getIvtId(); + } + + @Override + public void updateIvtCutpointivt(BtIvtCutpointivtSaveReqVO updateReqVO) { + // 校验存在 + validateIvtCutpointivtExists(updateReqVO.getIvtId()); + // 更新 + BtIvtCutpointivtDO updateObj = BeanUtils.toBean(updateReqVO, BtIvtCutpointivtDO.class); + btIvtCutpointivtMapper.updateById(updateObj); + } + + @Override + public void deleteIvtCutpointivt(Long id) { + // 校验存在 + validateIvtCutpointivtExists(id); + // 删除 + btIvtCutpointivtMapper.deleteById(id); + } + + @Override + public void deleteIvtCutpointivtListByIds(List ids) { + // 删除 + btIvtCutpointivtMapper.deleteByIds(ids); + } + + + private void validateIvtCutpointivtExists(Long id) { + if (btIvtCutpointivtMapper.selectById(id) == null) { + throw exception(IVT_CUTPOINTIVT_NOT_EXISTS); + } + } + + @Override + public BtIvtCutpointivtDO getIvtCutpointivt(Long id) { + return btIvtCutpointivtMapper.selectById(id); + } + + @Override + public PageResult getIvtCutpointivtPage(BtIvtCutpointivtPageReqVO pageReqVO) { + return btIvtCutpointivtMapper.selectPage(pageReqVO); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtshafttubeivt/IvtShafttubeivtService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtshafttubeivt/IvtShafttubeivtService.java new file mode 100644 index 00000000..897e24ce --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtshafttubeivt/IvtShafttubeivtService.java @@ -0,0 +1,64 @@ +package cn.code.nl.module.lms.service.ivtshafttubeivt; + +import java.util.*; + +import cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo.IvtShafttubeivtPageReqVO; +import cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo.IvtShafttubeivtSaveReqVO; +import cn.code.nl.module.lms.dal.dataobject.ivtshafttubeivt.IvtShafttubeivtDO; +import jakarta.validation.*; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.PageParam; + +/** + * 穿拔轴区点位库存 Service 接口 + * + * @author 诺力管理员 + */ +public interface IvtShafttubeivtService { + + /** + * 创建穿拔轴区点位库存 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createIvtShafttubeivt(@Valid IvtShafttubeivtSaveReqVO createReqVO); + + /** + * 更新穿拔轴区点位库存 + * + * @param updateReqVO 更新信息 + */ + void updateIvtShafttubeivt(@Valid IvtShafttubeivtSaveReqVO updateReqVO); + + /** + * 删除穿拔轴区点位库存 + * + * @param id 编号 + */ + void deleteIvtShafttubeivt(Long id); + + /** + * 批量删除穿拔轴区点位库存 + * + * @param ids 编号 + */ + void deleteIvtShafttubeivtListByIds(List ids); + + /** + * 获得穿拔轴区点位库存 + * + * @param id 编号 + * @return 穿拔轴区点位库存 + */ + IvtShafttubeivtDO getIvtShafttubeivt(Long id); + + /** + * 获得穿拔轴区点位库存分页 + * + * @param pageReqVO 分页查询 + * @return 穿拔轴区点位库存分页 + */ + PageResult getIvtShafttubeivtPage(IvtShafttubeivtPageReqVO pageReqVO); + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtshafttubeivt/IvtShafttubeivtServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtshafttubeivt/IvtShafttubeivtServiceImpl.java new file mode 100644 index 00000000..ec9a3894 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/ivtshafttubeivt/IvtShafttubeivtServiceImpl.java @@ -0,0 +1,86 @@ +package cn.code.nl.module.lms.service.ivtshafttubeivt; + +import cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo.IvtShafttubeivtPageReqVO; +import cn.code.nl.module.lms.controller.admin.ivtshafttubeivt.vo.IvtShafttubeivtSaveReqVO; +import cn.code.nl.module.lms.dal.dataobject.ivtshafttubeivt.IvtShafttubeivtDO; +import cn.code.nl.module.lms.dal.mysql.ivtshafttubeivt.IvtShafttubeivtMapper; +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.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.PageParam; +import cn.code.nl.framework.common.util.object.BeanUtils; + + +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.IVT_SHAFTTUBEIVT_NOT_EXISTS; + +/** + * 穿拔轴区点位库存 Service 实现类 + * + * @author 诺力管理员 + */ +@Service +@Validated +public class IvtShafttubeivtServiceImpl implements IvtShafttubeivtService { + + @Resource + private IvtShafttubeivtMapper ivtShafttubeivtMapper; + + @Override + public Long createIvtShafttubeivt(IvtShafttubeivtSaveReqVO createReqVO) { + // 插入 + IvtShafttubeivtDO ivtShafttubeivt = BeanUtils.toBean(createReqVO, IvtShafttubeivtDO.class); + ivtShafttubeivtMapper.insert(ivtShafttubeivt); + + // 返回 + return ivtShafttubeivt.getIvtId(); + } + + @Override + public void updateIvtShafttubeivt(IvtShafttubeivtSaveReqVO updateReqVO) { + // 校验存在 + validateIvtShafttubeivtExists(updateReqVO.getIvtId()); + // 更新 + IvtShafttubeivtDO updateObj = BeanUtils.toBean(updateReqVO, IvtShafttubeivtDO.class); + ivtShafttubeivtMapper.updateById(updateObj); + } + + @Override + public void deleteIvtShafttubeivt(Long id) { + // 校验存在 + validateIvtShafttubeivtExists(id); + // 删除 + ivtShafttubeivtMapper.deleteById(id); + } + + @Override + public void deleteIvtShafttubeivtListByIds(List ids) { + // 删除 + ivtShafttubeivtMapper.deleteByIds(ids); + } + + + private void validateIvtShafttubeivtExists(Long id) { + if (ivtShafttubeivtMapper.selectById(id) == null) { + throw exception(IVT_SHAFTTUBEIVT_NOT_EXISTS); + } + } + + @Override + public IvtShafttubeivtDO getIvtShafttubeivt(Long id) { + return ivtShafttubeivtMapper.selectById(id); + } + + @Override + public PageResult getIvtShafttubeivtPage(IvtShafttubeivtPageReqVO pageReqVO) { + return ivtShafttubeivtMapper.selectPage(pageReqVO); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/pda/RawFoilService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/pda/RawFoilService.java new file mode 100644 index 00000000..3822e4c3 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/pda/RawFoilService.java @@ -0,0 +1,24 @@ +package cn.code.nl.module.lms.service.pda; + +import cn.code.nl.module.lms.controller.pda.vo.NeedEmptyAxisReqVO; +import cn.code.nl.module.lms.controller.pda.vo.RawFoilWorkOrderCreateReqVO; + +/** + * @author dsh + * 2026/7/23 + * 手持 - 生箔服务 + */ +public interface RawFoilService { + + /** + * 手持 - 创建生箔工序工单 + * @param createReqVO + * @return Long + */ + Long createWorkOrder(RawFoilWorkOrderCreateReqVO createReqVO); + + /** + * 手持 - 呼叫 上满下空 + */ + void needEmptyAxis(NeedEmptyAxisReqVO needEmptyAxisReqVO); +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/pda/RawFoilServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/pda/RawFoilServiceImpl.java new file mode 100644 index 00000000..147ba1f1 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/pda/RawFoilServiceImpl.java @@ -0,0 +1,172 @@ +package cn.code.nl.module.lms.service.pda; + +import cn.code.nl.framework.common.enums.CommonStatusEnum; +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.framework.common.util.object.BeanUtils; +import cn.code.nl.module.base.api.materialbase.MaterialBaseApi; +import cn.code.nl.module.base.api.materialbase.dto.MaterialBaseRespDTO; +import cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition.RawFoilCashePositionDO; +import cn.code.nl.module.lms.dal.dataobject.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionDO; +import cn.code.nl.module.lms.dal.dataobject.rawfoilpointivt.RawFoilPointIVTDO; +import cn.code.nl.module.lms.dal.dataobject.rawfoilworkorder.RawFoilWorkOrderDO; +import cn.code.nl.module.lms.dal.mysql.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionMapper; +import cn.code.nl.module.lms.dal.mysql.rawfoilpointivt.RawFoilPointIVTMapper; +import cn.code.nl.module.lms.dal.mysql.rawfoilworkorder.RawFoilWorkOrderMapper; +import cn.code.nl.module.lms.enums.*; +import cn.code.nl.module.lms.service.rawfoilcasheposition.RawFoilCashePositionService; +import cn.code.nl.module.lms.service.rawfoilpointivt.RawFoilPointIVTService; +import cn.code.nl.module.task.enums.AcsTaskTypeEnum; +import cn.code.nl.module.lms.controller.pda.vo.NeedEmptyAxisReqVO; +import cn.code.nl.module.lms.controller.pda.vo.RawFoilWorkOrderCreateReqVO; +import cn.code.nl.module.task.api.TransportTaskApi; +import cn.code.nl.module.task.dto.TransportTaskCreateReqDTO; +import cn.code.nl.module.task.enums.TaskOwnerServiceEnum; +import cn.code.nl.module.task.enums.TaskTypeEnum; +import cn.hutool.core.lang.UUID; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import static cn.code.nl.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.code.nl.module.lms.enums.ErrorCodeConstants.*; + +/** + * @author dsh + * 2026/7/23 + */ +@Slf4j +@Service +public class RawFoilServiceImpl implements RawFoilService{ + + @Resource + private RawFoilWorkOrderMapper rawFoilWorkOrderMapper; + + @Resource + private MaterialBaseApi materialBaseApi; + + @Resource + private RawFoilPointIVTMapper rawFoilPointIVTMapper; + + @Resource + private RawFoilEmptyRollerCashePositionMapper rawFoilEmptyRollerCashePositionMapper; + + @Resource + private TransportTaskApi transportTaskApi; + + @Resource + private RawFoilCashePositionService rawFoilCashePositionService; + + @Resource + private RawFoilPointIVTService rawFoilPointIVTService; + + @Override + public Long createWorkOrder(RawFoilWorkOrderCreateReqVO createReqVO) { + + RawFoilWorkOrderDO rawFoilWorkOrder = BeanUtils.toBean(createReqVO, RawFoilWorkOrderDO.class); + + // 校验是否存在相同母卷号未结束的生箔工序工单 + RawFoilWorkOrderDO rawFoilWorkOrderDO = rawFoilWorkOrderMapper.selectByContainerNameAndNotEndStatus(rawFoilWorkOrder.getContainerName()); + if (ObjectUtil.isNotEmpty(rawFoilWorkOrderDO)){ + throw exception(RAW_FOIL_WORK_ORDER_CONTAINER_NAME_EXISTS); + } + + //校验生箔机点位是否存在 + RawFoilPointIVTDO rawFoilPointIVTDO = rawFoilPointIVTMapper.selectByPointCode(rawFoilWorkOrder.getPointCode()); + if (ObjectUtil.isEmpty(rawFoilPointIVTDO)){ + throw exception(RAW_FOIL_WORK_ORDER_POINT_CODE_NOT_EXISTS); + } + + //判断物料是否存在 + //远程调用物料API + CommonResult result = materialBaseApi.getMaterialBaseByCode(rawFoilWorkOrder.getProductCode()); + // 判断是否访问成功 || 是否存在物料数据 || 物料是否已启用 + if (result.isError() || ObjectUtil.isEmpty(result.getData()) || String.valueOf(CommonStatusEnum.ENABLE.getStatus()).equals(result.getData().getIsUsed())){ + throw exception(RAW_FOIL_WORK_ORDER_MATERIAL_NOT_EXISTS); + } + + rawFoilWorkOrder.setWorkorderId(IdUtil.getSnowflakeNextId()); + rawFoilWorkOrder.setProductionArea(rawFoilPointIVTDO.getProductionArea()); + rawFoilWorkOrder.setStatus(RawFoilWorkOrderStatusEnum.START.getCode()); + + // 插入 + rawFoilWorkOrderMapper.insert(rawFoilWorkOrder); + + // 返回 + return rawFoilWorkOrder.getWorkorderId(); + } + + @Override + public void needEmptyAxis(NeedEmptyAxisReqVO needEmptyAxisReqVO) { + + RawFoilWorkOrderDO rawFoilWorkOrderDO = rawFoilWorkOrderMapper.selectById(needEmptyAxisReqVO.getWorkorderId()); + + // 校验工单是否存在 + if (ObjectUtil.isEmpty(rawFoilWorkOrderDO)){ + throw exception(RAW_FOIL_WORK_ORDER_NOT_EXISTS); + } + + // 校验生箔工序工单状态 + if (!RawFoilWorkOrderStatusEnum.START.getCode().equals(rawFoilWorkOrderDO.getStatus())){ + throw exception(RAW_FOIL_WORK_ORDER_STATUS_NOT_START); + } + + // 分配下满上空任务点位 + // 1.分配空辊站点 分配规则:按顺序分配 需要二次分配 先下发等待点 + // 2.分配生箔机下料位 + // 3.分配生箔机上空辊点位 + // 4.分配母卷下料位 分配规则:称重位>称重缓存位>母卷缓存位离称重位近的点位优先 + + // 校验是否存在空辊等待点 + RawFoilEmptyRollerCashePositionDO emptyRollerCashePositionDO = rawFoilEmptyRollerCashePositionMapper.selectEmptyRollerWaitPointByPointType(EmptyRollerPointTypeEnum.RAW_FOIL_EMPTY_ROLLER_WAIT_POINT.getCode()); + if (ObjectUtil.isEmpty(emptyRollerCashePositionDO)){ + throw exception(EMPTY_ROLLER_CASHE_POSITION_WAIT_POINT_NOT_EXISTS); + } + + // 分配并占用生箔机点位(校验点位存在、已启用;CAS 占用,抢占失败抛出点位被占用异常) + RawFoilPointIVTDO rawFoilPointIVTDO = rawFoilPointIVTService.allocatePoint(rawFoilWorkOrderDO.getPointCode()); + + TransportTaskCreateReqDTO reqDTO = new TransportTaskCreateReqDTO(); + reqDTO.setTaskName(UUID.randomUUID().toString()); + reqDTO.setOwnerService(TaskOwnerServiceEnum.LMS.getCode()); + reqDTO.setHandleCode(RawFoilHandleCodeConstants.RAW_FOIL_TASK); + reqDTO.setAcsTaskType(AcsTaskTypeEnum.TRUSS_TASK.getCode()); + reqDTO.setAgvSystemType("1"); + reqDTO.setPointCode1(emptyRollerCashePositionDO.getPointCode()); + reqDTO.setPointCode2(rawFoilPointIVTDO.getPointCode() + "_M"); + reqDTO.setPointCode3(rawFoilPointIVTDO.getPointCode() + "_K"); + reqDTO.setMaterialCode(rawFoilWorkOrderDO.getContainerName()); + reqDTO.setPriority("1"); + reqDTO.setProductArea(rawFoilWorkOrderDO.getProductionArea()); + reqDTO.setIsAutoIssue("1"); + reqDTO.setIsCreateFinish(true); + reqDTO.setTaskType(TaskTypeEnum.RAW_FOIL_STANDARD_TASK.getCode()); + + // 分配母卷下料位并占用、创建搬运任务;失败时补偿释放已占用的点位,避免点位死锁 + RawFoilCashePositionDO unloadingPosition = null; + try { + // 分配母卷下料位并占用(优先级:称重位 > 称重缓存位 > 常规缓存位) + unloadingPosition = rawFoilCashePositionService.allocateUnloadingPosition(); + reqDTO.setPointCode4(unloadingPosition.getPointCode()); + + CommonResult result = transportTaskApi.createTransportTask(reqDTO); + if (result.isError()) { + log.error("创建搬运任务失败, workorderId={}, reqDTO={}, 返回={}", + needEmptyAxisReqVO.getWorkorderId(), reqDTO, result); + throw exception(RAW_FOIL_TRANSPORT_TASK_CREATE_FAIL); + } + } catch (Exception e) { + // 补偿释放:生箔机点位 + 母卷下料位(下料位尚未分配成功时跳过) + rawFoilPointIVTService.releasePointLock(rawFoilPointIVTDO.getPointCode()); + if (ObjectUtil.isNotEmpty(unloadingPosition)) { + rawFoilCashePositionService.releasePositionLock(unloadingPosition.getPointCode()); + } + throw e; + } + + // 更新生箔工单状态 + rawFoilWorkOrderDO.setStatus(RawFoilWorkOrderStatusEnum.EXECUTION.getCode()); + rawFoilWorkOrderMapper.updateById(rawFoilWorkOrderDO); + } +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilcasheposition/RawFoilCashePositionService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilcasheposition/RawFoilCashePositionService.java new file mode 100644 index 00000000..e738ade5 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilcasheposition/RawFoilCashePositionService.java @@ -0,0 +1,104 @@ +package cn.code.nl.module.lms.service.rawfoilcasheposition; + +import java.util.*; +import jakarta.validation.*; +import cn.code.nl.module.lms.controller.admin.rawfoilcasheposition.vo.*; +import cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition.RawFoilCashePositionDO; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.PageParam; + +/** + * 生箔母卷缓存位 Service 接口 + * + * @author 诺力管理员 + */ +public interface RawFoilCashePositionService { + + /** + * 创建生箔母卷缓存位 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createRawFoilCashePosition(@Valid RawFoilCashePositionSaveReqVO createReqVO); + + /** + * 更新生箔母卷缓存位 + * + * @param updateReqVO 更新信息 + */ + void updateRawFoilCashePosition(@Valid RawFoilCashePositionSaveReqVO updateReqVO); + + /** + * 删除生箔母卷缓存位 + * + * @param id 编号 + */ + void deleteRawFoilCashePosition(Long id); + + /** + * 批量删除生箔母卷缓存位 + * + * @param ids 编号 + */ + void deleteRawFoilCashePositionListByIds(List ids); + + /** + * 获得生箔母卷缓存位 + * + * @param id 编号 + * @return 生箔母卷缓存位 + */ + RawFoilCashePositionDO getRawFoilCashePosition(Long id); + + /** + * 获得生箔母卷缓存位分页 + * + * @param pageReqVO 分页查询 + * @return 生箔母卷缓存位分页 + */ + PageResult getRawFoilCashePositionPage(RawFoilCashePositionPageReqVO pageReqVO); + + /** + * 分配母卷下料位并占用 + * 优先级:称重位 > 称重缓存位 > 常规缓存位(顺序号越小离称重位越近) + * 通过 lock_status 条件更新原子占用,并发时同一点位只有一个调用方能抢到 + * + * @return 已占用的下料位 + */ + RawFoilCashePositionDO allocateUnloadingPosition(); + + /** + * 母卷到达下料位:写入母卷信息并释放占用(任务完成回调用) + * + * @param pointCode 下料位编码 + * @param containerName 母卷号 + * @param workorderId 母卷工单标识(可为空,反查工单失败时传 null) + */ + void handlePositionInstorage(String pointCode, String containerName, String workorderId); + + /** + * 释放下料位占用(任务取消、任务创建失败补偿用) + * + * @param pointCode 下料位编码 + */ + void releasePositionLock(String pointCode); + + /** + * 分配常规缓存位并占用 + * 无优先级排序需求:任一空闲常规位即可,通过 lock_status 条件更新原子占用 + * + * @return 已占用的常规缓存位 + */ + RawFoilCashePositionDO allocateConventionalPosition(); + + /** + * 母卷离开起点:清空起点点位(称重位)上的母卷记录(任务完成回调用) + * 仅当点位上的母卷号匹配时清空,重复回调幂等 + * + * @param pointCode 起点点位编码 + * @param containerName 母卷号 + */ + void handlePositionOutstock(String pointCode, String containerName); + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilcasheposition/RawFoilCashePositionServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilcasheposition/RawFoilCashePositionServiceImpl.java new file mode 100644 index 00000000..35e21cfb --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilcasheposition/RawFoilCashePositionServiceImpl.java @@ -0,0 +1,152 @@ +package cn.code.nl.module.lms.service.rawfoilcasheposition; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.IdUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.*; +import cn.code.nl.module.lms.controller.admin.rawfoilcasheposition.vo.*; +import cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition.RawFoilCashePositionDO; +import cn.code.nl.module.lms.enums.RawFoilCashePositionTypeEnum; +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.rawfoilcasheposition.RawFoilCashePositionMapper; + +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 诺力管理员 + */ +@Slf4j +@Service +@Validated +public class RawFoilCashePositionServiceImpl implements RawFoilCashePositionService { + + /** 母卷下料位分配优先级:称重位 > 称重缓存位 > 常规缓存位 */ + private static final List UNLOADING_POSITION_PRIORITY = List.of( + RawFoilCashePositionTypeEnum.WEIGHING_POSITION.getCode(), + RawFoilCashePositionTypeEnum.WEIGHING_BUFFER_POSITION.getCode(), + RawFoilCashePositionTypeEnum.CONVENTIONAL.getCode()); + + @Resource + private RawFoilCashePositionMapper rawFoilCashePositionMapper; + + @Override + public Long createRawFoilCashePosition(RawFoilCashePositionSaveReqVO createReqVO) { + // 插入 + RawFoilCashePositionDO rawFoilCashePosition = BeanUtils.toBean(createReqVO, RawFoilCashePositionDO.class); + rawFoilCashePosition.setIvtId(IdUtil.getSnowflakeNextId()); + rawFoilCashePositionMapper.insert(rawFoilCashePosition); + + // 返回 + return rawFoilCashePosition.getIvtId(); + } + + @Override + public void updateRawFoilCashePosition(RawFoilCashePositionSaveReqVO updateReqVO) { + // 校验存在 + validateRawFoilCashePositionExists(updateReqVO.getIvtId()); + // 更新 + RawFoilCashePositionDO updateObj = BeanUtils.toBean(updateReqVO, RawFoilCashePositionDO.class); + rawFoilCashePositionMapper.updateById(updateObj); + } + + @Override + public void deleteRawFoilCashePosition(Long id) { + // 校验存在 + validateRawFoilCashePositionExists(id); + // 删除 + rawFoilCashePositionMapper.deleteById(id); + } + + @Override + public void deleteRawFoilCashePositionListByIds(List ids) { + // 删除 + rawFoilCashePositionMapper.deleteByIds(ids); + } + + + private void validateRawFoilCashePositionExists(Long id) { + if (rawFoilCashePositionMapper.selectById(id) == null) { + throw exception(RAW_FOIL_CASHE_POSITION_NOT_EXISTS); + } + } + + @Override + public RawFoilCashePositionDO getRawFoilCashePosition(Long id) { + return rawFoilCashePositionMapper.selectById(id); + } + + @Override + public PageResult getRawFoilCashePositionPage(RawFoilCashePositionPageReqVO pageReqVO) { + return rawFoilCashePositionMapper.selectPage(pageReqVO); + } + + @Override + public RawFoilCashePositionDO allocateUnloadingPosition() { + return allocatePositionByPriority(UNLOADING_POSITION_PRIORITY); + } + + @Override + public RawFoilCashePositionDO allocateConventionalPosition() { + // 常规缓存位无优先级排序需求,单类型直接分配 + return allocatePositionByPriority(List.of(RawFoilCashePositionTypeEnum.CONVENTIONAL.getCode())); + } + + /** + * 按点位类型优先级顺序分配点位并占用 + * 逐级查询某类型全部空闲候选位,逐个尝试 CAS 占用;抢占失败(已被并发请求抢走)则顺延下一个候选位 + * + * @param pointTypes 点位类型编码优先级列表 + * @return 已占用的点位 + */ + private RawFoilCashePositionDO allocatePositionByPriority(List pointTypes) { + for (String pointType : pointTypes) { + List candidates = rawFoilCashePositionMapper.selectEmptyPositionList(pointType); + for (RawFoilCashePositionDO candidate : candidates) { + if (rawFoilCashePositionMapper.lockPosition(candidate.getIvtId()) > 0) { + return candidate; + } + } + } + throw exception(RAW_FOIL_CASHE_POSITION_NOT_SELECT); + } + + @Override + public void handlePositionInstorage(String pointCode, String containerName, String workorderId) { + int rows = rawFoilCashePositionMapper.instoragePosition(pointCode, containerName, + workorderId, LocalDateTime.now()); + if (rows == 0) { + log.info("下料位入库跳过(点位未被占用或已入库), pointCode={}, containerName={}", pointCode, containerName); + } + } + + @Override + public void releasePositionLock(String pointCode) { + int rows = rawFoilCashePositionMapper.releaseLockByPointCode(pointCode); + if (rows == 0) { + log.info("下料位占用释放跳过(点位未被占用), pointCode={}", pointCode); + } + } + + @Override + public void handlePositionOutstock(String pointCode, String containerName) { + int rows = rawFoilCashePositionMapper.outstockPosition(pointCode, containerName); + if (rows == 0) { + log.info("起点母卷出库跳过(点位上无该母卷), pointCode={}, containerName={}", pointCode, containerName); + } + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionService.java new file mode 100644 index 00000000..1877e222 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionService.java @@ -0,0 +1,73 @@ +package cn.code.nl.module.lms.service.rawfoilemptyrollercasheposition; + +import java.util.*; + +import cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition.RawFoilCashePositionDO; +import jakarta.validation.*; +import cn.code.nl.module.lms.controller.admin.rawfoilemptyrollercasheposition.vo.*; +import cn.code.nl.module.lms.dal.dataobject.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionDO; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.PageParam; + +/** + * 空辊缓存位 Service 接口 + * + * @author 诺力管理员 + */ +public interface RawFoilEmptyRollerCashePositionService { + + /** + * 创建空辊缓存位 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createRawFoilEmptyRollerCashePosition(@Valid RawFoilEmptyRollerCashePositionSaveReqVO createReqVO); + + /** + * 更新空辊缓存位 + * + * @param updateReqVO 更新信息 + */ + void updateRawFoilEmptyRollerCashePosition(@Valid RawFoilEmptyRollerCashePositionSaveReqVO updateReqVO); + + /** + * 删除空辊缓存位 + * + * @param id 编号 + */ + void deleteRawFoilEmptyRollerCashePosition(Long id); + + /** + * 批量删除空辊缓存位 + * + * @param ids 编号 + */ + void deleteRawFoilEmptyRollerCashePositionListByIds(List ids); + + /** + * 获得空辊缓存位 + * + * @param id 编号 + * @return 空辊缓存位 + */ + RawFoilEmptyRollerCashePositionDO getRawFoilEmptyRollerCashePosition(Long id); + + /** + * 获得空辊缓存位分页 + * + * @param pageReqVO 分页查询 + * @return 空辊缓存位分页 + */ + PageResult getRawFoilEmptyRollerCashePositionPage(RawFoilEmptyRollerCashePositionPageReqVO pageReqVO); + + /** + * 分配空辊位并占用 + * 按照顺序分配 + * 通过 lock_status 条件更新原子占用,并发时同一点位只有一个调用方能抢到 + * + * @return 已占用的空辊位 + */ + RawFoilEmptyRollerCashePositionDO allocateLoadingPosition(String pointType); + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionServiceImpl.java new file mode 100644 index 00000000..c7f2864c --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilemptyrollercasheposition/RawFoilEmptyRollerCashePositionServiceImpl.java @@ -0,0 +1,105 @@ +package cn.code.nl.module.lms.service.rawfoilemptyrollercasheposition; + +import cn.code.nl.module.lms.dal.dataobject.rawfoilcasheposition.RawFoilCashePositionDO; +import cn.code.nl.module.lms.enums.StockStatusEnum; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.*; +import cn.code.nl.module.lms.controller.admin.rawfoilemptyrollercasheposition.vo.*; +import cn.code.nl.module.lms.dal.dataobject.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionDO; +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.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionMapper; + +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 RawFoilEmptyRollerCashePositionServiceImpl implements RawFoilEmptyRollerCashePositionService { + + @Resource + private RawFoilEmptyRollerCashePositionMapper rawFoilEmptyRollerCashePositionMapper; + + @Override + public Long createRawFoilEmptyRollerCashePosition(RawFoilEmptyRollerCashePositionSaveReqVO createReqVO) { + // 插入 + RawFoilEmptyRollerCashePositionDO rawFoilEmptyRollerCashePosition = BeanUtils.toBean(createReqVO, RawFoilEmptyRollerCashePositionDO.class); + + rawFoilEmptyRollerCashePosition.setPointId(IdUtil.getSnowflakeNextId()); + rawFoilEmptyRollerCashePositionMapper.insert(rawFoilEmptyRollerCashePosition); + + // 返回 + return rawFoilEmptyRollerCashePosition.getPointId(); + } + + @Override + public void updateRawFoilEmptyRollerCashePosition(RawFoilEmptyRollerCashePositionSaveReqVO updateReqVO) { + // 校验存在 + validateRawFoilEmptyRollerCashePositionExists(updateReqVO.getPointId()); + // 更新 + RawFoilEmptyRollerCashePositionDO updateObj = BeanUtils.toBean(updateReqVO, RawFoilEmptyRollerCashePositionDO.class); + rawFoilEmptyRollerCashePositionMapper.updateById(updateObj); + } + + @Override + public void deleteRawFoilEmptyRollerCashePosition(Long id) { + // 校验存在 + validateRawFoilEmptyRollerCashePositionExists(id); + // 删除 + rawFoilEmptyRollerCashePositionMapper.deleteById(id); + } + + @Override + public void deleteRawFoilEmptyRollerCashePositionListByIds(List ids) { + // 删除 + rawFoilEmptyRollerCashePositionMapper.deleteByIds(ids); + } + + + private void validateRawFoilEmptyRollerCashePositionExists(Long id) { + if (rawFoilEmptyRollerCashePositionMapper.selectById(id) == null) { + throw exception(RAW_FOIL_EMPTY_ROLLER_CASHE_POSITION_NOT_EXISTS); + } + } + + @Override + public RawFoilEmptyRollerCashePositionDO getRawFoilEmptyRollerCashePosition(Long id) { + return rawFoilEmptyRollerCashePositionMapper.selectById(id); + } + + @Override + public PageResult getRawFoilEmptyRollerCashePositionPage(RawFoilEmptyRollerCashePositionPageReqVO pageReqVO) { + return rawFoilEmptyRollerCashePositionMapper.selectPage(pageReqVO); + } + + @Override + public RawFoilEmptyRollerCashePositionDO allocateLoadingPosition(String pointType) { + + List candidates = rawFoilEmptyRollerCashePositionMapper.selectEmptyPositionList(pointType, StockStatusEnum.YES.getCode()); + // 尝试 CAS 占用 + for (RawFoilEmptyRollerCashePositionDO candidate : candidates) { + if (rawFoilEmptyRollerCashePositionMapper.lockPosition(candidate.getPointId()) > 0) { + return candidate; + } + } + throw exception(EMPTY_ROLLER_CASHE_POSITION_NOT_ALLOCATE); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilpointivt/RawFoilPointIVTService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilpointivt/RawFoilPointIVTService.java index 44734659..d97e8084 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilpointivt/RawFoilPointIVTService.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilpointivt/RawFoilPointIVTService.java @@ -1,62 +1,78 @@ -package cn.code.nl.module.lms.service.rawfoilpointivt; - -import java.util.*; -import jakarta.validation.*; -import cn.code.nl.module.lms.controller.admin.rawfoilpointivt.vo.*; -import cn.code.nl.module.lms.dal.dataobject.rawfoilpointivt.RawFoilPointIVTDO; -import cn.code.nl.framework.common.pojo.PageResult; -import cn.code.nl.framework.common.pojo.PageParam; - -/** - * 生箔点位库存 Service 接口 - * - * @author 诺力管理员 - */ -public interface RawFoilPointIVTService { - - /** - * 创建生箔点位库存 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createRawFoilPointIVT(@Valid RawFoilPointIVTSaveReqVO createReqVO); - - /** - * 更新生箔点位库存 - * - * @param updateReqVO 更新信息 - */ - void updateRawFoilPointIVT(@Valid RawFoilPointIVTSaveReqVO updateReqVO); - - /** - * 删除生箔点位库存 - * - * @param id 编号 - */ - void deleteRawFoilPointIVT(Long id); - - /** - * 批量删除生箔点位库存 - * - * @param ids 编号 - */ - void deleteRawFoilPointIVTListByIds(List ids); - - /** - * 获得生箔点位库存 - * - * @param id 编号 - * @return 生箔点位库存 - */ - RawFoilPointIVTDO getRawFoilPointIVT(Long id); - - /** - * 获得生箔点位库存分页 - * - * @param pageReqVO 分页查询 - * @return 生箔点位库存分页 - */ - PageResult getRawFoilPointIVTPage(RawFoilPointIVTPageReqVO pageReqVO); - -} \ No newline at end of file +package cn.code.nl.module.lms.service.rawfoilpointivt; + +import java.util.*; +import jakarta.validation.*; +import cn.code.nl.module.lms.controller.admin.rawfoilpointivt.vo.*; +import cn.code.nl.module.lms.dal.dataobject.rawfoilpointivt.RawFoilPointIVTDO; +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.common.pojo.PageParam; + +/** + * 生箔点位库存 Service 接口 + * + * @author 诺力管理员 + */ +public interface RawFoilPointIVTService { + + /** + * 创建生箔点位库存 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createRawFoilPointIVT(@Valid RawFoilPointIVTSaveReqVO createReqVO); + + /** + * 更新生箔点位库存 + * + * @param updateReqVO 更新信息 + */ + void updateRawFoilPointIVT(@Valid RawFoilPointIVTSaveReqVO updateReqVO); + + /** + * 删除生箔点位库存 + * + * @param id 编号 + */ + void deleteRawFoilPointIVT(Long id); + + /** + * 批量删除生箔点位库存 + * + * @param ids 编号 + */ + void deleteRawFoilPointIVTListByIds(List ids); + + /** + * 获得生箔点位库存 + * + * @param id 编号 + * @return 生箔点位库存 + */ + RawFoilPointIVTDO getRawFoilPointIVT(Long id); + + /** + * 获得生箔点位库存分页 + * + * @param pageReqVO 分页查询 + * @return 生箔点位库存分页 + */ + PageResult getRawFoilPointIVTPage(RawFoilPointIVTPageReqVO pageReqVO); + + /** + * 分配并占用生箔机点位:校验点位存在、已启用后 CAS 占用 + * 点位不存在、未启用、抢占失败时抛出对应业务异常 + * + * @param pointCode 点位编码 + * @return 已占用的生箔机点位信息 + */ + RawFoilPointIVTDO allocatePoint(String pointCode); + + /** + * 释放生箔机点位占用:幂等释放,仅当点位被占用时释放 + * + * @param pointCode 点位编码 + */ + void releasePointLock(String pointCode); + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilpointivt/RawFoilPointIVTServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilpointivt/RawFoilPointIVTServiceImpl.java index cacb287e..51e796a9 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilpointivt/RawFoilPointIVTServiceImpl.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilpointivt/RawFoilPointIVTServiceImpl.java @@ -1,7 +1,10 @@ package cn.code.nl.module.lms.service.rawfoilpointivt; +import cn.code.nl.framework.common.enums.CommonStatusEnum; import cn.code.nl.framework.security.core.util.SecurityFrameworkUtils; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -26,6 +29,7 @@ import static cn.code.nl.module.lms.enums.ErrorCodeConstants.*; * * @author 诺力管理员 */ +@Slf4j @Service @Validated public class RawFoilPointIVTServiceImpl implements RawFoilPointIVTService { @@ -83,4 +87,30 @@ public class RawFoilPointIVTServiceImpl implements RawFoilPointIVTService { return rawFoilPointIVTMapper.selectPage(pageReqVO); } + @Override + public RawFoilPointIVTDO allocatePoint(String pointCode) { + // 校验生箔机点位是否存在 + RawFoilPointIVTDO rawFoilPointIVT = rawFoilPointIVTMapper.selectByPointCode(pointCode); + if (ObjectUtil.isEmpty(rawFoilPointIVT)) { + throw exception(RAW_FOIL_WORK_ORDER_POINT_CODE_NOT_EXISTS); + } + // 校验生箔机点位是否启用 + if (String.valueOf(CommonStatusEnum.ENABLE.getStatus()).equals(rawFoilPointIVT.getIsUsed())) { + throw exception(RAW_FOIL_WORK_ORDER_POINT_CODE_NOT_USED); + } + // CAS 占用:抢占失败说明已被其他工单占用 + if (rawFoilPointIVTMapper.lockPoint(rawFoilPointIVT.getPointId()) == 0) { + throw exception(RAW_FOIL_WORK_ORDER_POINT_OCCUPIED, rawFoilPointIVT.getPointCode()); + } + return rawFoilPointIVT; + } + + @Override + public void releasePointLock(String pointCode) { + int rows = rawFoilPointIVTMapper.releaseLockByPointCode(pointCode); + if (rows == 0) { + log.info("生箔机点位占用释放跳过(点位未被占用), pointCode={}", pointCode); + } + } + } diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilworkorder/RawFoilWorkOrderServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilworkorder/RawFoilWorkOrderServiceImpl.java index 9d7363e2..a144917f 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilworkorder/RawFoilWorkOrderServiceImpl.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/rawfoilworkorder/RawFoilWorkOrderServiceImpl.java @@ -7,6 +7,9 @@ import cn.code.nl.module.base.api.materialbase.dto.MaterialBaseRespDTO; import cn.code.nl.module.lms.dal.dataobject.rawfoilpointivt.RawFoilPointIVTDO; import cn.code.nl.module.lms.dal.mysql.rawfoilpointivt.RawFoilPointIVTMapper; import cn.code.nl.module.lms.enums.RawFoilWorkOrderStatusEnum; +import cn.code.nl.module.task.api.TransportTaskApi; +import cn.code.nl.module.task.dto.TaskInfoDTO; +import cn.code.nl.module.task.enums.TaskOwnerServiceEnum; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import org.springframework.stereotype.Service; @@ -48,6 +51,9 @@ public class RawFoilWorkOrderServiceImpl implements RawFoilWorkOrderService { @Resource private MaterialBaseApi materialBaseApi; + @Resource + private TransportTaskApi transportTaskApi; + @Override public Long createRawFoilWorkOrder(RawFoilWorkOrderSaveReqVO createReqVO) { @@ -176,7 +182,14 @@ public class RawFoilWorkOrderServiceImpl implements RawFoilWorkOrderService { throw exception(RAW_FOIL_WORK_ORDER_ALREADY_ENDED); } - // TODO 校验该生箔工单存在未完成的任务,请先完成任务。 + // 校验该生箔工单存在未完成的任务,请先完成任务。 + CommonResult> result = transportTaskApi.getRunningTaskByMaterialCode(workOrder.getContainerName(), TaskOwnerServiceEnum.LMS.getCode()); + if (result.isError()){ + throw exception(RAW_FOIL_WORK_ORDER_FAIL); + } + if (result.getData() != null){ + throw exception(RAW_FOIL_WORK_ORDER_NOT_SELECT); + } // 更新为结束状态,并记录结束时间 RawFoilWorkOrderDO updateObj = new RawFoilWorkOrderDO(); diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/task/RawFoilTask.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/task/RawFoilTask.java new file mode 100644 index 00000000..a51ffd54 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/task/RawFoilTask.java @@ -0,0 +1,115 @@ +package cn.code.nl.module.lms.task; + +import cn.code.nl.framework.common.pojo.CommonResult; +import cn.code.nl.framework.execute.core.AbstractTask; +import cn.code.nl.framework.execute.core.dto.TaskExecuteDTO; +import cn.code.nl.module.lms.dal.dataobject.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionDO; +import cn.code.nl.module.lms.dal.dataobject.rawfoilworkorder.RawFoilWorkOrderDO; +import cn.code.nl.module.lms.dal.mysql.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionMapper; +import cn.code.nl.module.lms.dal.mysql.rawfoilworkorder.RawFoilWorkOrderMapper; +import cn.code.nl.module.lms.enums.EmptyRollerPointTypeEnum; +import cn.code.nl.module.lms.enums.RawFoilHandleCodeConstants; +import cn.code.nl.module.lms.service.rawfoilcasheposition.RawFoilCashePositionService; +import cn.code.nl.module.lms.service.rawfoilemptyrollercasheposition.RawFoilEmptyRollerCashePositionService; +import cn.code.nl.module.task.api.TransportTaskApi; +import cn.code.nl.module.task.dto.TaskInfoDTO; +import cn.code.nl.module.task.enums.TransportTaskStatusEnum; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import static cn.code.nl.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.code.nl.module.lms.enums.ErrorCodeConstants.RAW_FOIL_TASK_ERROR; + +/** + * 生箔搬运任务回调处理器 + * 任务完成:母卷到达下料位,写入母卷信息并释放点位占用 + * 任务取消:释放下料位占用 + * + * @author dsh + * 2026/7/28 + */ +@Slf4j +@Component(RawFoilHandleCodeConstants.RAW_FOIL_TASK) +public class RawFoilTask extends AbstractTask { + + @Resource + private TransportTaskApi transportTaskApi; + + @Resource + private RawFoilCashePositionService rawFoilCashePositionService; + + @Resource + private RawFoilEmptyRollerCashePositionService rawFoilEmptyRollerCashePositionService; + + @Resource + private RawFoilWorkOrderMapper rawFoilWorkOrderMapper; + + /** + * 处理任务完成:母卷到达下料位,写入母卷信息并释放点位占用 + * + * @param taskExecuteDTO 任务执行信息 + */ + @Override + public void doHandleFinish(TaskExecuteDTO taskExecuteDTO) { + // 查询任务全量信息,获取下料位编码和母卷号 + TaskInfoDTO task = getTaskInfo(taskExecuteDTO.getTaskId()); + if (task == null) { + return; + } + // 用母卷号反查未结束工单,获取工单标识(反查失败仅告警,不阻塞入库主流程) + RawFoilWorkOrderDO workOrder = rawFoilWorkOrderMapper + .selectByContainerNameAndNotEndStatus(task.getMaterialCode()); + if (workOrder == null) { + log.warn("母卷号反查工单失败, containerName={}, taskId={}", + task.getMaterialCode(), task.getTaskId()); + } + String workorderId = workOrder != null ? String.valueOf(workOrder.getWorkorderId()) : null; + // 母卷到达下料位:写入母卷信息并释放占用 + rawFoilCashePositionService.handlePositionInstorage( + task.getPointCode4(), task.getMaterialCode(), workorderId); + + + } + + /** + * 处理任务取消:释放下料位占用 + * + * @param taskExecuteDTO 任务执行信息 + */ + @Override + public void doHandleCancel(TaskExecuteDTO taskExecuteDTO) { + TaskInfoDTO task = getTaskInfo(taskExecuteDTO.getTaskId()); + if (task == null) { + return; + } + rawFoilCashePositionService.releasePositionLock(task.getPointCode4()); + } + + @Override + public String againApply(TaskExecuteDTO taskExecuteDTO) { + TaskInfoDTO task = getTaskInfo(taskExecuteDTO.getTaskId()); + if (task == null){ + throw exception(RAW_FOIL_TASK_ERROR); + } + //二次分配库位 分配生箔空辊点 + RawFoilEmptyRollerCashePositionDO rawFoilEmptyRollerCashePositionDO = rawFoilEmptyRollerCashePositionService.allocateLoadingPosition(EmptyRollerPointTypeEnum.RAW_FOIL_EMPTY_ROLLER_POINT.getCode()); + return rawFoilEmptyRollerCashePositionDO.getPointCode(); + } + + /** + * 查询任务信息,查询失败或任务不存在或任务状态为最终状态时记录告警并返回 null(不抛异常,避免 MQ 无限重试) + * + * @param taskId 任务标识 + * @return 任务信息,不存在时返回 null + */ + private TaskInfoDTO getTaskInfo(Long taskId) { + CommonResult result = transportTaskApi.getTaskById(taskId); + if (result.isError() || result.getData() == null) { + log.warn("任务不存在或查询失败,跳过点位状态处理, taskId={}, 返回={}", taskId, result); + return null; + } + return result.getData(); + } + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/application-dev.yaml b/nl-module-lms/nl-module-lms-server/src/main/resources/application-dev.yaml index 6379951a..2d9ac335 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/resources/application-dev.yaml +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/application-dev.yaml @@ -7,12 +7,12 @@ spring: username: nacos password: nacos discovery: # 【配置中心】配置项 - namespace: dev # 命名空间。这里使用 dev 开发环境 + namespace: 9a321b6b-68c6-45e1-90b0-bc187d7c29bb # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP metadata: version: 1.0.0 # 服务实例的版本号,可用于灰度发布 config: # 【注册中心】配置项 - namespace: dev # 命名空间。这里使用 dev 开发环境 + namespace: 9a321b6b-68c6-45e1-90b0-bc187d7c29bb # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP --- #################### 数据库相关配置 #################### @@ -140,4 +140,4 @@ logging: # 芋道配置项,设置当前项目所有自定义的配置 nl: - demo: false # 开启演示模式 \ No newline at end of file + demo: false # 开启演示模式 diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/application-mq-dev.yaml b/nl-module-lms/nl-module-lms-server/src/main/resources/application-mq-dev.yaml index cb823736..836b81dd 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/resources/application-mq-dev.yaml +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/application-mq-dev.yaml @@ -3,9 +3,14 @@ rocketmq: name-server: 192.168.81.193:9876 producer: - group: lms_producer_dev_group # 事务消息需要配置一样 + group: nl_producer_dev_group send-message-timeout: 3000 consumer: + wms-task-operate: + group: wms_task_status_change_dev_group + topic: wms_task_status_change_dev_topic lms-task-operate: group: lms_task_status_change_dev_group - topic: lms_task_status_change_dev_topic \ No newline at end of file + topic: lms_task_status_change_dev_topic + task: + topic: task_status_change_dev_topic \ No newline at end of file diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/btivtcutpointivt/BtIvtCutpointivtMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/btivtcutpointivt/BtIvtCutpointivtMapper.xml new file mode 100644 index 00000000..84e7488d --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/btivtcutpointivt/BtIvtCutpointivtMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/ivtcutpointIvt/IvtCutpointivtMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/ivtcutpointIvt/IvtCutpointivtMapper.xml new file mode 100644 index 00000000..26ce70eb --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/ivtcutpointIvt/IvtCutpointivtMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/ivtshafttubeivt/IvtShafttubeivtMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/ivtshafttubeivt/IvtShafttubeivtMapper.xml new file mode 100644 index 00000000..b2cb1460 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/ivtshafttubeivt/IvtShafttubeivtMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/nl-module-system/nl-module-system-server/src/main/java/cn/code/nl/module/system/job/slitter/AutoCallAirShaftTask.java b/nl-module-system/nl-module-system-server/src/main/java/cn/code/nl/module/system/job/slitter/AutoCallAirShaftTask.java new file mode 100644 index 00000000..a53fa3d7 --- /dev/null +++ b/nl-module-system/nl-module-system-server/src/main/java/cn/code/nl/module/system/job/slitter/AutoCallAirShaftTask.java @@ -0,0 +1,23 @@ +package cn.code.nl.module.system.job.slitter; + +import cn.code.nl.framework.tenant.core.job.TenantJob; +import com.xxl.job.core.handler.annotation.XxlJob; +import org.springframework.stereotype.Component; + + +/** + * 自动套轴任务创建 + */ +@Component +public class AutoCallAirShaftTask { + + + + @XxlJob("autoCallAirShaftTask") + @TenantJob + public void execute() { + + + + } +} diff --git a/nl-module-system/nl-module-system-server/src/main/resources/application-dev.yaml b/nl-module-system/nl-module-system-server/src/main/resources/application-dev.yaml index c6d5d1a5..c9012eb3 100644 --- a/nl-module-system/nl-module-system-server/src/main/resources/application-dev.yaml +++ b/nl-module-system/nl-module-system-server/src/main/resources/application-dev.yaml @@ -4,15 +4,15 @@ spring: cloud: nacos: server-addr: 192.168.81.193:8848 # Nacos 服务器地址 - username: nacos - password: nacos + username: # Nacos 账号 + password: # Nacos 密码 discovery: # 【配置中心】配置项 - namespace: 91c8ac41-7fb0-423b-947e-2caad4c87d41 # 命名空间。这里使用 dev 开发环境 + namespace: 9a321b6b-68c6-45e1-90b0-bc187d7c29bb # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP metadata: version: 1.0.0 # 服务实例的版本号,可用于灰度发布 config: # 【注册中心】配置项 - namespace: 91c8ac41-7fb0-423b-947e-2caad4c87d41 # 命名空间。这里使用 dev 开发环境 + namespace: 9a321b6b-68c6-45e1-90b0-bc187d7c29bb # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP --- #################### 数据库相关配置 #################### @@ -57,14 +57,14 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.81.193:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: root + password: root123 slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.81.193:3306/huachuang_lms_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: root + password: root123 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: @@ -99,7 +99,7 @@ xxl: accessToken: 123456 # 执行器通讯TOKEN executor: ip: 192.168.81.193 - port: 8992 + port: 9982 --- #################### 服务保障相关配置 #################### diff --git a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/AcsTaskTypeEnum.java b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/AcsTaskTypeEnum.java new file mode 100644 index 00000000..6b80c9ba --- /dev/null +++ b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/AcsTaskTypeEnum.java @@ -0,0 +1,24 @@ +package cn.code.nl.module.task.enums; + +import lombok.Getter; + +/** + * @author dsh + * 2026/7/28 + */ +@Getter +public enum AcsTaskTypeEnum { + + AGV_TASK("1","agv任务"), + TRUSS_TASK("6","桁架任务"); + + + private String code; + + private String name; + + AcsTaskTypeEnum(String code,String name){ + this.code = code; + this.name = name; + } +} diff --git a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskOwnerServiceEnum.java b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskOwnerServiceEnum.java index d007a9ed..9c476647 100644 --- a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskOwnerServiceEnum.java +++ b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskOwnerServiceEnum.java @@ -5,6 +5,8 @@ import lombok.Getter; /** * 任务业务归属服务枚举 + * @author dsh + * 2026/7/29 */ @Getter @AllArgsConstructor @@ -13,6 +15,10 @@ public enum TaskOwnerServiceEnum { LMS("lms", "LMS"), WMS("wms", "WMS"); + private String code; + + private String name; + /** * MQ Topic 前缀 */ diff --git a/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskTypeEnum.java b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskTypeEnum.java new file mode 100644 index 00000000..b861612a --- /dev/null +++ b/nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskTypeEnum.java @@ -0,0 +1,24 @@ +package cn.code.nl.module.task.enums; + +import lombok.Getter; + +/** + * @author dsh + * 2026/7/30 + */ +@Getter +public enum TaskTypeEnum { + + RAW_FOIL_STANDARD_TASK("010101","生箔标准任务"), + RAW_FOIL_INSTORAGE_TASK("010102","称重入库任务"); + + + private String code; + + private String name; + + TaskTypeEnum(String code,String name){ + this.code = code; + this.name = name; + } +} diff --git a/nl-module-wms/nl-module-wms-server/src/main/resources/mapper/bsrealstorattr/BsrealStorAttrMapper.xml b/nl-module-wms/nl-module-wms-server/src/main/resources/mapper/bsrealstorattr/BtIvtCutpointivtMapper.xml similarity index 100% rename from nl-module-wms/nl-module-wms-server/src/main/resources/mapper/bsrealstorattr/BsrealStorAttrMapper.xml rename to nl-module-wms/nl-module-wms-server/src/main/resources/mapper/bsrealstorattr/BtIvtCutpointivtMapper.xml diff --git a/nl-server/src/main/resources/application-dev.yaml b/nl-server/src/main/resources/application-dev.yaml index 9b465d8e..e1987936 100644 --- a/nl-server/src/main/resources/application-dev.yaml +++ b/nl-server/src/main/resources/application-dev.yaml @@ -74,7 +74,7 @@ xxl: executor: appname: nl-lms-server ip: 192.168.81.193 - port: 9992 + port: 9982 --- #################### 消息队列相关 #################### @@ -209,4 +209,4 @@ iot: # 插件配置 pf4j: - pluginsDir: ${user.home}/plugins # 插件目录 \ No newline at end of file + pluginsDir: ${user.home}/plugins # 插件目录 diff --git a/nl-server/src/main/resources/application.yaml b/nl-server/src/main/resources/application.yaml index bd810b43..0bfabaed 100644 --- a/nl-server/src/main/resources/application.yaml +++ b/nl-server/src/main/resources/application.yaml @@ -374,4 +374,4 @@ nl: message-bus: type: redis # 消息总线的类型 -debug: false +debug: false \ 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/btivtcutpointivt/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/btivtcutpointivt/index.ts new file mode 100644 index 00000000..2b6cc857 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/btivtcutpointivt/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; +import type { Dayjs } from 'dayjs'; + +import { requestClient } from '#/api/request'; + +export namespace BtcutpointivtBtIvtCutpointivtApi { + /** 分切区缓存点位库存信息 */ + export interface BtIvtCutpointivt { + pointCode?: string; // AGV点位编码 + pointName: string; // AGV点位名称 + trussPointCode1?: string; // 桁架点位编码1 + trussPointCode2?: string; // 桁架点位编码2 + qzzNo1: string; // 气胀轴编码1 + qzzNo2: string; // 气胀轴编码2 + upGx: string; // 上轴管芯 + downGx: string; // 下轴管芯 + pointType: string; // 点位类型,1-分切缓存位,2-分切对接位,3-套轴对接位,4-套轴缓存位 + productArea: string; // 生产区域 + sortSeq?: number; // 顺序号 + isUsed?: string; // 是否启用 + remark: string; // 备注 + pointStatus: string; // 点位状态 + } +} + +/** 查询分切区缓存点位库存分页 */ +export function getBtIvtCutpointivtPage(params: PageParam) { + return requestClient.get>( + '/btcutpointivt/bt-ivt-cutpointivt/page', + { params }, + ); +} + +/** 查询分切区缓存点位库存详情 */ +export function getBtIvtCutpointivt(id: number) { + return requestClient.get( + `/btcutpointivt/bt-ivt-cutpointivt/get?id=${id}`, + ); +} + +/** 新增分切区缓存点位库存 */ +export function createBtIvtCutpointivt(data: BtcutpointivtBtIvtCutpointivtApi.BtIvtCutpointivt) { + return requestClient.post('/btcutpointivt/bt-ivt-cutpointivt/create', data); +} + +/** 修改分切区缓存点位库存 */ +export function updateBtIvtCutpointivt(data: BtcutpointivtBtIvtCutpointivtApi.BtIvtCutpointivt) { + return requestClient.put('/btcutpointivt/bt-ivt-cutpointivt/update', data); +} + +/** 删除分切区缓存点位库存 */ +export function deleteBtIvtCutpointivt(id: number) { + return requestClient.delete(`/btcutpointivt/bt-ivt-cutpointivt/delete?id=${id}`); +} + +/** 批量删除分切区缓存点位库存 */ +export function deleteBtIvtCutpointivtList(ids: number[]) { + return requestClient.delete( + `/btcutpointivt/bt-ivt-cutpointivt/delete-list?ids=${ids.join(',')}`, + ); +} + +/** 导出分切区缓存点位库存 */ +export function exportBtIvtCutpointivt(params: any) { + return requestClient.download('/btcutpointivt/bt-ivt-cutpointivt/export-excel', { params }); +} + + \ 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/cutpointivt/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/cutpointivt/index.ts new file mode 100644 index 00000000..d74ebec1 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/cutpointivt/index.ts @@ -0,0 +1,78 @@ +import type { PageParam, PageResult } from '@vben/request'; +import type { Dayjs } from 'dayjs'; + +import { requestClient } from '#/api/request'; + +export namespace CutpointivtIvtCutpointivtApi { + /** 分切区点位库存信息 */ + export interface IvtCutpointivt { + pointCode?: string; // 点位编码 + fullPointCode: string; // 满轴位编码 + fullPointStatus?: string; // 满轴位状态 + containerName: string; // 母卷号 + fullVehicleCode: string; // 母卷轴编码 + emptyPointCode: string; // 空轴位编码 + emptyPointStatus?: string; // 空轴位状态 + emptyVehicleCode: string; // 空轴编码 + productArea: string; // 生产区域 + pointLocation: string; // 位置 + upPointCode: string; // 分切下料位上轴点位 + downPointCode: string; // 分切下料位下轴点位 + sortSeq: number; // 顺序号 + isUsed: string; // 是否启用 + remark: string; // 备注 + createId: number; // 创建人 + createName: string; // 创建人姓名 + updateOptid: number; // 修改人 + updateOptname: string; // 修改人姓名 + plan: string; // 规划 + extCode: string; // 对应MES系统设备编码 + upQzzno: string; // 分切下料位上轴 + downQzzno: string; // 分切下料位下轴 + qzzGeneration: string; // 气胀轴代数 + } +} + +/** 查询分切区点位库存分页 */ +export function getIvtCutpointivtPage(params: PageParam) { + return requestClient.get>( + '/cutpointivt/ivt-cutpointivt/page', + { params }, + ); +} + +/** 查询分切区点位库存详情 */ +export function getIvtCutpointivt(id: number) { + return requestClient.get( + `/cutpointivt/ivt-cutpointivt/get?id=${id}`, + ); +} + +/** 新增分切区点位库存 */ +export function createIvtCutpointivt(data: CutpointivtIvtCutpointivtApi.IvtCutpointivt) { + return requestClient.post('/cutpointivt/ivt-cutpointivt/create', data); +} + +/** 修改分切区点位库存 */ +export function updateIvtCutpointivt(data: CutpointivtIvtCutpointivtApi.IvtCutpointivt) { + return requestClient.put('/cutpointivt/ivt-cutpointivt/update', data); +} + +/** 删除分切区点位库存 */ +export function deleteIvtCutpointivt(id: number) { + return requestClient.delete(`/cutpointivt/ivt-cutpointivt/delete?id=${id}`); +} + +/** 批量删除分切区点位库存 */ +export function deleteIvtCutpointivtList(ids: number[]) { + return requestClient.delete( + `/cutpointivt/ivt-cutpointivt/delete-list?ids=${ids.join(',')}`, + ); +} + +/** 导出分切区点位库存 */ +export function exportIvtCutpointivt(params: any) { + return requestClient.download('/cutpointivt/ivt-cutpointivt/export-excel', { params }); +} + + \ 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/ivtshafttubeivt/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/ivtshafttubeivt/index.ts new file mode 100644 index 00000000..0a4ddcb2 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/ivtshafttubeivt/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; +import type { Dayjs } from 'dayjs'; + +import { requestClient } from '#/api/request'; + +export namespace IvtshafttubeivtIvtApi { + /** 穿拔轴区点位库存信息 */ + export interface IvtShafttubeivt { + pointCode?: string; // 点位编码 + pointName: string; // 点位名称 + qzzSize: string; // 气涨轴尺寸 + qzzGeneration: string; // 气涨轴代数 + tubeCode: string; // 纸管编码 + tubeName: string; // 纸管描述 + containerName: string; // 子卷号 + pointType: string; // 点位类型 + pointLocation: string; // 位置 + haveQzz: string; // 是否有轴 + isUsed: string; // 是否启用 + sortSeq: number; // 顺序号 + plan: string; // 规划 + parentCode: string; // 关联点位 + } +} + +/** 查询穿拔轴区点位库存分页 */ +export function getIvtShafttubeivtPage(params: PageParam) { + return requestClient.get>( + '/ivtshafttubeivt/ivt-shafttubeivt/page', + { params }, + ); +} + +/** 查询穿拔轴区点位库存详情 */ +export function getIvtShafttubeivt(id: number) { + return requestClient.get( + `/ivtshafttubeivt/ivt-shafttubeivt/get?id=${id}`, + ); +} + +/** 新增穿拔轴区点位库存 */ +export function createIvtShafttubeivt(data: IvtshafttubeivtIvtApi.IvtShafttubeivt) { + return requestClient.post('/ivtshafttubeivt/ivt-shafttubeivt/create', data); +} + +/** 修改穿拔轴区点位库存 */ +export function updateIvtShafttubeivt(data: IvtshafttubeivtIvtApi.IvtShafttubeivt) { + return requestClient.put('/ivtshafttubeivt/ivt-shafttubeivt/update', data); +} + +/** 删除穿拔轴区点位库存 */ +export function deleteIvtShafttubeivt(id: number) { + return requestClient.delete(`/ivtshafttubeivt/ivt-shafttubeivt/delete?id=${id}`); +} + +/** 批量删除穿拔轴区点位库存 */ +export function deleteIvtShafttubeivtList(ids: number[]) { + return requestClient.delete( + `/ivtshafttubeivt/ivt-shafttubeivt/delete-list?ids=${ids.join(',')}`, + ); +} + +/** 导出穿拔轴区点位库存 */ +export function exportIvtShafttubeivt(params: any) { + return requestClient.download('/ivtshafttubeivt/ivt-shafttubeivt/export-excel', { params }); +} + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/rawfoilcasheposition/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/rawfoilcasheposition/index.ts new file mode 100644 index 00000000..cf6c3ebe --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/rawfoilcasheposition/index.ts @@ -0,0 +1,67 @@ +import type { PageParam, PageResult } from '@vben/request'; +import type { Dayjs } from 'dayjs'; + +import { requestClient } from '#/api/request'; + +export namespace LmsRawFoilCashePositionApi { + /** 生箔母卷缓存位信息 */ + export interface RawFoilCashePosition { + ivtId: number; // 库存记录标识 + pointCode?: string; // 点位编码 + containerName: string; // 母卷号 + workorderId: string; // 母卷工单标识 + fullVehicleCode: string; // 母卷轴编码 + instorageTime: string | Dayjs; // 入库时间 + productionArea: string; // 生产区域 + pointLocation: string; // 位置 + sortSeq?: number; // 顺序号 + isUsed?: string; // 是否启用 + remark: string; // 备注 + coolIvtStatus?: string; // 库存状态 + pointType: string; // 点位类型 + } +} + +/** 查询生箔母卷缓存位分页 */ +export function getRawFoilCashePositionPage(params: PageParam) { + return requestClient.get>( + '/lms/raw-foil-cashe-position/page', + { params }, + ); +} + +/** 查询生箔母卷缓存位详情 */ +export function getRawFoilCashePosition(id: number) { + return requestClient.get( + `/lms/raw-foil-cashe-position/get?id=${id}`, + ); +} + +/** 新增生箔母卷缓存位 */ +export function createRawFoilCashePosition(data: LmsRawFoilCashePositionApi.RawFoilCashePosition) { + return requestClient.post('/lms/raw-foil-cashe-position/create', data); +} + +/** 修改生箔母卷缓存位 */ +export function updateRawFoilCashePosition(data: LmsRawFoilCashePositionApi.RawFoilCashePosition) { + return requestClient.put('/lms/raw-foil-cashe-position/update', data); +} + +/** 删除生箔母卷缓存位 */ +export function deleteRawFoilCashePosition(id: number) { + return requestClient.delete(`/lms/raw-foil-cashe-position/delete?id=${id}`); +} + +/** 批量删除生箔母卷缓存位 */ +export function deleteRawFoilCashePositionList(ids: number[]) { + return requestClient.delete( + `/lms/raw-foil-cashe-position/delete-list?ids=${ids.join(',')}`, + ); +} + +/** 导出生箔母卷缓存位 */ +export function exportRawFoilCashePosition(params: any) { + return requestClient.download('/lms/raw-foil-cashe-position/export-excel', { params }); +} + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/rawfoilemptyrollercasheposition/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/rawfoilemptyrollercasheposition/index.ts new file mode 100644 index 00000000..57844fcb --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/rawfoilemptyrollercasheposition/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; +import type { Dayjs } from 'dayjs'; + +import { requestClient } from '#/api/request'; + +export namespace LmsRawFoilEmptyRollerCashePositionApi { + /** 空辊缓存位信息 */ + export interface RawFoilEmptyRollerCashePosition { + pointId: number; // 点位标识 + pointCode?: string; // 点位编码 + vehicleCode: string; // 载具编码 + productionArea: string; // 生产区域 + pointLocation: string; // 位置 + remark: string; // 备注 + isUsed?: string; // 是否启用 + creator: string; // 创建人 + createTime?: string; // 创建时间 + updater: string; // 修改人 + updateTime?: string; // 修改时间 + weight: number; // 重量 + hasStock?: string; // 是否有货 + sortSeq?: number; // 顺序号 + } +} + +/** 查询空辊缓存位分页 */ +export function getRawFoilEmptyRollerCashePositionPage(params: PageParam) { + return requestClient.get>( + '/lms/raw-foil-empty-roller-cashe-position/page', + { params }, + ); +} + +/** 查询空辊缓存位详情 */ +export function getRawFoilEmptyRollerCashePosition(id: number) { + return requestClient.get( + `/lms/raw-foil-empty-roller-cashe-position/get?id=${id}`, + ); +} + +/** 新增空辊缓存位 */ +export function createRawFoilEmptyRollerCashePosition(data: LmsRawFoilEmptyRollerCashePositionApi.RawFoilEmptyRollerCashePosition) { + return requestClient.post('/lms/raw-foil-empty-roller-cashe-position/create', data); +} + +/** 修改空辊缓存位 */ +export function updateRawFoilEmptyRollerCashePosition(data: LmsRawFoilEmptyRollerCashePositionApi.RawFoilEmptyRollerCashePosition) { + return requestClient.put('/lms/raw-foil-empty-roller-cashe-position/update', data); +} + +/** 删除空辊缓存位 */ +export function deleteRawFoilEmptyRollerCashePosition(id: number) { + return requestClient.delete(`/lms/raw-foil-empty-roller-cashe-position/delete?id=${id}`); +} + +/** 批量删除空辊缓存位 */ +export function deleteRawFoilEmptyRollerCashePositionList(ids: number[]) { + return requestClient.delete( + `/lms/raw-foil-empty-roller-cashe-position/delete-list?ids=${ids.join(',')}`, + ); +} + +/** 导出空辊缓存位 */ +export function exportRawFoilEmptyRollerCashePosition(params: any) { + return requestClient.download('/lms/raw-foil-empty-roller-cashe-position/export-excel', { params }); +} + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/btivtcutpointivt/data.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/btivtcutpointivt/data.ts new file mode 100644 index 00000000..0d4433da --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/btivtcutpointivt/data.ts @@ -0,0 +1,317 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { BtcutpointivtBtIvtCutpointivtApi } from '#/api/lms/btivtcutpointivt'; + +import { getDictOptions } from '@vben/hooks'; + +import { getRangePickerDefaultProps } from '#/utils'; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'id', + component: 'Input', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'pointCode', + label: 'AGV点位编码', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入AGV点位编码', + }, + }, + { + fieldName: 'pointName', + label: 'AGV点位名称', + component: 'Input', + componentProps: { + placeholder: '请输入AGV点位名称', + }, + }, + { + fieldName: 'trussPointCode1', + label: '桁架点位编码1 ', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入桁架点位编码1 ', + }, + }, + { + fieldName: 'trussPointCode2', + label: '桁架点位编码2', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入桁架点位编码2', + }, + }, + { + fieldName: 'qzzNo1', + label: '气胀轴编码1', + component: 'Input', + componentProps: { + placeholder: '请输入气胀轴编码1', + }, + }, + { + fieldName: 'qzzNo2', + label: '气胀轴编码2', + component: 'Input', + componentProps: { + placeholder: '请输入气胀轴编码2', + }, + }, + { + fieldName: 'upGx', + label: '上轴管芯', + component: 'Input', + componentProps: { + placeholder: '请输入上轴管芯', + }, + }, + { + fieldName: 'downGx', + label: '下轴管芯', + component: 'Input', + componentProps: { + placeholder: '请输入下轴管芯', + }, + }, + { + fieldName: 'pointType', + label: '点位类型', + component: 'Select', + componentProps: { + options: [], + placeholder: '请选择点位类型', + }, + }, + { + fieldName: 'productArea', + label: '生产区域', + component: 'Input', + componentProps: { + placeholder: '请输入生产区域', + }, + }, + { + fieldName: 'sortSeq', + label: '顺序号', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入顺序号', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入是否启用', + }, + }, + { + fieldName: 'remark', + label: '备注', + component: 'Input', + componentProps: { + placeholder: '请输入备注', + }, + }, + { + fieldName: 'pointStatus', + label: '点位状态', + component: 'RadioGroup', + componentProps: { + options: [], + buttonStyle: 'solid', + optionType: 'button', + }, + }, + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'pointCode', + label: 'AGV点位编码', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入AGV点位编码', + }, + }, + { + fieldName: 'pointType', + label: '点位类型', + component: 'Select', + componentProps: { + allowClear: true, + options: [], + placeholder: '请选择点位类型', + }, + }, + { + fieldName: 'productArea', + label: '生产区域', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入生产区域', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入是否启用', + }, + }, + { + fieldName: 'createTime', + label: '创建时间', + component: 'RangePicker', + componentProps: { + ...getRangePickerDefaultProps(), + allowClear: true, + }, + }, + { + fieldName: 'pointStatus', + label: '点位状态', + component: 'Select', + componentProps: { + allowClear: true, + options: [], + placeholder: '请选择点位状态', + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { type: 'checkbox', width: 40 }, + { + field: 'ivtId', + title: '库存记录标识', + minWidth: 120, + }, + { + field: 'pointCode', + title: 'AGV点位编码', + minWidth: 120, + }, + { + field: 'pointName', + title: 'AGV点位名称', + minWidth: 120, + }, + { + field: 'trussPointCode1', + title: '桁架点位编码1 ', + minWidth: 120, + }, + { + field: 'trussPointCode2', + title: '桁架点位编码2', + minWidth: 120, + }, + { + field: 'qzzNo1', + title: '气胀轴编码1', + minWidth: 120, + }, + { + field: 'qzzNo2', + title: '气胀轴编码2', + minWidth: 120, + }, + { + field: 'upGx', + title: '上轴管芯', + minWidth: 120, + }, + { + field: 'downGx', + title: '下轴管芯', + minWidth: 120, + }, + { + field: 'pointType', + title: '点位类型,1-分切缓存位,2-分切对接位,3-套轴对接位,4-套轴缓存位', + minWidth: 120, + }, + { + field: 'productArea', + title: '生产区域', + minWidth: 120, + }, + { + field: 'sortSeq', + title: '顺序号', + minWidth: 120, + }, + { + field: 'isUsed', + title: '是否启用', + minWidth: 120, + }, + { + field: 'remark', + title: '备注', + minWidth: 120, + }, + { + field: 'createId', + title: '创建人', + minWidth: 120, + }, + { + field: 'createName', + title: '创建人姓名', + minWidth: 120, + }, + { + field: 'createTime', + title: '创建时间', + minWidth: 120, + }, + { + field: 'updateOptid', + title: '修改人', + minWidth: 120, + }, + { + field: 'updateOptname', + title: '修改人姓名', + minWidth: 120, + }, + { + field: 'pointStatus', + title: '点位状态', + minWidth: 120, + }, + { + 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/btivtcutpointivt/index.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/btivtcutpointivt/index.vue new file mode 100644 index 00000000..02e0806d --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/btivtcutpointivt/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/btivtcutpointivt/modules/form.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/btivtcutpointivt/modules/form.vue new file mode 100644 index 00000000..875c31a4 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/btivtcutpointivt/modules/form.vue @@ -0,0 +1,82 @@ + + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/cutpointivt/ivtcutpointivt/data.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/cutpointivt/ivtcutpointivt/data.ts new file mode 100644 index 00000000..3d2fb45b --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/cutpointivt/ivtcutpointivt/data.ts @@ -0,0 +1,421 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { CutpointivtIvtCutpointivtApi } from '#/api/lms/cutpointivt/ivtcutpointivt'; + +import { getDictOptions } from '@vben/hooks'; + +import { getRangePickerDefaultProps } from '#/utils'; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'ivtId', + component: 'Input', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'pointCode', + label: '点位编码', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入点位编码', + }, + }, + { + fieldName: 'fullPointCode', + label: '满轴位编码', + component: 'Input', + componentProps: { + placeholder: '请输入满轴位编码', + }, + }, + { + fieldName: 'fullPointStatus', + label: '满轴位状态', + rules: 'required', + component: 'RadioGroup', + componentProps: { + options: [], + buttonStyle: 'solid', + optionType: 'button', + }, + }, + { + fieldName: 'containerName', + label: '母卷号', + component: 'Input', + componentProps: { + placeholder: '请输入母卷号', + }, + }, + { + fieldName: 'fullVehicleCode', + label: '母卷轴编码', + component: 'Input', + componentProps: { + placeholder: '请输入母卷轴编码', + }, + }, + { + fieldName: 'emptyPointCode', + label: '空轴位编码', + component: 'Input', + componentProps: { + placeholder: '请输入空轴位编码', + }, + }, + { + fieldName: 'emptyPointStatus', + label: '空轴位状态', + rules: 'required', + component: 'RadioGroup', + componentProps: { + options: [], + buttonStyle: 'solid', + optionType: 'button', + }, + }, + { + fieldName: 'emptyVehicleCode', + label: '空轴编码', + component: 'Input', + componentProps: { + placeholder: '请输入空轴编码', + }, + }, + { + fieldName: 'productArea', + label: '生产区域', + component: 'Input', + componentProps: { + placeholder: '请输入生产区域', + }, + }, + { + fieldName: 'pointLocation', + label: '位置', + component: 'Input', + componentProps: { + placeholder: '请输入位置', + }, + }, + { + fieldName: 'upPointCode', + label: '分切下料位上轴点位', + component: 'Input', + componentProps: { + placeholder: '请输入分切下料位上轴点位', + }, + }, + { + fieldName: 'downPointCode', + label: '分切下料位下轴点位', + component: 'Input', + componentProps: { + placeholder: '请输入分切下料位下轴点位', + }, + }, + { + fieldName: 'sortSeq', + label: '顺序号', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入顺序号', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入是否启用', + }, + }, + { + fieldName: 'remark', + label: '备注', + component: 'Input', + componentProps: { + placeholder: '请输入备注', + }, + }, + { + fieldName: 'createId', + label: '创建人', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入创建人', + }, + }, + { + fieldName: 'createName', + label: '创建人姓名', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入创建人姓名', + }, + }, + { + fieldName: 'updateOptid', + label: '修改人', + component: 'Input', + componentProps: { + placeholder: '请输入修改人', + }, + }, + { + fieldName: 'updateOptname', + label: '修改人姓名', + component: 'Input', + componentProps: { + placeholder: '请输入修改人姓名', + }, + }, + { + fieldName: 'plan', + label: '规划', + component: 'Input', + componentProps: { + placeholder: '请输入规划', + }, + }, + { + fieldName: 'extCode', + label: '对应MES系统设备编码', + component: 'Input', + componentProps: { + placeholder: '请输入对应MES系统设备编码', + }, + }, + { + fieldName: 'upQzzno', + label: '分切下料位上轴', + component: 'Input', + componentProps: { + placeholder: '请输入分切下料位上轴', + }, + }, + { + fieldName: 'downQzzno', + label: '分切下料位下轴', + component: 'Input', + componentProps: { + placeholder: '请输入分切下料位下轴', + }, + }, + { + fieldName: 'qzzGeneration', + label: '气胀轴代数', + component: 'Input', + componentProps: { + placeholder: '请输入气胀轴代数', + }, + }, + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'pointCode', + label: '点位编码', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入点位编码', + }, + }, + { + fieldName: 'fullPointStatus', + label: '满轴位状态', + component: 'Select', + componentProps: { + allowClear: true, + options: [], + placeholder: '请选择满轴位状态', + }, + }, + { + fieldName: 'emptyPointStatus', + label: '空轴位状态', + component: 'Select', + componentProps: { + allowClear: true, + options: [], + placeholder: '请选择空轴位状态', + }, + }, + { + fieldName: 'productArea', + label: '生产区域', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入生产区域', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入是否启用', + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { type: 'checkbox', width: 40 }, + { + field: 'ivtId', + title: '库存记录标识', + minWidth: 120, + }, + { + field: 'pointCode', + title: '点位编码', + minWidth: 120, + }, + { + field: 'fullPointCode', + title: '满轴位编码', + minWidth: 120, + }, + { + field: 'fullPointStatus', + title: '满轴位状态', + minWidth: 120, + }, + { + field: 'containerName', + title: '母卷号', + minWidth: 120, + }, + { + field: 'fullVehicleCode', + title: '母卷轴编码', + minWidth: 120, + }, + { + field: 'emptyPointCode', + title: '空轴位编码', + minWidth: 120, + }, + { + field: 'emptyPointStatus', + title: '空轴位状态', + minWidth: 120, + }, + { + field: 'emptyVehicleCode', + title: '空轴编码', + minWidth: 120, + }, + { + field: 'productArea', + title: '生产区域', + minWidth: 120, + }, + { + field: 'pointLocation', + title: '位置', + minWidth: 120, + }, + { + field: 'upPointCode', + title: '分切下料位上轴点位', + minWidth: 120, + }, + { + field: 'downPointCode', + title: '分切下料位下轴点位', + minWidth: 120, + }, + { + field: 'sortSeq', + title: '顺序号', + minWidth: 120, + }, + { + field: 'isUsed', + title: '是否启用', + minWidth: 120, + }, + { + field: 'remark', + title: '备注', + minWidth: 120, + }, + { + field: 'createId', + title: '创建人', + minWidth: 120, + }, + { + field: 'createName', + title: '创建人姓名', + minWidth: 120, + }, + { + field: 'createTime', + title: '创建时间', + minWidth: 120, + }, + { + field: 'updateOptid', + title: '修改人', + minWidth: 120, + }, + { + field: 'updateOptname', + title: '修改人姓名', + minWidth: 120, + }, + { + field: 'plan', + title: '规划', + minWidth: 120, + }, + { + field: 'extCode', + title: '对应MES系统设备编码', + minWidth: 120, + }, + { + field: 'upQzzno', + title: '分切下料位上轴', + minWidth: 120, + }, + { + field: 'downQzzno', + title: '分切下料位下轴', + minWidth: 120, + }, + { + field: 'qzzGeneration', + title: '气胀轴代数', + minWidth: 120, + }, + { + 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/cutpointivt/ivtcutpointivt/index.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/cutpointivt/ivtcutpointivt/index.vue new file mode 100644 index 00000000..a0daedce --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/cutpointivt/ivtcutpointivt/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/cutpointivt/ivtcutpointivt/modules/form.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/cutpointivt/ivtcutpointivt/modules/form.vue new file mode 100644 index 00000000..9cb419ec --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/cutpointivt/ivtcutpointivt/modules/form.vue @@ -0,0 +1,82 @@ + + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/ivtshafttubeivt/data.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/ivtshafttubeivt/data.ts new file mode 100644 index 00000000..6f75b290 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/ivtshafttubeivt/data.ts @@ -0,0 +1,275 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { IvtshafttubeivtIvtApi } from '#/api/lms/ivtshafttubeivt'; + +import {DICT_TYPE} from "@vben/constants"; +import { getDictOptions } from '@vben/hooks'; + +import {z} from "#/adapter/form"; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'id', + component: 'Input', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'pointCode', + label: '点位编码', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入点位编码', + }, + }, + { + fieldName: 'pointName', + label: '点位名称', + component: 'Input', + componentProps: { + placeholder: '请输入点位名称', + }, + }, + { + fieldName: 'qzzSize', + label: '气涨轴尺寸', + component: 'Input', + componentProps: { + placeholder: '请输入气涨轴尺寸', + }, + }, + { + fieldName: 'qzzGeneration', + label: '气涨轴代数', + component: 'Input', + componentProps: { + placeholder: '请输入气涨轴代数', + }, + }, + { + fieldName: 'tubeCode', + label: '纸管编码', + component: 'Input', + componentProps: { + placeholder: '请输入纸管编码', + }, + }, + { + fieldName: 'tubeName', + label: '纸管描述', + component: 'Input', + componentProps: { + placeholder: '请输入纸管描述', + }, + }, + { + fieldName: 'containerName', + label: '子卷号', + component: 'Input', + componentProps: { + placeholder: '请输入子卷号', + }, + }, + { + fieldName: 'pointType', + label: '点位类型', + component: 'Select', + componentProps: { + options: [], + placeholder: '请选择点位类型', + }, + }, + { + fieldName: 'pointLocation', + label: '位置', + component: 'Input', + componentProps: { + placeholder: '请输入位置', + }, + }, + { + fieldName: 'haveQzz', + label: '是否有轴', + component: 'Input', + componentProps: { + placeholder: '请输入是否有轴', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + component: 'Input', + componentProps: { + placeholder: '请输入是否启用', + }, + }, + { + fieldName: 'sortSeq', + label: '顺序号', + component: 'Input', + componentProps: { + placeholder: '请输入顺序号', + }, + }, + { + fieldName: 'plan', + label: '规划', + component: 'Input', + componentProps: { + placeholder: '请输入规划', + }, + }, + { + fieldName: 'parentCode', + label: '关联点位', + component: 'Input', + componentProps: { + placeholder: '请输入关联点位', + }, + }, + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'pointCode', + label: '点位编码', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入点位编码', + }, + }, + { + fieldName: 'pointType', + label: '点位类型', + component: 'Select', + componentProps: { + allowClear: true, + options: [], + placeholder: '请选择点位类型', + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { type: 'checkbox', width: 40 }, + { + field: 'ivtId', + title: '库存记录标识', + minWidth: 120, + }, + { + field: 'pointCode', + title: '点位编码', + minWidth: 120, + }, + { + field: 'pointName', + title: '点位名称', + minWidth: 120, + }, + { + field: 'qzzSize', + title: '气涨轴尺寸', + minWidth: 120, + }, + { + field: 'qzzGeneration', + title: '气涨轴代数', + minWidth: 120, + }, + { + field: 'tubeCode', + title: '纸管编码', + minWidth: 120, + }, + { + field: 'tubeName', + title: '纸管描述', + minWidth: 120, + }, + { + field: 'containerName', + title: '子卷号', + minWidth: 120, + }, + { + field: 'pointType', + title: '点位类型', + minWidth: 120, + }, + { + field: 'pointLocation', + title: '位置', + minWidth: 120, + }, + { + field: 'haveQzz', + title: '是否有轴', + minWidth: 120, + }, + { + field: 'isUsed', + title: '是否启用', + minWidth: 120, + }, + { + field: 'sortSeq', + title: '顺序号', + minWidth: 120, + }, + { + field: 'createId', + title: '创建人', + minWidth: 120, + }, + { + field: 'createName', + title: '创建人', + minWidth: 120, + }, + { + field: 'createTime', + title: '创建时间', + minWidth: 120, + }, + { + field: 'updateOptid', + title: '修改人', + minWidth: 120, + }, + { + field: 'updateOptname', + title: '修改人', + minWidth: 120, + }, + { + field: 'plan', + title: '规划', + minWidth: 120, + }, + { + field: 'parentCode', + title: '关联点位', + minWidth: 120, + }, + { + 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/ivtshafttubeivt/index.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/ivtshafttubeivt/index.vue new file mode 100644 index 00000000..6c6980b3 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/ivtshafttubeivt/index.vue @@ -0,0 +1,187 @@ + + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/ivtshafttubeivt/modules/form.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/ivtshafttubeivt/modules/form.vue new file mode 100644 index 00000000..fd884872 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/ivtshafttubeivt/modules/form.vue @@ -0,0 +1,82 @@ + + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilcasheposition/data.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilcasheposition/data.ts new file mode 100644 index 00000000..18880281 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilcasheposition/data.ts @@ -0,0 +1,286 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { LmsRawFoilCashePositionApi } from '#/api/lms/rawfoilcasheposition'; + +import { getDictOptions } from '@vben/hooks'; + +import { getRangePickerDefaultProps } from '#/utils'; +import {DICT_TYPE} from "@vben/constants"; +import {z} from "#/adapter/form"; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'ivtId', + component: 'Input', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'pointCode', + label: '点位编码', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入点位编码', + }, + }, + { + fieldName: 'containerName', + label: '母卷号', + component: 'Input', + componentProps: { + placeholder: '请输入母卷号', + }, + }, + { + fieldName: 'workorderId', + label: '母卷工单标识', + component: 'Input', + componentProps: { + placeholder: '请输入母卷工单标识', + }, + }, + { + fieldName: 'fullVehicleCode', + label: '母卷轴编码', + component: 'Input', + componentProps: { + placeholder: '请输入母卷轴编码', + }, + }, + { + fieldName: 'instorageTime', + label: '入库时间', + component: 'DatePicker', + componentProps: { + showTime: true, + format: 'YYYY-MM-DD HH:mm:ss', + valueFormat: 'x', + }, + }, + { + fieldName: 'productionArea', + label: '生产区域', + component: 'Select', + componentProps: { + options: getDictOptions(DICT_TYPE.PRODUCT_AREA), + placeholder: '请选择生产区域', + }, + }, + { + fieldName: 'pointLocation', + label: '位置', + component: 'Input', + componentProps: { + placeholder: '请输入位置', + }, + }, + { + fieldName: 'sortSeq', + label: '顺序号', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入顺序号', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + rules: z.string().default('1'), + component: 'RadioGroup', + componentProps: { + options: [{ label: '是', value: '1' }, { label: '否', value: '0' }], + buttonStyle: 'solid', + optionType: 'button', + }, + }, + { + fieldName: 'remark', + label: '备注', + component: 'Input', + componentProps: { + placeholder: '请输入备注', + }, + }, + { + fieldName: 'coolIvtStatus', + label: '库存状态', + rules: 'required', + component: 'Select', + componentProps: { + options: getDictOptions(DICT_TYPE.RAWFOIL_CASHEPOSITION_STATUS), + placeholder: '请选择库存状态', + }, + }, + { + fieldName: 'pointType', + label: '点位类型', + component: 'Select', + componentProps: { + options: getDictOptions(DICT_TYPE.RAWFOIL_CASHEPOSITION_TYPE), + placeholder: '请选择点位类型', + }, + }, + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'pointCode', + label: '点位编码', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入点位编码', + }, + }, + { + fieldName: 'containerName', + label: '母卷号', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入母卷号', + }, + }, + { + fieldName: 'instorageTime', + label: '入库时间', + component: 'RangePicker', + componentProps: { + ...getRangePickerDefaultProps(), + allowClear: true, + }, + }, + { + fieldName: 'productionArea', + label: '生产区域', + component: 'Select', + componentProps: { + allowClear: true, + options: getDictOptions(DICT_TYPE.PRODUCT_AREA), + placeholder: '请选择生产区域', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + component: 'Select', + componentProps: { + allowClear: true, + options: [ + { label: '是', value: '1' }, + { label: '否', value: '0' }, + ], + placeholder: '请输入是否启用', + }, + }, + { + fieldName: 'coolIvtStatus', + label: '库存状态', + component: 'Select', + componentProps: { + allowClear: true, + options: getDictOptions(DICT_TYPE.RAWFOIL_CASHEPOSITION_STATUS), + placeholder: '请选择库存状态', + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { type: 'checkbox', width: 40 }, + { + field: 'ivtId', + title: '库存记录标识', + minWidth: 120, + }, + { + field: 'pointCode', + title: '点位编码', + minWidth: 120, + }, + { + field: 'containerName', + title: '母卷号', + minWidth: 120, + }, + { + field: 'workorderId', + title: '母卷工单标识', + minWidth: 120, + }, + { + field: 'fullVehicleCode', + title: '母卷轴编码', + minWidth: 120, + }, + { + field: 'instorageTime', + title: '入库时间', + minWidth: 120, + formatter: 'formatDateTime', + }, + { + field: 'productionArea', + title: '生产区域', + minWidth: 120, + }, + { + field: 'pointLocation', + title: '位置', + minWidth: 120, + }, + { + field: 'sortSeq', + title: '顺序号', + minWidth: 120, + }, + { + field: 'isUsed', + title: '是否启用', + minWidth: 120, + }, + { + field: 'coolIvtStatus', + title: '库存状态', + minWidth: 120, + }, + { + field: 'pointType', + title: '点位类型', + minWidth: 120, + }, + { + field: 'deleted', + title: '是否删除', + minWidth: 120, + }, + { + title: '操作', + width: 200, + fixed: 'right', + slots: { default: 'actions' }, + }, + { + field: 'updateTime', + title: '修改时间', + minWidth: 120, + }, + { + field: 'remark', + title: '备注', + minWidth: 120, + }, + ]; +} + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilcasheposition/index.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilcasheposition/index.vue new file mode 100644 index 00000000..7f377809 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilcasheposition/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/rawfoilcasheposition/modules/form.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilcasheposition/modules/form.vue new file mode 100644 index 00000000..b3ad3152 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilcasheposition/modules/form.vue @@ -0,0 +1,82 @@ + + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilemptyrollercasheposition/data.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilemptyrollercasheposition/data.ts new file mode 100644 index 00000000..a380c611 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilemptyrollercasheposition/data.ts @@ -0,0 +1,232 @@ +import {type VbenFormSchema, z} from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { LmsRawFoilEmptyRollerCashePositionApi } from '#/api/lms/rawfoilemptyrollercasheposition'; + +import { getDictOptions } from '@vben/hooks'; + +import { getRangePickerDefaultProps } from '#/utils'; +import {DICT_TYPE} from "@vben/constants"; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'pointId', + component: 'Input', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'pointCode', + label: '点位编码', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入点位编码', + }, + }, + { + fieldName: 'vehicleCode', + label: '载具编码', + component: 'Input', + componentProps: { + placeholder: '请输入载具编码', + }, + }, + { + fieldName: 'productionArea', + label: '生产区域', + component: 'Select', + componentProps: { + placeholder: '请输入生产区域', + options: getDictOptions(DICT_TYPE.PRODUCT_AREA), + }, + }, + { + fieldName: 'pointType', + label: '点位类型', + component: 'Select', + componentProps: { + placeholder: '请输入点位', + options: getDictOptions(DICT_TYPE.EMPTYROLLER_CASHEPOSITION_TYPE), + }, + }, + { + fieldName: 'sortSeq', + label: '顺序号', + rules: 'required', + component: 'Input', + componentProps: { + placeholder: '请输入顺序号', + }, + }, + { + fieldName: 'pointLocation', + label: '位置', + component: 'Input', + componentProps: { + placeholder: '请输入位置', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + rules: z.string().default('1'), + component: 'RadioGroup', + componentProps: { + options: [{ label: '是', value: '1' }, { label: '否', value: '0' }], + buttonStyle: 'solid', + optionType: 'button', + }, + }, + { + fieldName: 'hasStock', + label: '是否有货', + rules: z.string().default('0'), + component: 'RadioGroup', + componentProps: { + options: [{ label: '有货', value: '1' }, { label: '无货', value: '0' }], + buttonStyle: 'solid', + optionType: 'button', + }, + }, + { + fieldName: 'weight', + label: '重量', + component: 'Input', + componentProps: { + placeholder: '请输入重量', + }, + }, + { + fieldName: 'remark', + label: '备注', + component: 'TextArea', + componentProps: { + placeholder: '请输入备注', + }, + }, + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'pointCode', + label: '点位编码', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入点位编码', + }, + }, + { + fieldName: 'productionArea', + label: '生产区域', + component: 'Select', + componentProps: { + allowClear: true, + options: getDictOptions(DICT_TYPE.PRODUCT_AREA), + placeholder: '请输入生产区域', + }, + }, + { + fieldName: 'isUsed', + label: '是否启用', + component: 'Select', + componentProps: { + allowClear: true, + options: [ + { label: '是', value: '1' }, + { label: '否', value: '0' }, + ], + placeholder: '请选择是否启用', + }, + }, + { + fieldName: 'hasStock', + label: '是否有货', + component: 'Select', + componentProps: { + allowClear: true, + options: [ + { label: '有货', value: '1' }, + { label: '无货', value: '0' }, + ], + placeholder: '请选择是否有货', + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { type: 'checkbox', width: 40 }, + { + field: 'pointId', + title: '点位标识', + minWidth: 120, + }, + { + field: 'pointCode', + title: '点位编码', + minWidth: 120, + }, + { + field: 'vehicleCode', + title: '载具编码', + minWidth: 120, + }, + { + field: 'productionArea', + title: '生产区域', + minWidth: 120, + }, + { + field: 'pointLocation', + title: '位置', + minWidth: 120, + }, + { + field: 'remark', + title: '备注', + minWidth: 120, + }, + { + field: 'isUsed', + title: '是否启用', + minWidth: 120, + }, + { + field: 'updateTime', + title: '修改时间', + minWidth: 120, + }, + { + field: 'weight', + title: '重量', + minWidth: 120, + }, + { + field: 'hasStock', + title: '是否有货', + minWidth: 120, + }, + { + field: 'sortSeq', + title: '顺序号', + minWidth: 120, + }, + { + 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/rawfoilemptyrollercasheposition/index.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilemptyrollercasheposition/index.vue new file mode 100644 index 00000000..02db5aad --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilemptyrollercasheposition/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/rawfoilemptyrollercasheposition/modules/form.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilemptyrollercasheposition/modules/form.vue new file mode 100644 index 00000000..2fbeeb76 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/rawfoilemptyrollercasheposition/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 9a155fb2..15e61b4d 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 @@ -306,6 +306,9 @@ const TASK_DICT = { /** ========== RawFoil - 生箔管理模块 ========== */ const RawFoil_DICT = { RAWFOIL_WORKORDER_STATUS: 'rawfoil_workorder_status', // 生箔工序工单状态 + RAWFOIL_CASHEPOSITION_TYPE: 'rawfoil_casheposition_type', // 生箔母卷缓存位点位类型 + RAWFOIL_CASHEPOSITION_STATUS: 'rawfoil_casheposition_status', // 生箔母卷缓存位库存状态 + EMPTYROLLER_CASHEPOSITION_TYPE: 'emptyroller_casheposition_type', // 空辊缓存位点位类型 } as const; /** ========== LMS - 管理模块 ========== */