diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnHandlingUnitOperationLogService.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnHandlingUnitOperationLogService.java index fa215928..eb002858 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnHandlingUnitOperationLogService.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnHandlingUnitOperationLogService.java @@ -35,5 +35,14 @@ public interface HaiAnHandlingUnitOperationLogService extends IService flagRows) { + if (task == null || !StringUtils.hasText(task.getTransportTaskNo())) { + throw new RuntimeException("自动扣账缺少搬运任务号,无法写入标签操作记录"); + } + String taskNo = task.getTransportTaskNo().trim(); + for (HaiAnAutoIssueTaskLabel label : flagRows) { + if (label == null || !HaiAnAutoIssueStaticData.ISSUE_FLAG_SUCCESS.equals(label.getIssueFlag())) { + continue; + } + // 每条独立提交:写入失败只回滚这一条,已记下的标签不会被本条失败冲掉 - rqrq + haiAnHandlingUnitOperationLogService.haiAnLogAutoIssueDeduct(label.getSite(), label.getSerialNo(), taskNo); + } + } + /** * @author rqrq * @Description 仅空状态标签允许组单,外呼前通过独立服务提交 P;重入遇 P/U 转待核实,S/F 复用。外呼异常或回参无法对账转 U,禁止重发和解绑。 - rqrq diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnHandlingUnitOperationLogServiceImpl.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnHandlingUnitOperationLogServiceImpl.java index e6e546fb..bdda8f95 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnHandlingUnitOperationLogServiceImpl.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnHandlingUnitOperationLogServiceImpl.java @@ -9,6 +9,7 @@ import com.gaotao.modules.autoWareHourceHaian.entity.vo.HaiAnHandlingUnitOperati import com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnHandlingUnitOperationLogMapper; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnHandlingUnitOperationLogService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; @@ -81,5 +82,47 @@ public class HaiAnHandlingUnitOperationLogServiceImpl log.setOperationTime(new Date()); return this.save(log); } + + /** + * @author rqrq + * @Description 自动发料成功补记自动扣账。已有同任务同标签记录则跳过,避免收尾重试刷出多条。 - rqrq + * @param site 发料任务工厂 - rqrq + * @param serialNo 成功标签号 - rqrq + * @param taskNo 搬运任务号,作为幂等范围 - rqrq + */ + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) + public void haiAnLogAutoIssueDeduct(String site, String serialNo, String taskNo) { + if (!StringUtils.hasText(site) || !StringUtils.hasText(serialNo) || !StringUtils.hasText(taskNo)) { + throw new RuntimeException("记录自动扣账失败:site、标签号或搬运任务号为空"); + } + String logSite = site.trim(); + String logSerialNo = serialNo.trim(); + String logTaskNo = taskNo.trim(); + // 按工厂+标签+自动扣账+搬运任务号查重;已写入则本轮跳过,失败则本条回滚由发料重试补记 - rqrq + Long exists = this.lambdaQuery() + .eq(HaiAnHandlingUnitOperationLog::getSite, logSite) + .eq(HaiAnHandlingUnitOperationLog::getSerialNo, logSerialNo) + .eq(HaiAnHandlingUnitOperationLog::getOperationType, "自动扣账") + .eq(HaiAnHandlingUnitOperationLog::getTaskNo, logTaskNo) + .count(); + if (exists != null && exists > 0) { + return; + } + HaiAnHandlingUnitOperationLog row = new HaiAnHandlingUnitOperationLog(); + row.setSite(logSite); + row.setSerialNo(logSerialNo); + row.setOperationType("自动扣账"); + row.setOperationReason("海安自动发料成功"); + row.setFieldName("发料状态"); + row.setOldValue("未扣账"); + row.setNewValue("已扣账"); + row.setOperator("sys_wms"); + row.setTaskNo(logTaskNo); + row.setOperationTime(new Date()); + if (!this.save(row)) { + throw new RuntimeException("记录自动扣账失败,serialNo=" + logSerialNo); + } + } }