diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/signature/SignatureAutoTaskService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/signature/SignatureAutoTaskService.java new file mode 100644 index 000000000..d85968fe9 --- /dev/null +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/signature/SignatureAutoTaskService.java @@ -0,0 +1,84 @@ +package com.mhd.wms.application.service.signature; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.mhd.wms.domain.stockInOrder.entity.StockInOrder; +import com.mhd.wms.domain.stockInOrder.repository.facade.IStockInOrderService; +import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder; +import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 签名自动任务:超过上架时间/出库交接时间 24 小时的订单自动设为已签名 + */ +@Slf4j +@Service +public class SignatureAutoTaskService { + + @Autowired + private IStockInOrderService stockInOrderService; + @Autowired + private IStockOutOrderService stockOutOrderService; + + /** 每30分钟执行一次 */ + @Scheduled(fixedDelay = 1800000) + public void autoSignature() { + Date cutoffTime = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000L); + int inCount = autoSignInOrders(cutoffTime); + int outCount = autoSignOutOrders(cutoffTime); + if (inCount > 0 || outCount > 0) { + log.info("签名自动任务完成 - 入库签名:{}条,出库签名:{}条", inCount, outCount); + } + } + + /** + * 入库单自动签名:completionTime 超过 24h 且 signatureStatus=1(待签名) 的设为已签名 + */ + private int autoSignInOrders(Date cutoffTime) { + List list = stockInOrderService.list( + new LambdaQueryWrapper() + .eq(StockInOrder::getSignatureStatus, 1) + .eq(StockInOrder::getStatus, 5) + .lt(StockInOrder::getCompletionTime, cutoffTime) + .isNotNull(StockInOrder::getCompletionTime) + ); + if (list.isEmpty()) return 0; + List ids = list.stream().map(StockInOrder::getInOrderId).collect(Collectors.toList()); + stockInOrderService.update(new LambdaUpdateWrapper() + .in(StockInOrder::getInOrderId, ids) + .set(StockInOrder::getSignatureStatus, 2) + .set(StockInOrder::getSignatureTime, new Date()) + .set(StockInOrder::getSignatureRemark, "系统自动签名:上架完成超过24小时") + ); + return ids.size(); + } + + /** + * 出库单自动签名:completeTime 超过 24h 且 signatureStatus=1(待签名) 的设为已签名 + */ + private int autoSignOutOrders(Date cutoffTime) { + List list = stockOutOrderService.list( + new LambdaQueryWrapper() + .eq(StockOutOrder::getSignatureStatus, 1) + .eq(StockOutOrder::getStatus, 9) + .lt(StockOutOrder::getCompleteTime, cutoffTime) + .isNotNull(StockOutOrder::getCompleteTime) + ); + if (list.isEmpty()) return 0; + List ids = list.stream().map(StockOutOrder::getOutOrderId).collect(Collectors.toList()); + stockOutOrderService.update(new LambdaUpdateWrapper() + .in(StockOutOrder::getOutOrderId, ids) + .set(StockOutOrder::getSignatureStatus, 2) + .set(StockOutOrder::getSignatureTime, new Date()) + .set(StockOutOrder::getSignatureRemark, "系统自动签名:出库交接完成超过24小时") + ); + return ids.size(); + } +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java index a36cd4c49..1317e2e1b 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockInOrder/StockInOrderApplicationService.java @@ -2816,4 +2816,27 @@ public class StockInOrderApplicationService { } stockInOrderService.updateById(entity); } + + /** + * PDA批量入库签名 + */ + public AjaxResult batchSignature(com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) { + List inOrderIds = dto.getInOrderIds(); + if (inOrderIds == null || inOrderIds.isEmpty()) { + return AjaxResult.error("请选择需要签名的入库单"); + } + int success = 0; + Date now = new Date(); + for (Long id : inOrderIds) { + StockInOrder entity = new StockInOrder(); + entity.setInOrderId(id); + entity.setSignatureStatus(dto.getSignatureStatus() != null ? dto.getSignatureStatus() : 2); + entity.setSignatureTime(dto.getSignatureTime() != null ? dto.getSignatureTime() : now); + entity.setSignaturePic(dto.getSignaturePic()); + entity.setSignatureRemark(dto.getSignatureRemark()); + stockInOrderService.updateById(entity); + success++; + } + return AjaxResult.success("批量签名成功,共" + success + "条"); + } } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java index c958b72a8..297257d60 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java @@ -2089,4 +2089,27 @@ public class StockOutOrderApplicationService { stockOutOrderService.updateById(entity); } + /** + * PDA批量出库签名 + */ + public AjaxResult batchSignature(com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) { + List outOrderIds = dto.getOutOrderIds(); + if (outOrderIds == null || outOrderIds.isEmpty()) { + return AjaxResult.error("请选择需要签名的出库单"); + } + int success = 0; + Date now = new Date(); + for (Long id : outOrderIds) { + StockOutOrder entity = new StockOutOrder(); + entity.setOutOrderId(id); + entity.setSignatureStatus(dto.getSignatureStatus() != null ? dto.getSignatureStatus() : 2); + entity.setSignatureTime(dto.getSignatureTime() != null ? dto.getSignatureTime() : now); + entity.setSignaturePic(dto.getSignaturePic()); + entity.setSignatureRemark(dto.getSignatureRemark()); + stockOutOrderService.updateById(entity); + success++; + } + return AjaxResult.success("批量签名成功,共" + success + "条"); + } + } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/signature/BatchSignatureDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/signature/BatchSignatureDTO.java new file mode 100644 index 000000000..7018288b0 --- /dev/null +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/signature/BatchSignatureDTO.java @@ -0,0 +1,41 @@ +package com.mhd.wms.interfaces.dto.signature; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.util.List; + +/** + * PDA批量签名请求DTO + * + *

支持四种签名方式:电子签名、附件上传、扫二维码、系统自动。

+ */ +@Data +public class BatchSignatureDTO { + + @ApiModelProperty("入库单ID列表") + private List inOrderIds; + + @ApiModelProperty("出库单ID列表") + private List outOrderIds; + + @ApiModelProperty("签名状态:2-已签名(PDA端直接传2表示签完)") + private Integer signatureStatus; + + @ApiModelProperty("签名时间(PDA端可传当前时间)") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date signatureTime; + + @ApiModelProperty("签名图片(base64或URL)") + private String signaturePic; + + @ApiModelProperty("签名备注") + private String signatureRemark; + + @ApiModelProperty("签名方式:1-电子签名 2-附件上传 3-扫二维码 4-系统自动") + private Integer signatureMode; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockInOrder/StockInOrderApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockInOrder/StockInOrderApi.java index f226463f0..f277c2dd7 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockInOrder/StockInOrderApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockInOrder/StockInOrderApi.java @@ -314,4 +314,15 @@ public class StockInOrderApi extends BaseController { return stockInOrderApplicationService.batchPush(idList); } + /** + * PDA批量入库签名 + * + *

勾选多条入库记录批量签名,更新入库表的签名状态、签名时间、签名图片、签名备注。

+ */ + @ApiOperation("PDA批量入库签名") + @PostMapping("/batchSignature") + public AjaxResult batchSignature(@RequestBody com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) { + return stockInOrderApplicationService.batchSignature(dto); + } + } \ No newline at end of file diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java index de21d757f..1e2562aaa 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/stockOutOrder/StockOutOrderApi.java @@ -589,4 +589,15 @@ public class StockOutOrderApi extends BaseController { } return stockOutOrderApplicationService.batchPush(idList); } + + /** + * PDA批量出库签名 + * + *

勾选多条出库记录批量签名,更新出库表的签名状态、签名时间、签名图片、签名备注。

+ */ + @ApiOperation("PDA批量出库签名") + @PostMapping("/batchSignature") + public AjaxResult batchSignature(@RequestBody com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) { + return stockOutOrderApplicationService.batchSignature(dto); + } } \ No newline at end of file