OMS批量签名
This commit is contained in:
+42
@@ -0,0 +1,42 @@
|
||||
package com.mhd.system.api.domain;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* OMS→WMS 批量签名 Feign DTO
|
||||
*
|
||||
* <p>OMS端批量签名时,通过此DTO调用WMS的批量签名接口,
|
||||
* 更新WMS stock_in_order / stock_out_order 表的签名字段。</p>
|
||||
*/
|
||||
@Data
|
||||
public class SignatureBatchFeignDTO {
|
||||
|
||||
@ApiModelProperty("入库单ID列表")
|
||||
private List<Long> inOrderIds;
|
||||
|
||||
@ApiModelProperty("出库单ID列表")
|
||||
private List<Long> outOrderIds;
|
||||
|
||||
@ApiModelProperty("签名状态:2-已签名")
|
||||
private Integer signatureStatus;
|
||||
|
||||
@ApiModelProperty("签名时间")
|
||||
@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("拍照取证图片(逗号分隔多张URL)")
|
||||
private String evidencePics;
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
}
|
||||
+6
@@ -119,6 +119,12 @@ public class RemoteWmsFallbackFactory implements FallbackFactory<WmsServiceFeign
|
||||
public AjaxResult genPickingOrderByOms(StockOutOrderDTO stockOutOrderDTO) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult batchSignWms(SignatureBatchFeignDTO dto) {
|
||||
log.error("WMS批量签名调用失败");
|
||||
return AjaxResult.error("WMS批量签名调用失败:" + cause.getMessage());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
+36
@@ -6,7 +6,9 @@ import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignatureMaterial
|
||||
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureQueryDTO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -53,4 +55,38 @@ public interface ElectronicSignatureMapper extends BaseMapper<ElectronicSignatur
|
||||
*/
|
||||
@Select("SELECT * FROM NGWL_TEST_OMS.ELECTRONIC_SIGNATURE_MATERIAL_DETAIL WHERE SIGNATURE_ID = #{signatureId} AND DEL_FLAG = 1")
|
||||
List<ElectronicSignatureMaterialDetail> selectMaterialDetailBySignatureId(@Param("signatureId") Long signatureId);
|
||||
|
||||
/**
|
||||
* 批量签名:根据签名ID列表更新签名信息
|
||||
*/
|
||||
@Update("<script>"
|
||||
+ "UPDATE NGWL_TEST_OMS.ELECTRONIC_SIGNATURE SET "
|
||||
+ "SIGNATURE_STATUS = 2, "
|
||||
+ "SIGNATURE_TIME = #{signatureTime}, "
|
||||
+ "<if test='signaturePic != null and signaturePic != \"\"'>SIGNATURE_PIC = #{signaturePic}, </if>"
|
||||
+ "<if test='evidencePics != null and evidencePics != \"\"'>EVIDENCE_PICS = #{evidencePics}, </if>"
|
||||
+ "<if test='signatureRemark != null and signatureRemark != \"\"'>SIGNATURE_REMARK = #{signatureRemark}, </if>"
|
||||
+ "<if test='signatureMode != null'>SIGNATURE_MODE = #{signatureMode}, </if>"
|
||||
+ "UPDATE_TIME = #{signatureTime} "
|
||||
+ "WHERE SIGNATURE_ID IN "
|
||||
+ "<foreach collection='signatureIds' item='id' open='(' separator=',' close=')'>#{id}</foreach>"
|
||||
+ " AND DEL_FLAG = 1 AND SIGNATURE_STATUS = 1"
|
||||
+ "</script>")
|
||||
int batchUpdateSign(@Param("signatureIds") List<Long> signatureIds,
|
||||
@Param("signatureTime") Date signatureTime,
|
||||
@Param("signaturePic") String signaturePic,
|
||||
@Param("evidencePics") String evidencePics,
|
||||
@Param("signatureRemark") String signatureRemark,
|
||||
@Param("signatureMode") Integer signatureMode);
|
||||
|
||||
/**
|
||||
* 根据签名ID列表批量查询
|
||||
*/
|
||||
@Select("<script>"
|
||||
+ "SELECT * FROM NGWL_TEST_OMS.ELECTRONIC_SIGNATURE "
|
||||
+ "WHERE SIGNATURE_ID IN "
|
||||
+ "<foreach collection='signatureIds' item='id' open='(' separator=',' close=')'>#{id}</foreach>"
|
||||
+ " AND DEL_FLAG = 1"
|
||||
+ "</script>")
|
||||
List<ElectronicSignature> selectBySignatureIds(@Param("signatureIds") List<Long> signatureIds);
|
||||
}
|
||||
|
||||
+85
@@ -1,5 +1,6 @@
|
||||
package com.mhd.oms.domain.electronicSignature.service;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignature;
|
||||
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignatureMaterialDetail;
|
||||
@@ -7,14 +8,19 @@ import com.mhd.oms.domain.electronicSignature.repository.facade.IElectronicSigna
|
||||
import com.mhd.oms.domain.electronicSignature.repository.facade.IElectronicSignatureService;
|
||||
import com.mhd.oms.domain.electronicSignature.repository.mapper.ElectronicSignatureMapper;
|
||||
import com.mhd.oms.domain.electronicSignature.repository.todo.ElectronicSignatureDO;
|
||||
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureBatchSignDTO;
|
||||
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureQueryDTO;
|
||||
import com.mhd.system.api.WmsServiceFeign;
|
||||
import com.mhd.system.api.domain.SignatureBatchFeignDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 电子签名领域服务
|
||||
@@ -32,6 +38,9 @@ public class ElectronicSignatureDomainService {
|
||||
@Autowired
|
||||
private ElectronicSignatureMapper electronicSignatureMapper;
|
||||
|
||||
@Autowired(required = false)
|
||||
private WmsServiceFeign wmsServiceFeign;
|
||||
|
||||
/**
|
||||
* 保存电子签名记录(生成待签名记录)
|
||||
* 业务规则:
|
||||
@@ -105,4 +114,80 @@ public class ElectronicSignatureDomainService {
|
||||
}
|
||||
electronicSignatureMaterialDetailService.batchInsert(detailList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量签名:勾选多条记录后批量签名
|
||||
*
|
||||
* <p>业务流程:
|
||||
* 1. 查询OMS电子签名表,获取每条记录的 orderId + orderType
|
||||
* 2. 更新OMS ELECTRONIC_SIGNATURE表:signatureStatus=2(已签名)、signatureTime、signaturePic、
|
||||
* evidencePics、signatureRemark、signatureMode
|
||||
* 3. 按订单类型分组后,调用WMS Feign更新WMS stock_in_order / stock_out_order表
|
||||
* </p>
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int batchSign(ElectronicSignatureBatchSignDTO dto) {
|
||||
List<Long> signatureIds = dto.getSignatureIds();
|
||||
if (CollectionUtil.isEmpty(signatureIds)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 1. 查询签名记录,获取 orderId + orderType
|
||||
List<ElectronicSignature> signatureList = electronicSignatureMapper.selectBySignatureIds(signatureIds);
|
||||
if (CollectionUtil.isEmpty(signatureList)) {
|
||||
log.warn("批量签名失败:未找到有效的签名记录");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 2. 更新OMS电子签名表
|
||||
Date now = new Date();
|
||||
String evidencePicsStr = null;
|
||||
if (CollectionUtil.isNotEmpty(dto.getEvidencePics())) {
|
||||
evidencePicsStr = String.join(",", dto.getEvidencePics());
|
||||
}
|
||||
|
||||
int updated = electronicSignatureMapper.batchUpdateSign(
|
||||
signatureIds, now,
|
||||
dto.getSignaturePic(),
|
||||
evidencePicsStr,
|
||||
dto.getSignatureRemark(),
|
||||
dto.getSignatureMode());
|
||||
log.info("批量签名:OMS电子签名表更新 {} 条", updated);
|
||||
|
||||
// 3. 按订单类型分组,调用WMS更新入/出库表
|
||||
if (wmsServiceFeign != null) {
|
||||
try {
|
||||
// 分组:IN-入库、OUT-出库
|
||||
List<Long> inOrderIds = signatureList.stream()
|
||||
.filter(s -> "IN".equals(s.getOrderType()))
|
||||
.map(ElectronicSignature::getOrderId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
List<Long> outOrderIds = signatureList.stream()
|
||||
.filter(s -> "OUT".equals(s.getOrderType()))
|
||||
.map(ElectronicSignature::getOrderId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 构建 WMS 批量签名 DTO(一次调用同时处理入库+出库)
|
||||
SignatureBatchFeignDTO wmsDto = new SignatureBatchFeignDTO();
|
||||
wmsDto.setInOrderIds(inOrderIds.isEmpty() ? null : inOrderIds);
|
||||
wmsDto.setOutOrderIds(outOrderIds.isEmpty() ? null : outOrderIds);
|
||||
wmsDto.setSignatureStatus(2);
|
||||
wmsDto.setSignatureTime(now);
|
||||
wmsDto.setSignaturePic(dto.getSignaturePic());
|
||||
wmsDto.setEvidencePics(evidencePicsStr);
|
||||
wmsDto.setSignatureRemark(dto.getSignatureRemark());
|
||||
|
||||
log.info("批量签名:调用WMS更新入/出库单,入库{}条,出库{}条",
|
||||
inOrderIds.size(), outOrderIds.size());
|
||||
wmsServiceFeign.batchSignWms(wmsDto);
|
||||
} catch (Exception e) {
|
||||
log.error("批量签名:调用WMS更新入/出库表失败", e);
|
||||
// WMS更新失败不影响OMS表更新结果,仅记录日志
|
||||
}
|
||||
}
|
||||
|
||||
return updated;
|
||||
}
|
||||
}
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package com.mhd.oms.interfaces.dto.electronicSignature;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 电子签名批量签名请求DTO
|
||||
*
|
||||
* <p>勾选多条记录后批量签名,更新OMS电子签名表 + 调用WMS更新入/出库单表。</p>
|
||||
*/
|
||||
@Data
|
||||
public class ElectronicSignatureBatchSignDTO {
|
||||
|
||||
@ApiModelProperty(value = "签名ID列表", required = true)
|
||||
private List<Long> signatureIds;
|
||||
|
||||
@ApiModelProperty("手写签名图片(base64或URL,单张)")
|
||||
private String signaturePic;
|
||||
|
||||
@ApiModelProperty("拍照取证图片URL列表(多张)")
|
||||
private List<String> evidencePics;
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
|
||||
@ApiModelProperty("签名方式:1-电子签名 2-附件上传 3-扫二维码 4-系统自动")
|
||||
private Integer signatureMode;
|
||||
}
|
||||
+30
@@ -8,6 +8,7 @@ import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignature;
|
||||
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignatureMaterialDetail;
|
||||
import com.mhd.oms.domain.electronicSignature.repository.todo.ElectronicSignatureDO;
|
||||
import com.mhd.oms.domain.electronicSignature.service.ElectronicSignatureDomainService;
|
||||
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureBatchSignDTO;
|
||||
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureQueryDTO;
|
||||
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureSaveDTO;
|
||||
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureVO;
|
||||
@@ -96,6 +97,35 @@ public class ElectronicSignatureApi extends BaseController {
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 勾选记录批量签名
|
||||
*
|
||||
* <p>前端勾选多条待签名的电子签名记录,传入签名ID列表(signatureIds)、签名图片(signaturePic)、
|
||||
* 签名备注(signatureRemark)、签名方式(signatureMode),后端:</p>
|
||||
* <ul>
|
||||
* <li>更新 OMS ELECTRONIC_SIGNATURE 表:signatureStatus=2(已签名)、signatureTime=当前时间、signaturePic、evidencePics、signatureRemark、signatureMode</li>
|
||||
* <li>通过 Feign 调用 WMS 更新 stock_in_order / stock_out_order 表的对应签名字段</li>
|
||||
* </ul>
|
||||
*/
|
||||
@ApiOperation("批量签名(勾选记录后批量更新签名状态为已签名)")
|
||||
@PostMapping("/batchSign")
|
||||
public AjaxResult batchSign(@RequestBody ElectronicSignatureBatchSignDTO dto) {
|
||||
if (dto.getSignatureIds() == null || dto.getSignatureIds().isEmpty()) {
|
||||
return AjaxResult.error("请选择需要签名的记录");
|
||||
}
|
||||
try {
|
||||
int count = electronicSignatureDomainService.batchSign(dto);
|
||||
if (count > 0) {
|
||||
return AjaxResult.success("批量签名成功,共更新 " + count + " 条记录");
|
||||
} else {
|
||||
return AjaxResult.error("批量签名失败:未找到有效的待签名记录");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("批量签名失败", e);
|
||||
return AjaxResult.error("批量签名失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private ElectronicSignatureDO toDO(ElectronicSignatureSaveDTO dto) {
|
||||
ElectronicSignatureDO signatureDO = new ElectronicSignatureDO();
|
||||
BeanUtils.copyProperties(dto, signatureDO, "materialDetailList");
|
||||
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
package com.mhd.wms.interfaces.facadeApi.stockSignature;
|
||||
|
||||
import com.mhd.common.core.web.controller.BaseController;
|
||||
import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.system.api.domain.SignatureBatchFeignDTO;
|
||||
import com.mhd.wms.application.service.stockInOrder.StockInOrderApplicationService;
|
||||
import com.mhd.wms.application.service.stockOutOrder.StockOutOrderApplicationService;
|
||||
import com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 库存签名API(供OMS端Feign调用,统一更新WMS入/出库单签名字段)
|
||||
*
|
||||
* <p>OMS端批量签名后,通过Feign调用此API,
|
||||
* 更新WMS stock_in_order / stock_out_order 表的签名状态、签名时间、签名图片、签名备注。</p>
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/stockSignatureApi")
|
||||
@Api(tags = "库存签名(OMS→WMS)")
|
||||
public class StockSignatureApi extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private StockInOrderApplicationService stockInOrderApplicationService;
|
||||
|
||||
@Autowired
|
||||
private StockOutOrderApplicationService stockOutOrderApplicationService;
|
||||
|
||||
/**
|
||||
* 批量签名(OMS→WMS)
|
||||
*
|
||||
* <p>接收SignatureBatchFeignDTO,映射为BatchSignatureDTO后,分别调用
|
||||
* StockInOrderApplicationService.batchSignature 和
|
||||
* StockOutOrderApplicationService.batchSignature。</p>
|
||||
*/
|
||||
@ApiOperation("OMS批量签名-更新WMS入/出库单签名字段")
|
||||
@PostMapping("/batchSign")
|
||||
public AjaxResult batchSign(@RequestBody SignatureBatchFeignDTO dto) {
|
||||
if (dto == null) {
|
||||
return AjaxResult.error("请求参数不能为空");
|
||||
}
|
||||
boolean hasIn = dto.getInOrderIds() != null && !dto.getInOrderIds().isEmpty();
|
||||
boolean hasOut = dto.getOutOrderIds() != null && !dto.getOutOrderIds().isEmpty();
|
||||
if (!hasIn && !hasOut) {
|
||||
return AjaxResult.error("请指定入库单ID列表或出库单ID列表");
|
||||
}
|
||||
|
||||
// 映射 SignatureBatchFeignDTO → BatchSignatureDTO
|
||||
BatchSignatureDTO batchDTO = new BatchSignatureDTO();
|
||||
batchDTO.setInOrderIds(dto.getInOrderIds());
|
||||
batchDTO.setOutOrderIds(dto.getOutOrderIds());
|
||||
batchDTO.setSignatureStatus(dto.getSignatureStatus() != null ? dto.getSignatureStatus() : 2);
|
||||
batchDTO.setSignatureTime(dto.getSignatureTime());
|
||||
batchDTO.setSignaturePic(dto.getSignaturePic());
|
||||
batchDTO.setSignatureRemark(dto.getSignatureRemark());
|
||||
// evidencePics: Feign DTO中是comma-separated String → List<String>
|
||||
if (dto.getEvidencePics() != null && !dto.getEvidencePics().isEmpty()) {
|
||||
batchDTO.setEvidencePics(java.util.Arrays.asList(dto.getEvidencePics().split(",")));
|
||||
}
|
||||
|
||||
String msg = "";
|
||||
if (hasIn) {
|
||||
AjaxResult inResult = stockInOrderApplicationService.batchSignature(batchDTO);
|
||||
log.info("OMS→WMS批量入库签名完成:{}条,结果:{}", dto.getInOrderIds().size(),
|
||||
inResult != null ? inResult.get("msg") : "OK");
|
||||
msg += "入库签名完成";
|
||||
}
|
||||
if (hasOut) {
|
||||
AjaxResult outResult = stockOutOrderApplicationService.batchSignature(batchDTO);
|
||||
log.info("OMS→WMS批量出库签名完成:{}条,结果:{}", dto.getOutOrderIds().size(),
|
||||
outResult != null ? outResult.get("msg") : "OK");
|
||||
if (!msg.isEmpty()) msg += ",";
|
||||
msg += "出库签名完成";
|
||||
}
|
||||
|
||||
return AjaxResult.success(msg);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user