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,71 @@
package com.mhd.oms.domain.electronicSignature.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 电子签名主表 electronic_signature
*/
@Data
@TableName("ELECTRONIC_SIGNATURE")
public class ElectronicSignature extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("签名ID")
@TableId(type = IdType.INPUT)
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 Date signatureTime;
@ApiModelProperty("手写签名图片")
private String signaturePic;
@ApiModelProperty("拍照取证图片")
private String evidencePics;
@ApiModelProperty("签名备注")
private String signatureRemark;
@ApiModelProperty("签名方式:1-电子签名 2-附件上传 3-扫二维码 4-系统自动")
private Integer signatureMode;
@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 String remark;
}
@@ -0,0 +1,83 @@
package com.mhd.oms.domain.electronicSignature.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 电子签名物料明细表 electronic_signature_material_detail
*/
@Data
@TableName("ELECTRONIC_SIGNATURE_MATERIAL_DETAIL")
public class ElectronicSignatureMaterialDetail extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("明细ID")
@TableId(type = IdType.INPUT)
private Long detailId;
@ApiModelProperty("签名ID")
private Long signatureId;
@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;
@ApiModelProperty("备注")
private String remark;
}
@@ -0,0 +1,22 @@
package com.mhd.oms.domain.electronicSignature.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignatureMaterialDetail;
import java.util.List;
/**
* 电子签名物料明细Service接口
*/
public interface IElectronicSignatureMaterialDetailService extends IService<ElectronicSignatureMaterialDetail> {
/**
* 根据签名ID逻辑删除明细
*/
int deleteBySignatureId(Long signatureId);
/**
* 批量插入明细
*/
boolean batchInsert(List<ElectronicSignatureMaterialDetail> detailList);
}
@@ -0,0 +1,16 @@
package com.mhd.oms.domain.electronicSignature.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignature;
import com.mhd.oms.domain.electronicSignature.repository.todo.ElectronicSignatureDO;
/**
* 电子签名Service接口
*/
public interface IElectronicSignatureService extends IService<ElectronicSignature> {
/**
* 保存电子签名
*/
Boolean saveSignature(ElectronicSignatureDO electronicSignatureDO);
}
@@ -0,0 +1,56 @@
package com.mhd.oms.domain.electronicSignature.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignature;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignatureMaterialDetail;
import com.mhd.oms.interfaces.dto.electronicSignature.ElectronicSignatureQueryDTO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 电子签名Mapper接口
*/
public interface ElectronicSignatureMapper extends BaseMapper<ElectronicSignature> {
@Select("SELECT NGWL_TEST_OMS.SEQ_ELECTRONIC_SIGNATURE.NEXTVAL FROM DUAL")
Long nextSignatureId();
@Select("SELECT NGWL_TEST_OMS.SEQ_ES_MATERIAL_DETAIL.NEXTVAL FROM DUAL")
Long nextDetailId();
@Select("SELECT * FROM NGWL_TEST_OMS.ELECTRONIC_SIGNATURE WHERE ORDER_ID = #{orderId} AND ORDER_TYPE = #{orderType} AND DEL_FLAG = 1")
ElectronicSignature selectByOrderIdAndType(@Param("orderId") Long orderId, @Param("orderType") String orderType);
/**
* 分页查询电子签名列表(需配合PageHelper使用)
*/
@Select("<script>"
+ "SELECT s.* FROM NGWL_TEST_OMS.ELECTRONIC_SIGNATURE s WHERE s.DEL_FLAG = 1"
+ "<if test='params.orderType != null and params.orderType != \"\"'> AND s.ORDER_TYPE = #{params.orderType}</if>"
+ "<if test='params.orderNumber != null and params.orderNumber != \"\"'> AND s.ORDER_NUMBER LIKE CONCAT('%', #{params.orderNumber}, '%')</if>"
+ "<if test='params.signatureStatus != null'> AND s.SIGNATURE_STATUS = #{params.signatureStatus}</if>"
+ "<if test='params.signatureMode != null'> AND s.SIGNATURE_MODE = #{params.signatureMode}</if>"
+ "<if test='params.organizationId != null'> AND s.ORGANIZATION_ID = #{params.organizationId}</if>"
+ "<if test='params.organizationName != null and params.organizationName != \"\"'> AND s.ORGANIZATION_NAME LIKE CONCAT('%', #{params.organizationName}, '%')</if>"
+ "<if test='params.warehouseId != null'> AND s.WAREHOUSE_ID = #{params.warehouseId}</if>"
+ "<if test='params.warehouseName != null and params.warehouseName != \"\"'> AND s.WAREHOUSE_NAME LIKE CONCAT('%', #{params.warehouseName}, '%')</if>"
+ "<if test='params.createTimeFrom != null'> AND s.CREATE_TIME &gt;= #{params.createTimeFrom}</if>"
+ "<if test='params.createTimeTo != null'> AND s.CREATE_TIME &lt;= #{params.createTimeTo}</if>"
+ " ORDER BY s.CREATE_TIME DESC"
+ "</script>")
List<ElectronicSignature> selectSignatureList(@Param("params") ElectronicSignatureQueryDTO queryDTO);
/**
* 根据签名ID查询
*/
@Select("SELECT * FROM NGWL_TEST_OMS.ELECTRONIC_SIGNATURE WHERE SIGNATURE_ID = #{signatureId} AND DEL_FLAG = 1")
ElectronicSignature selectBySignatureId(@Param("signatureId") Long signatureId);
/**
* 根据签名ID查询物料明细列表
*/
@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);
}
@@ -0,0 +1,15 @@
package com.mhd.oms.domain.electronicSignature.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignatureMaterialDetail;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
/**
* 电子签名物料明细Mapper接口
*/
public interface ElectronicSignatureMaterialDetailMapper extends BaseMapper<ElectronicSignatureMaterialDetail> {
@Update("UPDATE NGWL_TEST_OMS.ELECTRONIC_SIGNATURE_MATERIAL_DETAIL SET DEL_FLAG = 2 WHERE SIGNATURE_ID = #{signatureId} AND DEL_FLAG = 1")
int logicDeleteBySignatureId(@Param("signatureId") Long signatureId);
}
@@ -0,0 +1,29 @@
package com.mhd.oms.domain.electronicSignature.repository.persistence;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignature;
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 org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 电子签名Service业务层处理
*/
@Service
public class ElectronicSignatureImpl extends ServiceImpl<ElectronicSignatureMapper, ElectronicSignature> implements IElectronicSignatureService {
@Autowired
private ElectronicSignatureMapper electronicSignatureMapper;
@Override
public Boolean saveSignature(ElectronicSignatureDO electronicSignatureDO) {
ElectronicSignature entity = new ElectronicSignature();
BeanUtils.copyProperties(electronicSignatureDO, entity);
Long id = electronicSignatureMapper.nextSignatureId();
entity.setSignatureId(id);
return this.save(entity);
}
}
@@ -0,0 +1,37 @@
package com.mhd.oms.domain.electronicSignature.repository.persistence;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignatureMaterialDetail;
import com.mhd.oms.domain.electronicSignature.repository.facade.IElectronicSignatureMaterialDetailService;
import com.mhd.oms.domain.electronicSignature.repository.mapper.ElectronicSignatureMaterialDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 电子签名物料明细Service业务层处理
*/
@Service
public class ElectronicSignatureMaterialDetailImpl extends ServiceImpl<ElectronicSignatureMaterialDetailMapper, ElectronicSignatureMaterialDetail> implements IElectronicSignatureMaterialDetailService {
@Autowired
private ElectronicSignatureMaterialDetailMapper electronicSignatureMaterialDetailMapper;
@Override
public int deleteBySignatureId(Long signatureId) {
return electronicSignatureMaterialDetailMapper.logicDeleteBySignatureId(signatureId);
}
@Override
public boolean batchInsert(List<ElectronicSignatureMaterialDetail> detailList) {
if (detailList == null || detailList.isEmpty()) {
return true;
}
for (ElectronicSignatureMaterialDetail detail : detailList) {
Long detailId = electronicSignatureMaterialDetailMapper.nextDetailId();
detail.setDetailId(detailId);
}
return this.saveBatch(detailList);
}
}
@@ -0,0 +1,49 @@
package com.mhd.oms.domain.electronicSignature.repository.todo;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignatureMaterialDetail;
import lombok.Data;
import java.util.List;
/**
* 电子签名保存入参
*/
@Data
public class ElectronicSignatureDO {
/** 订单ID */
private Long orderId;
/** 订单号 */
private String orderNumber;
/** 订单类型:IN-入库 OUT-出库 */
private String orderType;
/** 组织ID */
private Long organizationId;
/** 组织名称 */
private String organizationName;
/** 一级组织ID */
private Long topOrganizationId;
/** 仓库ID */
private Long warehouseId;
/** 仓库编码 */
private String warehouseCode;
/** 仓库名称 */
private String warehouseName;
/** 创建人 */
private Long createBy;
/** 创建人姓名 */
private String createByName;
/** 物料明细列表 */
private List<ElectronicSignatureMaterialDetail> materialDetailList;
}
@@ -0,0 +1,108 @@
package com.mhd.oms.domain.electronicSignature.service;
import cn.hutool.core.util.ObjectUtil;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignature;
import com.mhd.oms.domain.electronicSignature.entity.ElectronicSignatureMaterialDetail;
import com.mhd.oms.domain.electronicSignature.repository.facade.IElectronicSignatureMaterialDetailService;
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.ElectronicSignatureQueryDTO;
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.Date;
import java.util.List;
/**
* 电子签名领域服务
*/
@Service
@Slf4j
public class ElectronicSignatureDomainService {
@Autowired
private IElectronicSignatureService electronicSignatureService;
@Autowired
private IElectronicSignatureMaterialDetailService electronicSignatureMaterialDetailService;
@Autowired
private ElectronicSignatureMapper electronicSignatureMapper;
/**
* 保存电子签名记录(生成待签名记录)
* 业务规则:
* 1. 查询是否已有签名记录
* 2. 若已签名(SIGNATURE_STATUS=2),跳过
* 3. 若待签名(SIGNATURE_STATUS=1),覆盖明细(先逻辑删除旧明细,再插入新明细)
* 4. 若不存在,新增主表+明细
*/
@Transactional(rollbackFor = Exception.class)
public Boolean saveSignature(ElectronicSignatureDO electronicSignatureDO) {
Long orderId = electronicSignatureDO.getOrderId();
String orderType = electronicSignatureDO.getOrderType();
// 查询是否已有签名记录
ElectronicSignature existing = electronicSignatureMapper.selectByOrderIdAndType(orderId, orderType);
if (existing != null) {
// 已签名,跳过
if (existing.getSignatureStatus() != null && existing.getSignatureStatus() == 2) {
log.info("订单 {} 已签名,跳过生成签名记录", electronicSignatureDO.getOrderNumber());
return true;
}
// 待签名,覆盖:逻辑删除旧明细,插入新明细
log.info("订单 {} 已有待签名记录,覆盖明细", electronicSignatureDO.getOrderNumber());
electronicSignatureMaterialDetailService.deleteBySignatureId(existing.getSignatureId());
batchInsertDetails(existing.getSignatureId(), electronicSignatureDO.getMaterialDetailList());
return true;
}
// 不存在,新增
log.info("订单 {} 生成新的待签名记录", electronicSignatureDO.getOrderNumber());
electronicSignatureService.saveSignature(electronicSignatureDO);
// 查询刚插入的记录以获取签名ID
ElectronicSignature newEntity = electronicSignatureMapper.selectByOrderIdAndType(orderId, orderType);
if (newEntity != null) {
batchInsertDetails(newEntity.getSignatureId(), electronicSignatureDO.getMaterialDetailList());
}
return true;
}
/**
* 分页查询电子签名列表
*/
public List<ElectronicSignature> querySignatureList(ElectronicSignatureQueryDTO queryDTO) {
return electronicSignatureMapper.selectSignatureList(queryDTO);
}
/**
* 根据签名ID查询
*/
public ElectronicSignature getSignatureById(Long signatureId) {
return electronicSignatureMapper.selectBySignatureId(signatureId);
}
/**
* 根据签名ID查询物料明细
*/
public List<ElectronicSignatureMaterialDetail> queryMaterialDetailBySignatureId(Long signatureId) {
return electronicSignatureMapper.selectMaterialDetailBySignatureId(signatureId);
}
private void batchInsertDetails(Long signatureId, List<ElectronicSignatureMaterialDetail> detailList) {
if (detailList == null || detailList.isEmpty()) {
return;
}
for (ElectronicSignatureMaterialDetail detail : detailList) {
detail.setSignatureId(signatureId);
}
electronicSignatureMaterialDetailService.batchInsert(detailList);
}
}
@@ -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;
}
}