OMS的签名表以及详情,WMS的批量签名

This commit is contained in:
秦鸿展
2026-07-28 15:43:38 +08:00
parent e77937fb89
commit c1e062082a
30 changed files with 1227 additions and 10 deletions
@@ -0,0 +1,55 @@
package com.mhd.oms.interfaces.dto.electronicSignature;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 电子签名列表查询DTO
*/
@Data
public class ElectronicSignatureQueryDTO {
@ApiModelProperty("订单类型:IN-入库 OUT-出库")
private String orderType;
@ApiModelProperty("订单号(模糊查询)")
private String orderNumber;
@ApiModelProperty("签名状态:1-待签名 2-已签名")
private Integer signatureStatus;
@ApiModelProperty("签名方式:1-电子签名 2-附件上传 3-扫二维码 4-系统自动")
private Integer signatureMode;
@ApiModelProperty("组织ID")
private Long organizationId;
@ApiModelProperty("组织名称(模糊查询)")
private String organizationName;
@ApiModelProperty("仓库ID")
private Long warehouseId;
@ApiModelProperty("仓库名称(模糊查询)")
private String warehouseName;
@ApiModelProperty("创建时间起")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeFrom;
@ApiModelProperty("创建时间止")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeTo;
@ApiModelProperty("页码")
private Integer pageNum;
@ApiModelProperty("每页条数")
private Integer pageSize;
}
@@ -0,0 +1,108 @@
package com.mhd.oms.interfaces.dto.electronicSignature;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 电子签名保存DTO(接收WMS端Feign调用)
*/
@Data
public class ElectronicSignatureSaveDTO {
@ApiModelProperty("订单ID")
private Long orderId;
@ApiModelProperty("订单号")
private String orderNumber;
@ApiModelProperty("订单类型:IN-入库 OUT-出库")
private String orderType;
@ApiModelProperty("组织ID")
private Long organizationId;
@ApiModelProperty("组织名称")
private String organizationName;
@ApiModelProperty("一级组织ID")
private Long topOrganizationId;
@ApiModelProperty("仓库ID")
private Long warehouseId;
@ApiModelProperty("仓库编码")
private String warehouseCode;
@ApiModelProperty("仓库名称")
private String warehouseName;
@ApiModelProperty("创建人")
private Long createBy;
@ApiModelProperty("创建人姓名")
private String createByName;
@ApiModelProperty("物料明细列表")
private List<MaterialDetailItem> materialDetailList;
@Data
public static class MaterialDetailItem {
@ApiModelProperty("物料基础信息ID")
private Long materialBaseInfoId;
@ApiModelProperty("物料编码")
private String materialCode;
@ApiModelProperty("物料名称")
private String materialName;
@ApiModelProperty("数量")
private BigDecimal quantity;
@ApiModelProperty("单位代码")
private String unitCode;
@ApiModelProperty("单位名称")
private String unitName;
@ApiModelProperty("批次号")
private String batchNumber;
@ApiModelProperty("LOT编号")
private String lotNumber;
@ApiModelProperty("仓库ID")
private Long warehouseId;
@ApiModelProperty("仓库编码")
private String warehouseCode;
@ApiModelProperty("仓库名称")
private String warehouseName;
@ApiModelProperty("库区ID")
private Long storageSectionId;
@ApiModelProperty("库区编码")
private String storageSectionCode;
@ApiModelProperty("库区名称")
private String storageSectionName;
@ApiModelProperty("库位ID")
private Long storageLocationId;
@ApiModelProperty("库位编码")
private String storageLocationCode;
@ApiModelProperty("库位名称")
private String storageLocationName;
@ApiModelProperty("业务唯一ID")
private Long uniqueId;
}
}
@@ -0,0 +1,127 @@
package com.mhd.oms.interfaces.dto.electronicSignature;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 电子签名列表返回VO
*/
@Data
public class ElectronicSignatureVO {
@ApiModelProperty("签名ID")
private Long signatureId;
@ApiModelProperty("订单ID")
private Long orderId;
@ApiModelProperty("订单号")
private String orderNumber;
@ApiModelProperty("订单类型:IN-入库 OUT-出库")
private String orderType;
@ApiModelProperty("签名状态:1-待签名 2-已签名")
private Integer signatureStatus;
@ApiModelProperty("签名状态名称")
private String signatureStatusName;
@ApiModelProperty("签名时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date signatureTime;
@ApiModelProperty("手写签名图片")
private String signaturePic;
@ApiModelProperty("拍照取证图片")
private String evidencePics;
@ApiModelProperty("签名备注")
private String signatureRemark;
@ApiModelProperty("签名方式:1-电子签名 2-附件上传 3-扫二维码 4-系统自动")
private Integer signatureMode;
@ApiModelProperty("签名方式名称")
private String signatureModeName;
@ApiModelProperty("组织ID")
private Long organizationId;
@ApiModelProperty("组织名称")
private String organizationName;
@ApiModelProperty("仓库ID")
private Long warehouseId;
@ApiModelProperty("仓库编码")
private String warehouseCode;
@ApiModelProperty("仓库名称")
private String warehouseName;
@ApiModelProperty("创建人")
private Long createBy;
@ApiModelProperty("创建人姓名")
private String createByName;
@ApiModelProperty("创建时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("物料明细列表")
private List<MaterialDetailVO> materialDetailList;
@Data
public static class MaterialDetailVO {
@ApiModelProperty("明细ID")
private Long detailId;
@ApiModelProperty("物料基础信息ID")
private Long materialBaseInfoId;
@ApiModelProperty("物料编码")
private String materialCode;
@ApiModelProperty("物料名称")
private String materialName;
@ApiModelProperty("数量")
private BigDecimal quantity;
@ApiModelProperty("单位代码")
private String unitCode;
@ApiModelProperty("单位名称")
private String unitName;
@ApiModelProperty("批次号")
private String batchNumber;
@ApiModelProperty("LOT编号")
private String lotNumber;
@ApiModelProperty("库区编码")
private String storageSectionCode;
@ApiModelProperty("库区名称")
private String storageSectionName;
@ApiModelProperty("库位编码")
private String storageLocationCode;
@ApiModelProperty("库位名称")
private String storageLocationName;
}
}
@@ -0,0 +1,137 @@
package com.mhd.oms.interfaces.facade.electronicSignature;
import com.github.pagehelper.PageHelper;
import com.mhd.common.core.web.controller.BaseController;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.core.web.page.TableDataInfo;
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.ElectronicSignatureQueryDTO;
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureSaveDTO;
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
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;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 电子签名Api
*/
@Slf4j
@RestController
@RequestMapping("/electronicSignatureApi")
@Api(tags = "电子签名")
public class ElectronicSignatureApi extends BaseController {
@Autowired
private ElectronicSignatureDomainService electronicSignatureDomainService;
/**
* 保存电子签名记录(WMS端Feign调用)
*/
@ApiOperation("保存电子签名记录")
@PostMapping("/saveSignature")
public AjaxResult saveSignature(@RequestBody ElectronicSignatureSaveDTO saveDTO) {
try {
ElectronicSignatureDO signatureDO = toDO(saveDTO);
electronicSignatureDomainService.saveSignature(signatureDO);
return AjaxResult.success("电子签名记录保存成功");
} catch (Exception e) {
log.error("保存电子签名记录失败", e);
return AjaxResult.error("保存电子签名记录失败:" + e.getMessage());
}
}
/**
* 分页查询电子签名列表
*/
@ApiOperation("分页查询电子签名列表")
@GetMapping("/list")
public TableDataInfo list(ElectronicSignatureQueryDTO queryDTO) {
PageHelper.startPage(queryDTO.getPageNum() == null ? 1 : queryDTO.getPageNum(),
queryDTO.getPageSize() == null ? 10 : queryDTO.getPageSize());
List<ElectronicSignature> list = electronicSignatureDomainService.querySignatureList(queryDTO);
List<ElectronicSignatureVO> voList = list.stream()
.map(this::toVO)
.collect(Collectors.toList());
return getDataTable(voList);
}
/**
* 查询签名详情(含物料明细)
*/
@ApiOperation("查询签名详情(含物料明细)")
@GetMapping("/detail")
public AjaxResult detail(Long signatureId) {
if (signatureId == null) {
return AjaxResult.error("签名ID不能为空");
}
ElectronicSignature signature = electronicSignatureDomainService.getSignatureById(signatureId);
if (signature == null) {
return AjaxResult.error("未找到签名记录");
}
ElectronicSignatureVO vo = toVO(signature);
// 查询物料明细
List<ElectronicSignatureMaterialDetail> details =
electronicSignatureDomainService.queryMaterialDetailBySignatureId(signatureId);
if (details != null && !details.isEmpty()) {
vo.setMaterialDetailList(details.stream().map(d -> {
ElectronicSignatureVO.MaterialDetailVO dto = new ElectronicSignatureVO.MaterialDetailVO();
BeanUtils.copyProperties(d, dto);
return dto;
}).collect(Collectors.toList()));
}
return AjaxResult.success(vo);
}
private ElectronicSignatureDO toDO(ElectronicSignatureSaveDTO dto) {
ElectronicSignatureDO signatureDO = new ElectronicSignatureDO();
BeanUtils.copyProperties(dto, signatureDO, "materialDetailList");
// 转换物料明细
if (dto.getMaterialDetailList() != null) {
List<ElectronicSignatureMaterialDetail> detailList = new ArrayList<>();
for (ElectronicSignatureSaveDTO.MaterialDetailItem item : dto.getMaterialDetailList()) {
ElectronicSignatureMaterialDetail detail = new ElectronicSignatureMaterialDetail();
BeanUtils.copyProperties(item, detail);
detailList.add(detail);
}
signatureDO.setMaterialDetailList(detailList);
}
return signatureDO;
}
private ElectronicSignatureVO toVO(ElectronicSignature entity) {
ElectronicSignatureVO vo = new ElectronicSignatureVO();
BeanUtils.copyProperties(entity, vo);
// 签名状态名称
if (entity.getSignatureStatus() != null) {
vo.setSignatureStatusName(entity.getSignatureStatus() == 1 ? "待签名" : entity.getSignatureStatus() == 2 ? "已签名" : null);
}
// 签名方式名称
if (entity.getSignatureMode() != null) {
switch (entity.getSignatureMode()) {
case 1: vo.setSignatureModeName("电子签名"); break;
case 2: vo.setSignatureModeName("附件上传"); break;
case 3: vo.setSignatureModeName("扫二维码"); break;
case 4: vo.setSignatureModeName("系统自动"); break;
default: break;
}
}
return vo;
}
}