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 074190cb..df75bf8f 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 @@ -72,6 +72,7 @@ public interface ErrorCodeConstants { ErrorCode PACKAGE_DOCK_POINT_NOT_EXISTS = new ErrorCode(200019, "没有可用的装箱区对接位"); ErrorCode PACKAGE_AREA_CAPACITY_FULL = new ErrorCode(200020, "当前装箱区木箱任务已满,请稍后再试"); ErrorCode PACKAGE_AGV_TASK_CREATE_FAILED = new ErrorCode(200021, "创建装箱AGV任务失败"); + ErrorCode PACKAGE_POINT_INFO_INCOMPLETE = new ErrorCode(200022, "信息不完全,请人工处理!"); // ========== 子卷包装关系 ========== ErrorCode SUB_PACKAGE_RELATION_NOT_EXISTS = new ErrorCode(300001, "子卷包装关系不存在"); @@ -79,4 +80,7 @@ public interface ErrorCodeConstants { // ========== 木箱类型 ========== ErrorCode BOX_TYPE_NOT_EXISTS = new ErrorCode(400001, "木箱类型不存在"); ErrorCode BOX_TYPE_EXISTS = new ErrorCode(400002, "木箱类型已存在"); + + // ========== LMS系统包装码校验日志 ========== + ErrorCode PACKAGE_CHECK_LOG_NOT_EXISTS = new ErrorCode(500001, "LMS系统包装码校验日志不存在"); } diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagechecklog/PackageCheckLogController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagechecklog/PackageCheckLogController.java new file mode 100644 index 00000000..cdbc713d --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagechecklog/PackageCheckLogController.java @@ -0,0 +1,104 @@ +package cn.code.nl.module.lms.controller.admin.packagechecklog; + +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.packagechecklog.vo.*; +import cn.code.nl.module.lms.dal.dataobject.packagechecklog.PackageCheckLogDO; +import cn.code.nl.module.lms.service.packagechecklog.PackageCheckLogService; + +@Tag(name = "管理后台 - LMS系统包装码校验日志") +@RestController +@RequestMapping("/lms/package-check-log") +@Validated +public class PackageCheckLogController { + + @Resource + private PackageCheckLogService packageCheckLogService; + + @PostMapping("/create") + @Operation(summary = "创建LMS系统包装码校验日志") + @PreAuthorize("@ss.hasPermission('lms:package-check-log:create')") + public CommonResult createPackageCheckLog(@Valid @RequestBody PackageCheckLogSaveReqVO createReqVO) { + return success(packageCheckLogService.createPackageCheckLog(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新LMS系统包装码校验日志") + @PreAuthorize("@ss.hasPermission('lms:package-check-log:update')") + public CommonResult updatePackageCheckLog(@Valid @RequestBody PackageCheckLogSaveReqVO updateReqVO) { + packageCheckLogService.updatePackageCheckLog(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除LMS系统包装码校验日志") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('lms:package-check-log:delete')") + public CommonResult deletePackageCheckLog(@RequestParam("id") Long id) { + packageCheckLogService.deletePackageCheckLog(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除LMS系统包装码校验日志") + @PreAuthorize("@ss.hasPermission('lms:package-check-log:delete')") + public CommonResult deletePackageCheckLogList(@RequestParam("ids") List ids) { + packageCheckLogService.deletePackageCheckLogListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得LMS系统包装码校验日志") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('lms:package-check-log:query')") + public CommonResult getPackageCheckLog(@RequestParam("id") Long id) { + PackageCheckLogDO packageCheckLog = packageCheckLogService.getPackageCheckLog(id); + return success(BeanUtils.toBean(packageCheckLog, PackageCheckLogRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得LMS系统包装码校验日志分页") + @PreAuthorize("@ss.hasPermission('lms:package-check-log:query')") + public CommonResult> getPackageCheckLogPage(@Valid PackageCheckLogPageReqVO pageReqVO) { + PageResult pageResult = packageCheckLogService.getPackageCheckLogPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PackageCheckLogRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出LMS系统包装码校验日志 Excel") + @PreAuthorize("@ss.hasPermission('lms:package-check-log:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPackageCheckLogExcel(@Valid PackageCheckLogPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = packageCheckLogService.getPackageCheckLogPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "LMS系统包装码校验日志.xls", "数据", PackageCheckLogRespVO.class, + BeanUtils.toBean(list, PackageCheckLogRespVO.class)); + } + +} \ 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/packagechecklog/vo/PackageCheckLogPageReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagechecklog/vo/PackageCheckLogPageReqVO.java new file mode 100644 index 00000000..c4039831 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagechecklog/vo/PackageCheckLogPageReqVO.java @@ -0,0 +1,33 @@ +package cn.code.nl.module.lms.controller.admin.packagechecklog.vo; + +import cn.code.nl.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +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 = "管理后台 - LMS系统包装码校验日志分页 Request VO") +@Data +public class PackageCheckLogPageReqVO extends PageParam { + + @Schema(description = "内标") + private String innerLabel; + + @Schema(description = "管标") + private String outerLabel; + + @Schema(description = "木箱码") + private String boxCode; + + @Schema(description = "客户标签码") + private String customerCode; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] qualityTime; + + @Schema(description = "备注(校验结果/失败原因)", example = "你猜") + private String remark; + +} \ 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/packagechecklog/vo/PackageCheckLogRespVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagechecklog/vo/PackageCheckLogRespVO.java new file mode 100644 index 00000000..d3f8bca0 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagechecklog/vo/PackageCheckLogRespVO.java @@ -0,0 +1,41 @@ +package cn.code.nl.module.lms.controller.admin.packagechecklog.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - LMS系统包装码校验日志 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PackageCheckLogRespVO { + + @Schema(description = "内标") + @ExcelProperty("内标") + private String innerLabel; + + @Schema(description = "管标") + @ExcelProperty("管标") + private String outerLabel; + + @Schema(description = "木箱码") + @ExcelProperty("木箱码") + private String boxCode; + + @Schema(description = "客户标签码") + @ExcelProperty("客户标签码") + private String customerCode; + + @Schema(description = "质检人") + @ExcelProperty("质检人") + private String qualityInspector; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private String qualityTime; + + @Schema(description = "备注(校验结果/失败原因)", example = "你猜") + @ExcelProperty("备注(校验结果/失败原因)") + private String remark; + +} \ 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/packagechecklog/vo/PackageCheckLogSaveReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagechecklog/vo/PackageCheckLogSaveReqVO.java new file mode 100644 index 00000000..d537ad94 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/packagechecklog/vo/PackageCheckLogSaveReqVO.java @@ -0,0 +1,13 @@ +package cn.code.nl.module.lms.controller.admin.packagechecklog.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - LMS系统包装码校验日志新增/修改 Request VO") +@Data +public class PackageCheckLogSaveReqVO { + private Long id; + +} \ 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/boxpackage/PackagePdaController.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/boxpackage/PackagePdaController.java index ecdbfda5..dec2860d 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/boxpackage/PackagePdaController.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/boxpackage/PackagePdaController.java @@ -92,5 +92,13 @@ public class PackagePdaController { packagePdaService.executeConfirmInbound(confirmInboundPdaReqVOS); return success("操作成功!"); } + @PostMapping("/confirm-check") + @Tag(name = "三码合一") + @Operation(summary = "校验") + @PermitAll + public CommonResult executeConfirmCheck(@Valid @RequestBody LabelCheckPdaReqVO labelCheckPdaReqVO) { + packagePdaService.executeConfirmCheck(labelCheckPdaReqVO); + return success("操作成功!"); + } } diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/boxpackage/vo/LabelCheckPdaReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/boxpackage/vo/LabelCheckPdaReqVO.java new file mode 100644 index 00000000..ffa4014b --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/pda/boxpackage/vo/LabelCheckPdaReqVO.java @@ -0,0 +1,33 @@ +package cn.code.nl.module.lms.controller.pda.boxpackage.vo; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +/** + * 三码合一校验 + * @Author: liyongde + * @Date: 2026/8/20 19:29 + */ +@Data +public class LabelCheckPdaReqVO { + /** + * 木箱 + */ + @NotEmpty(message = "木箱码不能为空") + private String boxCode; + /** + * 客户标(外箱标) + */ + @NotEmpty(message = "客户标签码不能为空") + private String customerCode; + /** + * 内标 + */ + @NotEmpty(message = "内标不能为空") + private String innerLabel; + /** + * 外标 + */ + @NotEmpty(message = "管标不能为空") + private String outerLabel; +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/packagechecklog/PackageCheckLogDO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/packagechecklog/PackageCheckLogDO.java new file mode 100644 index 00000000..7d81e14f --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/dataobject/packagechecklog/PackageCheckLogDO.java @@ -0,0 +1,57 @@ +package cn.code.nl.module.lms.dal.dataobject.packagechecklog; + +import lombok.*; +import java.util.*; +import com.baomidou.mybatisplus.annotation.*; +import cn.code.nl.framework.mybatis.core.dataobject.BaseDO; + +/** + * LMS系统包装码校验日志 DO + * + * @author 诺力管理员 + */ +@TableName("lms_package_check_log") +@KeySequence("lms_package_check_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PackageCheckLogDO { + + /** + * 日志ID(主键) + */ + @TableId + private Long id; + /** + * 内标 + */ + private String innerLabel; + /** + * 管标 + */ + private String outerLabel; + /** + * 木箱码 + */ + private String boxCode; + /** + * 客户标签码 + */ + private String customerCode; + /** + * 质检人 + */ + private String qualityInspector; + /** + * 创建时间 + */ + private String qualityTime; + /** + * 备注(校验结果/失败原因) + */ + private String remark; + + +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/packagechecklog/PackageCheckLogMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/packagechecklog/PackageCheckLogMapper.java new file mode 100644 index 00000000..8bb73e76 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/packagechecklog/PackageCheckLogMapper.java @@ -0,0 +1,31 @@ +package cn.code.nl.module.lms.dal.mysql.packagechecklog; + +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.dal.dataobject.packagechecklog.PackageCheckLogDO; +import org.apache.ibatis.annotations.Mapper; +import cn.code.nl.module.lms.controller.admin.packagechecklog.vo.*; + +/** + * LMS系统包装码校验日志 Mapper + * + * @author 诺力管理员 + */ +@Mapper +public interface PackageCheckLogMapper extends BaseMapperX { + + default PageResult selectPage(PackageCheckLogPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PackageCheckLogDO::getInnerLabel, reqVO.getInnerLabel()) + .eqIfPresent(PackageCheckLogDO::getOuterLabel, reqVO.getOuterLabel()) + .eqIfPresent(PackageCheckLogDO::getBoxCode, reqVO.getBoxCode()) + .eqIfPresent(PackageCheckLogDO::getCustomerCode, reqVO.getCustomerCode()) + .betweenIfPresent(PackageCheckLogDO::getQualityTime, reqVO.getQualityTime()) + .likeIfPresent(PackageCheckLogDO::getRemark, reqVO.getRemark()) + .orderByDesc(PackageCheckLogDO::getId)); + } + +} \ 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/slittingproductionplan/SlittingproductionplanMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/slittingproductionplan/SlittingproductionplanMapper.java index 74ca9964..275dc25d 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/slittingproductionplan/SlittingproductionplanMapper.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/slittingproductionplan/SlittingproductionplanMapper.java @@ -49,5 +49,23 @@ public interface SlittingproductionplanMapper extends BaseMapperX ids); + + /** + * 获得LMS系统包装码校验日志 + * + * @param id 编号 + * @return LMS系统包装码校验日志 + */ + PackageCheckLogDO getPackageCheckLog(Long id); + + /** + * 获得LMS系统包装码校验日志分页 + * + * @param pageReqVO 分页查询 + * @return LMS系统包装码校验日志分页 + */ + PageResult getPackageCheckLogPage(PackageCheckLogPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagechecklog/PackageCheckLogServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagechecklog/PackageCheckLogServiceImpl.java new file mode 100644 index 00000000..714d0516 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagechecklog/PackageCheckLogServiceImpl.java @@ -0,0 +1,85 @@ +package cn.code.nl.module.lms.service.packagechecklog; + +import cn.hutool.core.collection.CollUtil; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.code.nl.module.lms.controller.admin.packagechecklog.vo.*; +import cn.code.nl.module.lms.dal.dataobject.packagechecklog.PackageCheckLogDO; +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.packagechecklog.PackageCheckLogMapper; + +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.*; + +/** + * LMS系统包装码校验日志 Service 实现类 + * + * @author 诺力管理员 + */ +@Service +@Validated +public class PackageCheckLogServiceImpl implements PackageCheckLogService { + + @Resource + private PackageCheckLogMapper packageCheckLogMapper; + + @Override + public Long createPackageCheckLog(PackageCheckLogSaveReqVO createReqVO) { + // 插入 + PackageCheckLogDO packageCheckLog = BeanUtils.toBean(createReqVO, PackageCheckLogDO.class); + packageCheckLogMapper.insert(packageCheckLog); + + // 返回 + return packageCheckLog.getId(); + } + + @Override + public void updatePackageCheckLog(PackageCheckLogSaveReqVO updateReqVO) { + // 校验存在 + validatePackageCheckLogExists(updateReqVO.getId()); + // 更新 + PackageCheckLogDO updateObj = BeanUtils.toBean(updateReqVO, PackageCheckLogDO.class); + packageCheckLogMapper.updateById(updateObj); + } + + @Override + public void deletePackageCheckLog(Long id) { + // 校验存在 + validatePackageCheckLogExists(id); + // 删除 + packageCheckLogMapper.deleteById(id); + } + + @Override + public void deletePackageCheckLogListByIds(List ids) { + // 删除 + packageCheckLogMapper.deleteByIds(ids); + } + + + private void validatePackageCheckLogExists(Long id) { + if (packageCheckLogMapper.selectById(id) == null) { + throw exception(PACKAGE_CHECK_LOG_NOT_EXISTS); + } + } + + @Override + public PackageCheckLogDO getPackageCheckLog(Long id) { + return packageCheckLogMapper.selectById(id); + } + + @Override + public PageResult getPackageCheckLogPage(PackageCheckLogPageReqVO pageReqVO) { + return packageCheckLogMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePdaService.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePdaService.java index 11564372..bd2bb1b3 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePdaService.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePdaService.java @@ -46,7 +46,7 @@ public interface PackagePdaService { /** * 操作入库 - * @param pointInfoPdaReqVO + * @param confirmInboundPdaReqVO */ void executeConfirmInbound(@Valid ConfirmInboundPdaReqVO confirmInboundPdaReqVO); @@ -56,4 +56,10 @@ public interface PackagePdaService { * @return */ BoxRelationRespVO queryBoxInfo(@Valid QueryPackagePointInfoReqVO pointInfoPdaReqVO); + + /** + * 三码合一检验 + * @param labelCheckPdaReqVO + */ + void executeConfirmCheck(@Valid LabelCheckPdaReqVO labelCheckPdaReqVO); } diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePdaServiceImpl.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePdaServiceImpl.java index a26bf2f9..2cc5b5a0 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePdaServiceImpl.java +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/service/packagepoint/PackagePdaServiceImpl.java @@ -5,9 +5,11 @@ import cn.code.nl.framework.common.pojo.CommonResult; import cn.code.nl.framework.common.util.json.JsonUtils; import cn.code.nl.framework.security.core.util.SecurityFrameworkUtils; import cn.code.nl.module.lms.controller.pda.boxpackage.vo.*; +import cn.code.nl.module.lms.dal.dataobject.packagechecklog.PackageCheckLogDO; import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO; import cn.code.nl.module.lms.dal.dataobject.slittingproductionplan.SlittingproductionplanDO; import cn.code.nl.module.lms.dal.dataobject.subpackagerelation.SubPackageRelationDO; +import cn.code.nl.module.lms.dal.mysql.packagechecklog.PackageCheckLogMapper; import cn.code.nl.module.lms.dal.mysql.packagepoint.PackagePointMapper; import cn.code.nl.module.lms.dal.mysql.slittingproductionplan.SlittingproductionplanMapper; import cn.code.nl.module.lms.dal.mysql.subpackagerelation.SubPackageRelationMapper; @@ -19,6 +21,7 @@ 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.TaskOwnerServiceEnum; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -118,6 +121,10 @@ public class PackagePdaServiceImpl implements PackagePdaService { @Resource private SubPackageRelationMapper subPackageRelationMapper; + /** 包装码校验日志 Mapper */ + @Resource + private PackageCheckLogMapper packageCheckLogMapper; + /** * 根据点位编码查询装箱区点位信息 * @@ -233,7 +240,14 @@ public class PackagePdaServiceImpl implements PackagePdaService { } } + /** + * 手工更新装箱区点位信息,并在需要时自动绑定 ERP 子卷号 + * + * @param pointInfoPdaReqVO 点位更新参数 + * @return 操作结果 + */ @Override + @Transactional(rollbackFor = Exception.class) public String executeUpdatePoint(UpdatePointInfoPdaReqVO pointInfoPdaReqVO) { // 查询点位信息 PackagePointDO packagePoint = packagePointService.getPackagePointByCode( @@ -274,6 +288,31 @@ public class PackagePdaServiceImpl implements PackagePdaService { if (StrUtil.isBlank(pointInfoPdaReqVO.getVehicleCode())) { throw exception(PACKAGE_POINT_VEHICLE_CODE_REQUIRED); } + // 新旧子卷号一致时不更新点位和分切计划 + if (pointInfoPdaReqVO.getContainerName().equals(packagePoint.getContainerName())) { + return "操作成功"; + } + + // 传入子卷号未绑定 ERP 计划时,使用点位旧内部子卷号定位计划并完成绑定 + SlittingproductionplanDO extContainerPlan = slittingproductionplanMapper + .selectByExtContainerName(pointInfoPdaReqVO.getContainerName()); + if (extContainerPlan == null) { + if (StrUtil.isBlank(packagePoint.getContainerName())) { + throw exception(PACKAGE_POINT_INFO_INCOMPLETE); + } + SlittingproductionplanDO oldContainerPlan = slittingproductionplanMapper + .selectByInnerContainerName(packagePoint.getContainerName()); + if (oldContainerPlan == null) { + throw exception(PACKAGE_POINT_INFO_INCOMPLETE); + } + SlittingproductionplanDO updatePlan = new SlittingproductionplanDO(); + updatePlan.setWorkorderId(oldContainerPlan.getWorkorderId()); + updatePlan.setExtContainerName(pointInfoPdaReqVO.getContainerName()); + slittingproductionplanMapper.updateById(updatePlan); + log.info("用户{}自动绑定ERP子卷号,内部子卷号={},ERP子卷号={}", + SecurityFrameworkUtils.getLoginUserNickname(), packagePoint.getContainerName(), + pointInfoPdaReqVO.getContainerName()); + } updatePoint.setContainerName(pointInfoPdaReqVO.getContainerName()); updatePoint.setVehicleCode(pointInfoPdaReqVO.getVehicleCode()); } else if (pointStatus == BoxPointStatusEnum.EMPTY_CONTAINER) { @@ -533,6 +572,54 @@ public class PackagePdaServiceImpl implements PackagePdaService { return response; } + /** + * 校验内标、管标、木箱码及客户标签码的一致性 + * + * @param labelCheckPdaReqVO 标签校验参数 + */ + @Override + public void executeConfirmCheck(LabelCheckPdaReqVO labelCheckPdaReqVO) { + PackageCheckLogDO checkLog = new PackageCheckLogDO(); + checkLog.setInnerLabel(labelCheckPdaReqVO.getInnerLabel()); + checkLog.setOuterLabel(labelCheckPdaReqVO.getOuterLabel()); + checkLog.setBoxCode(labelCheckPdaReqVO.getBoxCode()); + checkLog.setCustomerCode(labelCheckPdaReqVO.getCustomerCode()); + checkLog.setQualityInspector(SecurityFrameworkUtils.getLoginUserNickname()); + checkLog.setQualityTime(DateUtil.now()); + + try { + if (!StrUtil.equals(labelCheckPdaReqVO.getInnerLabel(), labelCheckPdaReqVO.getOuterLabel())) { + throw new ServiceException(500, "内标【" + labelCheckPdaReqVO.getInnerLabel() + + "】和管标【" + labelCheckPdaReqVO.getOuterLabel() + "】子卷号不一致!"); + } + if (!StrUtil.equals(labelCheckPdaReqVO.getBoxCode(), labelCheckPdaReqVO.getCustomerCode())) { + throw new ServiceException(500, "木箱码【" + labelCheckPdaReqVO.getBoxCode() + + "】和客户标签码【" + labelCheckPdaReqVO.getCustomerCode() + "】箱号不一致!"); + } + + SubPackageRelationDO relation = subPackageRelationMapper + .selectByContainerName(labelCheckPdaReqVO.getInnerLabel()); + if (relation == null) { + throw new ServiceException(500, "子卷号【" + labelCheckPdaReqVO.getInnerLabel() + + "】在LMS系统上未查询到包装关系!"); + } + if (StrUtil.isBlank(relation.getPackageBoxSn())) { + throw new ServiceException(500, "子卷号【" + labelCheckPdaReqVO.getInnerLabel() + + "】在LMS系统上包装关系的木箱号为空!"); + } + if (!StrUtil.equals(labelCheckPdaReqVO.getBoxCode(), relation.getPackageBoxSn())) { + throw new ServiceException(500, "子卷号绑定的木箱码【" + relation.getPackageBoxSn() + + "】和木箱码【" + labelCheckPdaReqVO.getBoxCode() + "】箱号不一致!"); + } + checkLog.setRemark("校验通过!"); + } catch (ServiceException exception) { + checkLog.setRemark("校验失败:" + exception.getMessage()); + throw exception; + } finally { + packageCheckLogMapper.insert(checkLog); + } + } + /** * 执行人工质检合格操作 * diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/packagechecklog/PackageCheckLogMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/packagechecklog/PackageCheckLogMapper.xml new file mode 100644 index 00000000..48965c47 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/packagechecklog/PackageCheckLogMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/slittingproductionplan/SlittingproductionplanMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/slittingproductionplan/SlittingproductionplanMapper.xml index e64dbc3a..efacec0e 100644 --- a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/slittingproductionplan/SlittingproductionplanMapper.xml +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/slittingproductionplan/SlittingproductionplanMapper.xml @@ -27,4 +27,24 @@ LIMIT 1 + + + + diff --git a/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/packagechecklog/index.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/packagechecklog/index.ts new file mode 100644 index 00000000..bd5016cb --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/api/lms/packagechecklog/index.ts @@ -0,0 +1,54 @@ +import type { PageParam, PageResult } from '@vben/request'; +import type { Dayjs } from 'dayjs'; + +import { requestClient } from '#/api/request'; + +export namespace LmsPackageCheckLogApi { + /** LMS系统包装码校验日志信息 */ + export interface PackageCheckLog { + } +} + +/** 查询LMS系统包装码校验日志分页 */ +export function getPackageCheckLogPage(params: PageParam) { + return requestClient.get>( + '/lms/package-check-log/page', + { params }, + ); +} + +/** 查询LMS系统包装码校验日志详情 */ +export function getPackageCheckLog(id: number) { + return requestClient.get( + `/lms/package-check-log/get?id=${id}`, + ); +} + +/** 新增LMS系统包装码校验日志 */ +export function createPackageCheckLog(data: LmsPackageCheckLogApi.PackageCheckLog) { + return requestClient.post('/lms/package-check-log/create', data); +} + +/** 修改LMS系统包装码校验日志 */ +export function updatePackageCheckLog(data: LmsPackageCheckLogApi.PackageCheckLog) { + return requestClient.put('/lms/package-check-log/update', data); +} + +/** 删除LMS系统包装码校验日志 */ +export function deletePackageCheckLog(id: number) { + return requestClient.delete(`/lms/package-check-log/delete?id=${id}`); +} + +/** 批量删除LMS系统包装码校验日志 */ +export function deletePackageCheckLogList(ids: number[]) { + return requestClient.delete( + `/lms/package-check-log/delete-list?ids=${ids.join(',')}`, + ); +} + +/** 导出LMS系统包装码校验日志 */ +export function exportPackageCheckLog(params: any) { + return requestClient.download('/lms/package-check-log/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/views/lms/packagechecklog/data.ts b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagechecklog/data.ts new file mode 100644 index 00000000..95de0752 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagechecklog/data.ts @@ -0,0 +1,128 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { LmsPackageCheckLogApi } from '#/api/lms/packagechecklog'; + +import { getRangePickerDefaultProps } from '#/utils'; + +/** 新增/修改的表单 */ +export function useFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'id', + component: 'Input', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + ]; +} + +/** 列表的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'innerLabel', + label: '内标', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入内标', + }, + }, + { + fieldName: 'outerLabel', + label: '管标', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入管标', + }, + }, + { + fieldName: 'boxCode', + label: '木箱码', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入木箱码', + }, + }, + { + fieldName: 'customerCode', + label: '客户标签码', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入客户标签码', + }, + }, + { + fieldName: 'qualityTime', + label: '创建时间', + component: 'RangePicker', + componentProps: { + ...getRangePickerDefaultProps(), + allowClear: true, + }, + }, + { + fieldName: 'remark', + label: '备注', + component: 'Input', + componentProps: { + allowClear: true, + placeholder: '请输入备注', + }, + }, + ]; +} + +/** 列表的字段 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { type: 'checkbox', width: 40 }, + { + field: 'innerLabel', + title: '内标', + minWidth: 120, + }, + { + field: 'outerLabel', + title: '管标', + minWidth: 120, + }, + { + field: 'boxCode', + title: '木箱码', + minWidth: 120, + }, + { + field: 'customerCode', + title: '客户标签码', + minWidth: 120, + }, + { + field: 'qualityInspector', + title: '质检人', + minWidth: 120, + }, + { + field: 'qualityTime', + title: '创建时间', + minWidth: 120, + }, + { + field: 'remark', + 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/packagechecklog/index.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagechecklog/index.vue new file mode 100644 index 00000000..707c4b40 --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagechecklog/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/packagechecklog/modules/form.vue b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagechecklog/modules/form.vue new file mode 100644 index 00000000..34cf1a1f --- /dev/null +++ b/nl-ui/nl-ui-admin-vben/yudao-ui-admin-vben/apps/web-antdv-next/src/views/lms/packagechecklog/modules/form.vue @@ -0,0 +1,82 @@ + + +