Browse Source

自动扣账记录到标签操作记录

master
常熟吴彦祖 1 week ago
parent
commit
81786b7604
  1. 9
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnHandlingUnitOperationLogService.java
  2. 24
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAutoIssueServiceImpl.java
  3. 43
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnHandlingUnitOperationLogServiceImpl.java

9
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/HaiAnHandlingUnitOperationLogService.java

@ -35,5 +35,14 @@ public interface HaiAnHandlingUnitOperationLogService extends IService<HaiAnHand
*/ */
boolean haiAnLogHandlingUnitOperation(String site, String serialNo, String operationType, String operationReason, boolean haiAnLogHandlingUnitOperation(String site, String serialNo, String operationType, String operationReason,
String fieldName, String oldValue, String newValue, String operator, String taskNo); String fieldName, String oldValue, String newValue, String operator, String taskNo);
/**
* @author rqrq
* @Description 记录海安自动发料成功的自动扣账。独立事务提交,不随外层收尾回滚;同一site+标签+搬运任务已有记录则跳过。 - rqrq
* @param site 海安大site,来自发料任务,禁止登录态兜底 - rqrq
* @param serialNo 发料成功的标签号 - rqrq
* @param taskNo 搬运任务号,用于幂等和页面关联任务展示 - rqrq
*/
void haiAnLogAutoIssueDeduct(String site, String serialNo, String taskNo);
} }

24
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAutoIssueServiceImpl.java

@ -25,6 +25,7 @@ import com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnAutoIssueTaskLabelMapp
import com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnAutoIssueTaskMapper; import com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnAutoIssueTaskMapper;
import com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnPdaAutoWarehouseMapper; import com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnPdaAutoWarehouseMapper;
import com.gaotao.modules.autoWareHourceHaian.service.HaiAnAutoIssueService; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnAutoIssueService;
import com.gaotao.modules.autoWareHourceHaian.service.HaiAnHandlingUnitOperationLogService;
import com.gaotao.modules.autoWareHourceHaian.service.HaiAnPalletTransferService; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnPalletTransferService;
import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnAreaStaticData; import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnAreaStaticData;
import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnAutoIssueStaticData; import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnAutoIssueStaticData;
@ -95,6 +96,9 @@ public class HaiAnAutoIssueServiceImpl implements HaiAnAutoIssueService {
@Autowired @Autowired
private HaiAnAutoIssueLabelFlagPersistService haiAnAutoIssueLabelFlagPersistService; private HaiAnAutoIssueLabelFlagPersistService haiAnAutoIssueLabelFlagPersistService;
@Autowired
private HaiAnHandlingUnitOperationLogService haiAnHandlingUnitOperationLogService;
/** /**
* 按site+搬运任务号拦截重复RFID回调;必须加入回调事务,查无记录时也持有范围锁直到建单结束。- rqrq * 按site+搬运任务号拦截重复RFID回调;必须加入回调事务,查无记录时也持有范围锁直到建单结束。- rqrq
* 原明细尚待发料时继续挂起,新增重复明细或已完结任务仅收口当前回调,不再通知WCS或发料。- rqrq * 原明细尚待发料时继续挂起,新增重复明细或已完结任务仅收口当前回调,不再通知WCS或发料。- rqrq
@ -599,6 +603,8 @@ public class HaiAnAutoIssueServiceImpl implements HaiAnAutoIssueService {
} }
// 独立新事务先落 issue_flag:IFS可能已执行,外层收尾回滚时也不能把成功标签再送一遍 - rqrq // 独立新事务先落 issue_flag:IFS可能已执行,外层收尾回滚时也不能把成功标签再送一遍 - rqrq
haiAnAutoIssueLabelFlagPersistService.saveIssueFlags(flagRows); haiAnAutoIssueLabelFlagPersistService.saveIssueFlags(flagRows);
// 成功标签单独记自动扣账;记录失败则中断收尾,发料状态已提交,下轮按已成功结果补记且不重发 - rqrq
logSuccessfulAutoIssue(task, flagRows);
// 发料事实已独立保存,再提交留盘标记:S为-1,F/U为-2;标记失败只重试落盘,不重发IFS。- rqrq // 发料事实已独立保存,再提交留盘标记:S为-1,F/U为-2;标记失败只重试落盘,不重发IFS。- rqrq
haiAnAutoIssueLabelFlagPersistService.syncTaskPalletFlags(task.getSite(), task.getId(), task.getPalletId()); haiAnAutoIssueLabelFlagPersistService.syncTaskPalletFlags(task.getSite(), task.getId(), task.getPalletId());
@ -638,6 +644,24 @@ public class HaiAnAutoIssueServiceImpl implements HaiAnAutoIssueService {
task.getId(), task.getPalletId(), successCount, moveFailCount, failCount, unknownCount); task.getId(), task.getPalletId(), successCount, moveFailCount, failCount, unknownCount);
} }
/**
* 发料状态已独立提交后再记操作记录。失败标签不记;同一搬运任务重复收尾由日志服务按标签跳过。 - rqrq
* 记录失败抛错中断本轮收尾,已成功的发料状态保留,下一轮不再外呼,只补缺失的自动扣账。 - rqrq
*/
private void logSuccessfulAutoIssue(HaiAnAutoIssueTask task, List<HaiAnAutoIssueTaskLabel> 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 * @author rqrq
* @Description 仅空状态标签允许组单,外呼前通过独立服务提交 P;重入遇 P/U 转待核实,S/F 复用。外呼异常或回参无法对账转 U,禁止重发和解绑。 - rqrq * @Description 仅空状态标签允许组单,外呼前通过独立服务提交 P;重入遇 P/U 转待核实,S/F 复用。外呼异常或回参无法对账转 U,禁止重发和解绑。 - rqrq

43
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.mapper.HaiAnHandlingUnitOperationLogMapper;
import com.gaotao.modules.autoWareHourceHaian.service.HaiAnHandlingUnitOperationLogService; import com.gaotao.modules.autoWareHourceHaian.service.HaiAnHandlingUnitOperationLogService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -81,5 +82,47 @@ public class HaiAnHandlingUnitOperationLogServiceImpl
log.setOperationTime(new Date()); log.setOperationTime(new Date());
return this.save(log); 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);
}
}
} }
Loading…
Cancel
Save