批量电子签名

This commit is contained in:
秦鸿展
2026-07-25 17:15:04 +08:00
parent 6b78248531
commit e77937fb89
6 changed files with 193 additions and 0 deletions
@@ -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<StockInOrder> list = stockInOrderService.list(
new LambdaQueryWrapper<StockInOrder>()
.eq(StockInOrder::getSignatureStatus, 1)
.eq(StockInOrder::getStatus, 5)
.lt(StockInOrder::getCompletionTime, cutoffTime)
.isNotNull(StockInOrder::getCompletionTime)
);
if (list.isEmpty()) return 0;
List<Long> ids = list.stream().map(StockInOrder::getInOrderId).collect(Collectors.toList());
stockInOrderService.update(new LambdaUpdateWrapper<StockInOrder>()
.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<StockOutOrder> list = stockOutOrderService.list(
new LambdaQueryWrapper<StockOutOrder>()
.eq(StockOutOrder::getSignatureStatus, 1)
.eq(StockOutOrder::getStatus, 9)
.lt(StockOutOrder::getCompleteTime, cutoffTime)
.isNotNull(StockOutOrder::getCompleteTime)
);
if (list.isEmpty()) return 0;
List<Long> ids = list.stream().map(StockOutOrder::getOutOrderId).collect(Collectors.toList());
stockOutOrderService.update(new LambdaUpdateWrapper<StockOutOrder>()
.in(StockOutOrder::getOutOrderId, ids)
.set(StockOutOrder::getSignatureStatus, 2)
.set(StockOutOrder::getSignatureTime, new Date())
.set(StockOutOrder::getSignatureRemark, "系统自动签名:出库交接完成超过24小时")
);
return ids.size();
}
}
@@ -2816,4 +2816,27 @@ public class StockInOrderApplicationService {
}
stockInOrderService.updateById(entity);
}
/**
* PDA批量入库签名
*/
public AjaxResult batchSignature(com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) {
List<Long> 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 + "");
}
}
@@ -2089,4 +2089,27 @@ public class StockOutOrderApplicationService {
stockOutOrderService.updateById(entity);
}
/**
* PDA批量出库签名
*/
public AjaxResult batchSignature(com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) {
List<Long> 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 + "");
}
}
@@ -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
*
* <p>支持四种签名方式电子签名附件上传扫二维码系统自动</p>
*/
@Data
public class BatchSignatureDTO {
@ApiModelProperty("入库单ID列表")
private List<Long> inOrderIds;
@ApiModelProperty("出库单ID列表")
private List<Long> 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;
}
@@ -314,4 +314,15 @@ public class StockInOrderApi extends BaseController {
return stockInOrderApplicationService.batchPush(idList);
}
/**
* PDA批量入库签名
*
* <p>勾选多条入库记录批量签名更新入库表的签名状态签名时间签名图片签名备注</p>
*/
@ApiOperation("PDA批量入库签名")
@PostMapping("/batchSignature")
public AjaxResult batchSignature(@RequestBody com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) {
return stockInOrderApplicationService.batchSignature(dto);
}
}
@@ -589,4 +589,15 @@ public class StockOutOrderApi extends BaseController {
}
return stockOutOrderApplicationService.batchPush(idList);
}
/**
* PDA批量出库签名
*
* <p>勾选多条出库记录批量签名更新出库表的签名状态签名时间签名图片签名备注</p>
*/
@ApiOperation("PDA批量出库签名")
@PostMapping("/batchSignature")
public AjaxResult batchSignature(@RequestBody com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) {
return stockOutOrderApplicationService.batchSignature(dto);
}
}