From 078bd5382271675e05d813ab0c1cfa282a6518bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=B8=E7=86=9F=E5=90=B4=E5=BD=A6=E7=A5=96?= Date: Fri, 28 Nov 2025 17:22:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=96=E6=B6=88=E8=B0=83=E7=94=A8=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AutoSortServiceImpl.java | 45 ++++++ .../impl/WcsIntegrationServiceImpl.java | 47 +++++- .../HandlingUnitOperationLogController.java | 36 +++++ .../entity/HandlingUnitOperationLog.java | 134 ++++++++++++++++ .../entity/HandlingUnitOperationLogData.java | 101 ++++++++++++ .../HandlingUnitOperationLogMapper.java | 32 ++++ .../HandlingUnitOperationLogService.java | 70 ++++++++ .../HandlingUnitOperationLogServiceImpl.java | 151 ++++++++++++++++++ .../HandlingUnitOperationLogMapper.xml | 52 ++++++ 9 files changed, 662 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/gaotao/modules/warehouse/controller/HandlingUnitOperationLogController.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/entity/HandlingUnitOperationLog.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/entity/HandlingUnitOperationLogData.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/mapper/HandlingUnitOperationLogMapper.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/service/HandlingUnitOperationLogService.java create mode 100644 src/main/java/com/gaotao/modules/warehouse/service/impl/HandlingUnitOperationLogServiceImpl.java create mode 100644 src/main/resources/mapper/warehouse/HandlingUnitOperationLogMapper.xml diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoSortServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoSortServiceImpl.java index 4f69d70..6f3e659 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoSortServiceImpl.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoSortServiceImpl.java @@ -40,6 +40,8 @@ public class AutoSortServiceImpl implements AutoSortService { private com.gaotao.modules.notify.mapper.NewIssureMapper newIssureMapper; @Autowired private DeliveryTaskService deliveryTaskService; + @Autowired + private com.gaotao.modules.warehouse.service.HandlingUnitOperationLogService handlingUnitOperationLogService; /** * @Description 增量明细数据类(内部使用)- rqrq @@ -199,6 +201,28 @@ public class AutoSortServiceImpl implements AutoSortService { if (!serialNosToDelete.isEmpty()) { wcsIntegrationMapper.batchDeletePalletDetailsBySerialNos(callback.getSite(), serialNosToDelete); log.info("批量删除{}条旧记录 - rqrq", serialNosToDelete.size()); + + // 循环记录每个标签的扫出操作日志(从原栈板扫出)- rqrq + for (String serialNo : serialNosToDelete) { + try { + String originalPalletId = serialToExistingPalletMap.get(serialNo); + handlingUnitOperationLogService.logHandlingUnitOperation( + callback.getSite(), // 站点 + serialNo, // 条码号 + "扫出", // 操作类型 + "自动分拣扫出", // 操作原因 + "所在栈板", // 字段名 + originalPalletId, // 旧值(原栈板ID) + "", // 新值(空,表示已移出) + "WMS后台任务", // 操作者 + null // 任务号 + ); + } catch (Exception e) { + log.error("记录标签扫出日志失败 - rqrq,serialNo={},错误:{}", serialNo, e.getMessage()); + // 日志记录失败不影响主流程,继续执行 + } + } + log.info("扫出日志记录完成 - rqrq"); } // 6.4 批量插入(排除已在目标托盘的记录)- rqrq @@ -216,6 +240,27 @@ public class AutoSortServiceImpl implements AutoSortService { if (!detailsToInsert.isEmpty()) { wcsIntegrationMapper.batchSavePalletDetailNoValidation(detailsToInsert); log.info("批量扫进{}条增量数据 - rqrq", detailsToInsert.size()); + + // 循环记录每个标签的扫入操作日志 - rqrq + for (PalletDetailInsert detail : detailsToInsert) { + try { + handlingUnitOperationLogService.logHandlingUnitOperation( + detail.getSite(), // 站点 + detail.getSerialNo(), // 条码号 + "扫入", // 操作类型 + "自动分拣扫入", // 操作原因 + "所在栈板", // 字段名 + "", // 旧值(空,表示新扫入) + targetPalletId, // 新值(目标栈板ID) + "WMS后台任务", // 操作者 + null // 任务号 + ); + } catch (Exception e) { + log.error("记录标签扫入日志失败 - rqrq,serialNo={},错误:{}", detail.getSerialNo(), e.getMessage()); + // 日志记录失败不影响主流程,继续执行 + } + } + log.info("扫入日志记录完成 - rqrq"); } // 记录所有处理成功的序列号(包括已在目标托盘的)- rqrq diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/WcsIntegrationServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/WcsIntegrationServiceImpl.java index 9fdb6ce..5e483d2 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/WcsIntegrationServiceImpl.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/WcsIntegrationServiceImpl.java @@ -18,6 +18,7 @@ import com.gaotao.modules.trans.entity.TransNoControl; import com.gaotao.modules.trans.service.TransNoControlService; import com.gaotao.modules.warehouse.dao.PalletMapper; import com.gaotao.modules.warehouse.entity.Pallet; +import com.gaotao.modules.warehouse.service.HandlingUnitOperationLogService; import com.gaotao.modules.warehouse.service.PalletOperationLogService; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -57,6 +58,8 @@ public class WcsIntegrationServiceImpl implements WcsIntegrationService { private com.gaotao.modules.notify.mapper.NewIssureMapper newIssureMapper; @Autowired private DeliveryTaskService deliveryTaskService; + @Autowired + private HandlingUnitOperationLogService handlingUnitOperationLogService; @org.springframework.beans.factory.annotation.Value("${custom.wcs-url}") private String wcsUrl; @Override @@ -479,12 +482,13 @@ public class WcsIntegrationServiceImpl implements WcsIntegrationService { throw new Exception("栈板和物料的仓库不同,无法进行打托操作"); } - + String oldPalletId=""; // 2. 检查标签是否已在栈板中(当前栈板或其他栈板) Map existingPalletInfo = wcsIntegrationMapper.findPalletByLabel(site, serialNo); if (existingPalletInfo != null) { String existingPalletId = (String) existingPalletInfo.get("palletId"); + oldPalletId=existingPalletId; Integer wcsFlag = Integer.valueOf(existingPalletInfo.get("wcsFlag")!=null?existingPalletInfo.get("wcsFlag").toString():"1"); // 如果标签在当前栈板,提示不要重复扫描 @@ -535,7 +539,7 @@ public class WcsIntegrationServiceImpl implements WcsIntegrationService { String partNo = (String) labelInfo.get("partNo"); wcsIntegrationMapper.savePalletDetail(site, palletId, position, layer, serialNo, partNo, username); - + handlingUnitOperationLogService.logHandlingUnitOperation(site,serialNo,"扫入","组盘扫标签","所在栈板",oldPalletId,palletId,username,null); // 6. 更新空栈板标记(扫入后栈板有货,标记为N) updatePalletEmptyFlag(site, palletId, username); } @@ -579,6 +583,7 @@ public class WcsIntegrationServiceImpl implements WcsIntegrationService { String username = ((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername(); wcsIntegrationMapper.deletePalletDetail(site, palletId, serialNo); + handlingUnitOperationLogService.logHandlingUnitOperation(site,serialNo,"扫出","组盘扫标签","所在栈板",palletId,"",username,null); // 更新空栈板标记(扫出后根据剩余数量判断) updatePalletEmptyFlag(site, palletId, username); @@ -605,7 +610,8 @@ public class WcsIntegrationServiceImpl implements WcsIntegrationService { if (pallet != null && "Y".equals(pallet.getCallingFlag())) { throw new Exception("原栈板正在被调用中,无法恢复标签,最近一次调用备注:" + (pallet.getRemark() != null ? pallet.getRemark() : "无")); } - + // 更新当前栈板的空栈板标记 - rqrq + Map currentPalletInfo = wcsIntegrationMapper.findPalletByLabel(data.getSite(), data.getSerialNo()); // 执行恢复操作(先删除当前记录,再插入到原栈板)- rqrq wcsIntegrationMapper.deletePalletDetailBySerialNo(data.getSite(), data.getSerialNo()); wcsIntegrationMapper.restorePalletDetail(data.getSite(), data.getSerialNo(), data.getOriginalPalletId(), @@ -614,14 +620,15 @@ public class WcsIntegrationServiceImpl implements WcsIntegrationService { String username = ((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername(); - // 更新当前栈板的空栈板标记 - rqrq - Map currentPalletInfo = wcsIntegrationMapper.findPalletByLabel(data.getSite(), data.getSerialNo()); + String oldPalletId=""; if (currentPalletInfo != null) { String currentPalletId = (String) currentPalletInfo.get("palletId"); + oldPalletId=currentPalletId; if (StringUtils.hasText(currentPalletId) && !currentPalletId.equals(data.getOriginalPalletId())) { updatePalletEmptyFlag(data.getSite(), currentPalletId, username); } } + handlingUnitOperationLogService.logHandlingUnitOperation(data.getSite(), data.getSerialNo(),"扫入","分拣扫回","所在栈板",oldPalletId,data.getOriginalPalletId(),username,null); // 更新原栈板的空栈板标记 - rqrq updatePalletEmptyFlag(data.getSite(), data.getOriginalPalletId(), username); @@ -2307,10 +2314,38 @@ public class WcsIntegrationServiceImpl implements WcsIntegrationService { if (detailCount == 0) { throw new RuntimeException("栈板无明细数据"); } + SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); + String username = currentUser.getUsername(); + + // 删除前先查询所有明细并记录日志 - rqrq + List detailList = wcsIntegrationMapper.getPalletDetailsData(site, palletId); + System.out.println("查询到栈板明细 " + detailList.size() + " 条,开始记录移出日志 - rqrq"); + + // 循环记录每个标签的移出操作日志 - rqrq + for (PalletDetailData detail : detailList) { + try { + handlingUnitOperationLogService.logHandlingUnitOperation( + site, // 站点 + detail.getSerialNo(), // 条码号 + "扫出", // 操作类型 + "一键移出物料", // 操作原因 + "所在栈板", // 字段名 + palletId, // 旧值(原栈板ID) + "", // 新值(空,表示已移出) + username, // 操作者 + null // 任务号 + ); + } catch (Exception e) { + System.err.println("记录标签移出日志失败 - rqrq,serialNo=" + detail.getSerialNo() + ",错误:" + e.getMessage()); + // 日志记录失败不影响主流程,继续执行 + } + } + System.out.println("移出日志记录完成 - rqrq"); + // 删除所有明细 - rqrq wcsIntegrationMapper.deleteAllPalletDetail(site, palletId); - updatePalletEmptyFlag(site, palletId, currentUser.getUsername()); + updatePalletEmptyFlag(site, palletId, username); System.out.println("已删除所有栈板明细 - rqrq"); System.out.println("移出全部物料完成 - rqrq"); diff --git a/src/main/java/com/gaotao/modules/warehouse/controller/HandlingUnitOperationLogController.java b/src/main/java/com/gaotao/modules/warehouse/controller/HandlingUnitOperationLogController.java new file mode 100644 index 0000000..e35a40b --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/controller/HandlingUnitOperationLogController.java @@ -0,0 +1,36 @@ +package com.gaotao.modules.warehouse.controller; + +import com.gaotao.common.utils.PageUtils; +import com.gaotao.common.utils.R; +import com.gaotao.modules.warehouse.entity.HandlingUnitOperationLogData; +import com.gaotao.modules.warehouse.service.HandlingUnitOperationLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * 标签操作记录Controller - rqrq + * + * @author rqrq + * @date 2025/11/28 + */ +@RestController +@RequestMapping("/warehouse/handlingunitoperationlog") +public class HandlingUnitOperationLogController { + + @Autowired + private HandlingUnitOperationLogService handlingUnitOperationLogService; + + /** + * @Description 分页查询标签操作记录列表 - rqrq + * @param query 查询条件 + * @return R + * @author rqrq + * @date 2025/11/28 + */ + @PostMapping("/list") + public R searchHandlingUnitOperationLogList(@RequestBody HandlingUnitOperationLogData query) { + PageUtils page = handlingUnitOperationLogService.searchHandlingUnitOperationLogList(query); + return R.ok().put("page", page); + } +} + diff --git a/src/main/java/com/gaotao/modules/warehouse/entity/HandlingUnitOperationLog.java b/src/main/java/com/gaotao/modules/warehouse/entity/HandlingUnitOperationLog.java new file mode 100644 index 0000000..c815e22 --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/entity/HandlingUnitOperationLog.java @@ -0,0 +1,134 @@ +package com.gaotao.modules.warehouse.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import org.apache.ibatis.type.Alias; + +import java.util.Date; + +/** + * 标签操作记录实体类 - 直接映射数据库表 - rqrq + * + *

数据库表名:handling_unit_operation_log

+ * + *

表索引:

+ *
    + *
  • PRIMARY KEY: id
  • + *
  • INDEX: IX_log_serial_no (serial_no)
  • + *
  • INDEX: IX_log_site_time (site, operation_time DESC)
  • + *
  • INDEX: IX_log_operation_type (operation_type, operation_time DESC)
  • + *
+ * + *

核心字段说明:

+ *
    + *
  • id:日志ID(自增主键)
  • + *
  • serial_no:关联标签条码号(对应 handling_unit.unit_id)
  • + *
  • operation_type:操作类型(CREATE / UPDATE / DELETE / MERGE / SPLIT / FREEZE 等)
  • + *
  • operation_reason:操作原因/描述
  • + *
  • old_value / new_value:字段变更前后的值
  • + *
  • operator:操作者
  • + *
  • operation_time:操作时间
  • + *
  • task_no:关联任务号/业务单号
  • + *
+ * + *

业务用途:

+ *
+ * 记录标签的所有操作历史,包括:
+ * 1. 标签创建、修改、删除
+ * 2. 标签合并、拆分操作
+ * 3. 标签冻结、解冻操作
+ * 4. 标签特殊信息修改
+ * 5. 其他业务操作
+ * 
+ * + * @author rqrq + * @date 2025/11/28 + */ +@Data +@TableName("handling_unit_operation_log") +@Alias("HandlingUnitOperationLog") +public class HandlingUnitOperationLog { + + /** + * 日志ID(自增主键)- rqrq + */ + @TableId(type = IdType.AUTO) + @TableField("id") + private Integer id; + + /** + * 关联标签条码号(对应 handling_unit.unit_id) - rqrq + */ + @TableField("serial_no") + private String serialNo; + + /** + * 站点(可冗余记录,方便跨站点查询)- rqrq + */ + @TableField("site") + private String site; + + /** + * 被操作/修改的字段名(如果是"创建标签"这种动作可为空)- rqrq + */ + @TableField("field_name") + private String fieldName; + + /** + * 操作类型(CREATE=创建标签,UPDATE=更新字段,DELETE=删除,MERGE=合并,SPLIT=拆分,FREEZE=冻结等)- rqrq + */ + @TableField("operation_type") + private String operationType; + + /** + * 操作原因/描述(如:入库创建、移库、合并、拆分、冻结、解冻等)- rqrq + */ + @TableField("operation_reason") + private String operationReason; + + /** + * 变更前的值 - rqrq + */ + @TableField("old_value") + private String oldValue; + + /** + * 变更后的值 - rqrq + */ + @TableField("new_value") + private String newValue; + + /** + * 操作者 - rqrq + */ + @TableField("operator") + private String operator; + + /** + * 操作时间 - rqrq + */ + @TableField("operation_time") + private Date operationTime; + + /** + * 关联任务号/业务单号(可选,便于追踪)- rqrq + */ + @TableField("task_no") + private String taskNo; + + /** + * 操作IP(可选扩展)- rqrq + */ + @TableField("ip_address") + private String ipAddress; + + /** + * 额外备注(可扩展)- rqrq + */ + @TableField("remark") + private String remark; +} + diff --git a/src/main/java/com/gaotao/modules/warehouse/entity/HandlingUnitOperationLogData.java b/src/main/java/com/gaotao/modules/warehouse/entity/HandlingUnitOperationLogData.java new file mode 100644 index 0000000..bf4a4be --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/entity/HandlingUnitOperationLogData.java @@ -0,0 +1,101 @@ +package com.gaotao.modules.warehouse.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.ibatis.type.Alias; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @Description 标签操作记录业务实体类 - 用于业务查询和操作 - rqrq + * + *

继承关系:继承 HandlingUnitOperationLog 基础实体类

+ * + *

用途:

+ *
    + *
  • 用于分页查询接口的参数和返回值
  • + *
  • 包含额外的查询条件字段
  • + *
  • 包含分页参数
  • + *
+ * + *

常用查询逻辑:

+ *
+ * -- 示例1:模糊查询条码号
+ * WHERE serial_no LIKE '%' + #{query.searchSerialNo} + '%'
+ *
+ * -- 示例2:按操作类型过滤
+ * WHERE operation_type = #{query.operationType}
+ *
+ * -- 示例3:日期范围查询
+ * WHERE operation_time BETWEEN #{query.startDate} AND #{query.endDate}
+ * 
+ * + * @author rqrq + * @date 2025/11/28 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Alias("HandlingUnitOperationLogData") +public class HandlingUnitOperationLogData extends HandlingUnitOperationLog { + + // ==================== 分页参数(必需)==================== + + /** + * 分页参数 - 当前页码 - rqrq + */ + private Integer page = 1; + + /** + * 分页参数 - 每页数量 - rqrq + */ + private Integer limit = 20; + + // ==================== 查询条件字段 ==================== + + /** + * 查询条件 - 条码号(模糊查询)- rqrq + *

SQL示例:WHERE serial_no LIKE '%' + #{query.searchSerialNo} + '%'

+ */ + private String searchSerialNo; + + /** + * 查询条件 - 操作类型(精确查询)- rqrq + *

SQL示例:WHERE operation_type = #{query.searchOperationType}

+ */ + private String searchOperationType; + + /** + * 查询条件 - 操作者(模糊查询)- rqrq + *

SQL示例:WHERE operator LIKE '%' + #{query.searchOperator} + '%'

+ */ + private String searchOperator; + + /** + * 查询条件 - 任务号/业务单号(模糊查询)- rqrq + *

SQL示例:WHERE task_no LIKE '%' + #{query.searchTaskNo} + '%'

+ */ + private String searchTaskNo; + + /** + * 查询条件 - 字段名(精确查询)- rqrq + *

SQL示例:WHERE field_name = #{query.searchFieldName}

+ */ + private String searchFieldName; + + /** + * 查询条件 - 查询开始日期 - rqrq + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startDate; + + /** + * 查询条件 - 查询结束日期 - rqrq + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endDate; +} + diff --git a/src/main/java/com/gaotao/modules/warehouse/mapper/HandlingUnitOperationLogMapper.java b/src/main/java/com/gaotao/modules/warehouse/mapper/HandlingUnitOperationLogMapper.java new file mode 100644 index 0000000..b73f471 --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/mapper/HandlingUnitOperationLogMapper.java @@ -0,0 +1,32 @@ +package com.gaotao.modules.warehouse.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.gaotao.modules.warehouse.entity.HandlingUnitOperationLog; +import com.gaotao.modules.warehouse.entity.HandlingUnitOperationLogData; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 标签操作记录Mapper接口 - rqrq + * + * @author rqrq + * @date 2025/11/28 + */ +@Mapper +public interface HandlingUnitOperationLogMapper extends BaseMapper { + + /** + * @Description 分页查询标签操作记录列表 - rqrq + * @param page 分页对象 + * @param query 查询条件 + * @return IPage + * @author rqrq + * @date 2025/11/28 + */ + IPage searchHandlingUnitOperationLogList( + Page page, + @Param("query") HandlingUnitOperationLogData query); +} + diff --git a/src/main/java/com/gaotao/modules/warehouse/service/HandlingUnitOperationLogService.java b/src/main/java/com/gaotao/modules/warehouse/service/HandlingUnitOperationLogService.java new file mode 100644 index 0000000..a3a1ed8 --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/service/HandlingUnitOperationLogService.java @@ -0,0 +1,70 @@ +package com.gaotao.modules.warehouse.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gaotao.common.utils.PageUtils; +import com.gaotao.modules.warehouse.entity.HandlingUnitOperationLog; +import com.gaotao.modules.warehouse.entity.HandlingUnitOperationLogData; + +/** + * 标签操作记录Service接口 - rqrq + * + * @author rqrq + * @date 2025/11/28 + */ +public interface HandlingUnitOperationLogService extends IService { + + /** + * @Description 分页查询标签操作记录列表 - rqrq + * @param query 查询条件 + * @return PageUtils + * @author rqrq + * @date 2025/11/28 + */ + PageUtils searchHandlingUnitOperationLogList(HandlingUnitOperationLogData query); + + /** + * @Description 记录标签操作日志(通用插入方法)- rqrq + * @param site 站点 + * @param serialNo 条码号 + * @param operationType 操作类型(CREATE/UPDATE/DELETE/MERGE/SPLIT/FREEZE等) + * @param operationReason 操作原因 + * @param fieldName 字段名(可选) + * @param oldValue 旧值 + * @param newValue 新值 + * @param operator 操作者 + * @param taskNo 任务号(可选) + * @return boolean + * @author rqrq + * @date 2025/11/28 + */ + boolean logHandlingUnitOperation(String site, String serialNo, String operationType, String operationReason, + String fieldName, String oldValue, String newValue, String operator, String taskNo); + + /** + * @Description 记录标签字段更新日志(简化版)- rqrq + * @param site 站点 + * @param serialNo 条码号 + * @param fieldName 字段名 + * @param oldValue 旧值 + * @param newValue 新值 + * @param operator 操作者 + * @return boolean + * @author rqrq + * @date 2025/11/28 + */ + boolean logFieldUpdate(String site, String serialNo, String fieldName, String oldValue, String newValue, String operator); + + /** + * @Description 记录标签创建日志 - rqrq + * @param site 站点 + * @param serialNo 条码号 + * @param operationReason 创建原因(如:入库创建、拆分创建等) + * @param taskNo 任务号 + * @param operator 操作者 + * @return boolean + * @author rqrq + * @date 2025/11/28 + */ + boolean logHandlingUnitCreate(String site, String serialNo, String operationReason, String taskNo, String operator); +} + diff --git a/src/main/java/com/gaotao/modules/warehouse/service/impl/HandlingUnitOperationLogServiceImpl.java b/src/main/java/com/gaotao/modules/warehouse/service/impl/HandlingUnitOperationLogServiceImpl.java new file mode 100644 index 0000000..8a16ca5 --- /dev/null +++ b/src/main/java/com/gaotao/modules/warehouse/service/impl/HandlingUnitOperationLogServiceImpl.java @@ -0,0 +1,151 @@ +package com.gaotao.modules.warehouse.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gaotao.common.utils.PageUtils; +import com.gaotao.modules.warehouse.entity.HandlingUnitOperationLog; +import com.gaotao.modules.warehouse.entity.HandlingUnitOperationLogData; +import com.gaotao.modules.warehouse.mapper.HandlingUnitOperationLogMapper; +import com.gaotao.modules.warehouse.service.HandlingUnitOperationLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; + +/** + * 标签操作记录Service实现类 - rqrq + * + * @author rqrq + * @date 2025/11/28 + */ +@Service("handlingUnitOperationLogService") +@Slf4j +public class HandlingUnitOperationLogServiceImpl + extends ServiceImpl + implements HandlingUnitOperationLogService { + + /** + * @Description 分页查询标签操作记录列表 - rqrq + * @param query 查询条件 + * @return PageUtils + * @author rqrq + * @date 2025/11/28 + */ + @Override + public PageUtils searchHandlingUnitOperationLogList(HandlingUnitOperationLogData query) { + System.out.println("开始分页查询标签操作记录 - rqrq,条码号=" + query.getSearchSerialNo() + + ", 操作类型=" + query.getSearchOperationType()); + + // 创建分页对象 - rqrq + Page page = new Page<>(query.getPage(), query.getLimit()); + + // 执行分页查询 - rqrq + IPage pageResult = baseMapper.searchHandlingUnitOperationLogList(page, query); + + System.out.println("查询完成 - rqrq,共查询到 " + pageResult.getTotal() + " 条数据"); + + return new PageUtils(pageResult); + } + + /** + * @Description 记录标签操作日志(通用插入方法)- rqrq + * @param site 站点 + * @param serialNo 条码号 + * @param operationType 操作类型(CREATE/UPDATE/DELETE/MERGE/SPLIT/FREEZE等) + * @param operationReason 操作原因 + * @param fieldName 字段名(可选) + * @param oldValue 旧值 + * @param newValue 新值 + * @param operator 操作者 + * @param taskNo 任务号(可选) + * @return boolean + * @author rqrq + * @date 2025/11/28 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean logHandlingUnitOperation(String site, String serialNo, String operationType, String operationReason, + String fieldName, String oldValue, String newValue, String operator, String taskNo) { + System.out.println("开始记录标签操作日志 - rqrq,条码号=" + serialNo + ", 操作类型=" + operationType); + + try { + HandlingUnitOperationLog log = new HandlingUnitOperationLog(); + log.setSerialNo(serialNo); + log.setSite(site); + log.setOperationType(operationType); + log.setOperationReason(operationReason); + log.setFieldName(fieldName); + log.setOldValue(oldValue); + log.setNewValue(newValue); + log.setOperator(operator); + log.setTaskNo(taskNo); + log.setOperationTime(new Date()); + + boolean result = this.save(log); + + System.out.println("记录标签操作日志完成 - rqrq,结果=" + result); + return result; + } catch (Exception e) { + System.out.println("记录标签操作日志失败 - rqrq,错误=" + e.getMessage()); + throw e; + } + } + + /** + * @Description 记录标签字段更新日志(简化版)- rqrq + * @param site 站点 + * @param serialNo 条码号 + * @param fieldName 字段名 + * @param oldValue 旧值 + * @param newValue 新值 + * @param operator 操作者 + * @return boolean + * @author rqrq + * @date 2025/11/28 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean logFieldUpdate(String site, String serialNo, String fieldName, String oldValue, String newValue, String operator) { + return logHandlingUnitOperation( + site, + serialNo, + "UPDATE", + "字段更新:" + fieldName, + fieldName, + oldValue, + newValue, + operator, + null + ); + } + + /** + * @Description 记录标签创建日志 - rqrq + * @param site 站点 + * @param serialNo 条码号 + * @param operationReason 创建原因(如:入库创建、拆分创建等) + * @param taskNo 任务号 + * @param operator 操作者 + * @return boolean + * @author rqrq + * @date 2025/11/28 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean logHandlingUnitCreate(String site, String serialNo, String operationReason, String taskNo, String operator) { + return logHandlingUnitOperation( + site, + serialNo, + "CREATE", + operationReason, + null, + null, + null, + operator, + taskNo + ); + } +} + diff --git a/src/main/resources/mapper/warehouse/HandlingUnitOperationLogMapper.xml b/src/main/resources/mapper/warehouse/HandlingUnitOperationLogMapper.xml new file mode 100644 index 0000000..22d950e --- /dev/null +++ b/src/main/resources/mapper/warehouse/HandlingUnitOperationLogMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + +