OMS的签名表以及详情,WMS的批量签名
This commit is contained in:
+71
@@ -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;
|
||||
}
|
||||
+83
@@ -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;
|
||||
}
|
||||
+22
@@ -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);
|
||||
}
|
||||
+16
@@ -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);
|
||||
}
|
||||
+56
@@ -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 >= #{params.createTimeFrom}</if>"
|
||||
+ "<if test='params.createTimeTo != null'> AND s.CREATE_TIME <= #{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);
|
||||
}
|
||||
+15
@@ -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);
|
||||
}
|
||||
+29
@@ -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);
|
||||
}
|
||||
}
|
||||
+37
@@ -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);
|
||||
}
|
||||
}
|
||||
+49
@@ -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;
|
||||
}
|
||||
+108
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user