feat(oms): 新增出仓委托单,支持新增/编辑/审核/下发WMS/完成入库
- 订单状态五态:1待审核(新增默认,驳回单编辑后自动回此态) 2已审核(下发后保持,用下发状态区分) 3已驳回 4进行中(预留) 5已入库 - 下发走WMS出库通知单链路(stockOutOrInInsert),返回强校验防吞错;完成入库限已审核+已下发 - 订单类型未传默认普通出库;明细新增单价unitPrice;列表支持invoiceNo/settlementCurrency查询,时间参数只传年月日 - 必填:客户/业务员/仓库/商品名称/申报数量;编辑删除限待审核/已驳回且未下发 - 附达梦建表脚本oms_out_entrust_order(主表+明细表,最终版)
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 出仓委托单对象 oms_out_entrust_order
|
||||
* 表单字段对齐WMS出库管理新增(报关/委托信息块)
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@TableName("oms_out_entrust_order")
|
||||
public class OutEntrustOrder extends BaseVOEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("编号")
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("委托单号")
|
||||
private String entrustNumber;
|
||||
|
||||
@ApiModelProperty("出库仓库ID")
|
||||
private Long warehouseId;
|
||||
@ApiModelProperty("仓库编码")
|
||||
private String warehouseCode;
|
||||
@ApiModelProperty("仓库名称")
|
||||
private String warehouseName;
|
||||
|
||||
@ApiModelProperty("客户ID(货主)")
|
||||
private Long shipperId;
|
||||
@ApiModelProperty("客户编码")
|
||||
private String shipperCode;
|
||||
@ApiModelProperty("客户名称")
|
||||
private String shipperName;
|
||||
|
||||
@ApiModelProperty("业务员ID")
|
||||
private String salesmanId;
|
||||
@ApiModelProperty("业务员名称")
|
||||
private String salesmanName;
|
||||
|
||||
@ApiModelProperty("订单类型编码(字典outDocumentType)")
|
||||
private String orderTypeCode;
|
||||
@ApiModelProperty("订单类型名称")
|
||||
private String orderTypeName;
|
||||
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
|
||||
@ApiModelProperty("优先级别编码")
|
||||
private String priorityLevelCode;
|
||||
@ApiModelProperty("优先级别名称")
|
||||
private String priorityLevelName;
|
||||
|
||||
@ApiModelProperty("是否直接出库: 1-是 2-否")
|
||||
private Integer directWarehouse;
|
||||
|
||||
@ApiModelProperty("是否复核: 1-是 2-否")
|
||||
private Integer review;
|
||||
|
||||
@ApiModelProperty("预计出货时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date expectTime;
|
||||
|
||||
@ApiModelProperty("出仓日期")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date outboundDate;
|
||||
|
||||
@ApiModelProperty("orderDate")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date orderDate;
|
||||
|
||||
@ApiModelProperty("完成时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date completeTime;
|
||||
|
||||
@ApiModelProperty("To(收货人)")
|
||||
@TableField("to_receiver")
|
||||
private String toReceiver;
|
||||
|
||||
@ApiModelProperty("联系人")
|
||||
private String contactPerson;
|
||||
|
||||
@ApiModelProperty("车型及车牌")
|
||||
private String vehicleModelPlate;
|
||||
|
||||
@ApiModelProperty("委托编号(客户委托单号)")
|
||||
private String entrustNo;
|
||||
|
||||
@ApiModelProperty("Tel电话")
|
||||
private String tel;
|
||||
|
||||
@ApiModelProperty("Fax传真")
|
||||
private String fax;
|
||||
|
||||
@ApiModelProperty("司机签名")
|
||||
private String driverSign;
|
||||
|
||||
@ApiModelProperty("承运商编码")
|
||||
private String carrier;
|
||||
@ApiModelProperty("承运商名称")
|
||||
private String carrierName;
|
||||
|
||||
@ApiModelProperty("柜号")
|
||||
private String containerNo;
|
||||
@ApiModelProperty("柜")
|
||||
private String containerNoName;
|
||||
|
||||
@ApiModelProperty("运输方式编码")
|
||||
private String transportModeCode;
|
||||
@ApiModelProperty("运输方式名称")
|
||||
private String transportModeName;
|
||||
|
||||
@ApiModelProperty("监管方式编码")
|
||||
private String supervisionModeCode;
|
||||
@ApiModelProperty("监管方式名称")
|
||||
private String supervisionModeName;
|
||||
|
||||
@ApiModelProperty("申报地关区")
|
||||
private String declareCustoms;
|
||||
|
||||
@ApiModelProperty("进出境关别")
|
||||
private String entryExitCustoms;
|
||||
|
||||
@ApiModelProperty("起运/运抵国(地区)")
|
||||
private String departureArrivalCountry;
|
||||
|
||||
@ApiModelProperty("海关是否查验货物")
|
||||
private String customsInspectionFlag;
|
||||
|
||||
@ApiModelProperty("是否需要报关(预留,页面隐藏)")
|
||||
private String needDeclareFlag;
|
||||
@ApiModelProperty("是否需要运输(预留,页面隐藏)")
|
||||
private String needTransportFlag;
|
||||
|
||||
@ApiModelProperty("生产商")
|
||||
private String manufacturer;
|
||||
|
||||
@ApiModelProperty("报关员姓名及联系方式")
|
||||
private String customsDeclarerInfo;
|
||||
|
||||
@ApiModelProperty("送货地址")
|
||||
private String deliveryAddr;
|
||||
|
||||
@ApiModelProperty("附件url")
|
||||
private String annexUrl;
|
||||
|
||||
@ApiModelProperty("订单状态:1-待审核 2-已审核 3-已驳回 4-进行中 5-已入库")
|
||||
private Integer orderStatus;
|
||||
|
||||
@ApiModelProperty("审核人ID")
|
||||
private Long auditBy;
|
||||
@ApiModelProperty("审核人姓名")
|
||||
private String auditByName;
|
||||
@ApiModelProperty("审核时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date auditTime;
|
||||
@ApiModelProperty("审核备注(驳回原因)")
|
||||
private String auditRemark;
|
||||
|
||||
@ApiModelProperty("下发状态:1-未下发 2-已下发")
|
||||
private Integer issueStatus;
|
||||
@ApiModelProperty("下发人ID")
|
||||
private Long issueBy;
|
||||
@ApiModelProperty("下发人姓名")
|
||||
private String issueByName;
|
||||
@ApiModelProperty("下发时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date issueTime;
|
||||
|
||||
@ApiModelProperty("申报总数量(明细申报数量之和)")
|
||||
private BigDecimal declareTotalQuantity;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("组织ID")
|
||||
private Long organizationId;
|
||||
@ApiModelProperty("组织名称")
|
||||
private String organizationName;
|
||||
@ApiModelProperty("一级组织ID")
|
||||
private Long topOrganizationId;
|
||||
}
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.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 lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 出仓委托单明细对象 oms_out_entrust_order_detail
|
||||
* 明细列对齐WMS出库管理新增(出仓委托单明细列)
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@TableName("oms_out_entrust_order_detail")
|
||||
public class OutEntrustOrderDetail extends BaseVOEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("编号")
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("委托单号(关联主表)")
|
||||
private String entrustNumber;
|
||||
|
||||
@ApiModelProperty("物料基础信息ID")
|
||||
private Long materialBaseInfoId;
|
||||
@ApiModelProperty("商品编码")
|
||||
private String materialCode;
|
||||
@ApiModelProperty("商品名称(物料档案名)")
|
||||
private String materialName;
|
||||
@ApiModelProperty("商品条形码")
|
||||
private String barCode;
|
||||
|
||||
@ApiModelProperty("商品名称(委托单品名)")
|
||||
private String commodityName;
|
||||
@ApiModelProperty("商品编号")
|
||||
private String commodityNo;
|
||||
@ApiModelProperty("料号")
|
||||
private String materialNo;
|
||||
@ApiModelProperty("规格型号")
|
||||
private String specificationModel;
|
||||
@ApiModelProperty("SKU码")
|
||||
private String skucode;
|
||||
@ApiModelProperty("发票号")
|
||||
private String invoiceNo;
|
||||
|
||||
@ApiModelProperty("申报单位")
|
||||
private String declareUnit;
|
||||
@ApiModelProperty("申报数量")
|
||||
private BigDecimal declareQuantity;
|
||||
@ApiModelProperty("单价")
|
||||
private BigDecimal unitPrice;
|
||||
|
||||
@ApiModelProperty("单位")
|
||||
private String unit;
|
||||
@ApiModelProperty("升")
|
||||
private String liter;
|
||||
@ApiModelProperty("尺寸")
|
||||
private String size;
|
||||
@ApiModelProperty("箱数")
|
||||
private BigDecimal caseCount;
|
||||
@ApiModelProperty("件数")
|
||||
private BigDecimal pieceCount;
|
||||
@ApiModelProperty("出库数量")
|
||||
private BigDecimal outboundQuantity;
|
||||
@ApiModelProperty("总净重(千克)")
|
||||
private BigDecimal totalNetWeight;
|
||||
@ApiModelProperty("总毛重(千克)")
|
||||
private BigDecimal totalGrossWeight;
|
||||
@ApiModelProperty("总体积(立方米)")
|
||||
private BigDecimal totalVolume;
|
||||
@ApiModelProperty("总面积")
|
||||
private BigDecimal totalArea;
|
||||
@ApiModelProperty("总金额")
|
||||
private BigDecimal totalAmount;
|
||||
@ApiModelProperty("币制")
|
||||
private String currency;
|
||||
@ApiModelProperty("批次")
|
||||
private String batchRefNo;
|
||||
@ApiModelProperty("单据参考号")
|
||||
private String sheetRefNo;
|
||||
@ApiModelProperty("原产国")
|
||||
private String countryOfOrigin;
|
||||
@ApiModelProperty("箱/托盘号")
|
||||
private String boxPalletNo;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.facade;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrderDetail;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderDetailPO;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDetailDO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 出仓委托单明细Service接口
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
public interface IOutEntrustOrderDetailService extends IService<OutEntrustOrderDetail> {
|
||||
|
||||
/**
|
||||
* 根据委托单号查询有效明细
|
||||
*/
|
||||
List<OutEntrustOrderDetailPO> queryByEntrustNumber(String entrustNumber);
|
||||
|
||||
/**
|
||||
* 根据委托单号集合查询有效明细
|
||||
*/
|
||||
List<OutEntrustOrderDetailPO> queryByEntrustNumbers(List<String> entrustNumbers);
|
||||
|
||||
/**
|
||||
* 批量保存明细
|
||||
*/
|
||||
Boolean batchInsert(String entrustNumber, List<OutEntrustOrderDetailDO> detailDOList);
|
||||
|
||||
/**
|
||||
* 根据委托单号逻辑删除明细
|
||||
*/
|
||||
Boolean deleteByEntrustNumber(String entrustNumber);
|
||||
|
||||
/**
|
||||
* 根据委托单号集合逻辑删除明细
|
||||
*/
|
||||
Boolean deleteByEntrustNumbers(List<String> entrustNumbers);
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.facade;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrder;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 出仓委托单Service接口
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
public interface IOutEntrustOrderService extends IService<OutEntrustOrder> {
|
||||
|
||||
/**
|
||||
* 分页查询出仓委托单列表
|
||||
*/
|
||||
List<OutEntrustOrderPO> queryList(OutEntrustOrderDO outEntrustOrderDO);
|
||||
|
||||
/**
|
||||
* 新增出仓委托单
|
||||
*/
|
||||
Boolean insert(OutEntrustOrderDO outEntrustOrderDO);
|
||||
|
||||
/**
|
||||
* 修改出仓委托单
|
||||
*/
|
||||
Boolean update(OutEntrustOrderDO outEntrustOrderDO);
|
||||
|
||||
/**
|
||||
* 批量删除出仓委托单
|
||||
*/
|
||||
Boolean delete(Long[] ids);
|
||||
|
||||
/**
|
||||
* 获取出仓委托单详情(含明细)
|
||||
*/
|
||||
OutEntrustOrderPO getInfo(Long id);
|
||||
|
||||
/**
|
||||
* 根据编号集合查询出仓委托单列表
|
||||
*/
|
||||
List<OutEntrustOrderPO> getInfoByIds(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 审核:待审核/已驳回 → 已审核(2)或已驳回(3)
|
||||
*/
|
||||
Boolean audit(List<Long> ids, Integer targetStatus, Long auditBy, String auditByName, String auditRemark);
|
||||
|
||||
/**
|
||||
* 下发:置为已下发,订单状态置为进行中
|
||||
*/
|
||||
Boolean issue(List<Long> ids, Long issueBy, String issueByName);
|
||||
|
||||
/**
|
||||
* 完成:进行中 → 已入库
|
||||
*/
|
||||
Boolean finish(List<Long> ids, Long updateBy, String updateByName);
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrderDetail;
|
||||
|
||||
/**
|
||||
* 出仓委托单明细Mapper接口
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
public interface OutEntrustOrderDetailMapper extends BaseMapper<OutEntrustOrderDetail> {
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrder;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 出仓委托单Mapper接口
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
public interface OutEntrustOrderMapper extends BaseMapper<OutEntrustOrder> {
|
||||
|
||||
/**
|
||||
* 查询出仓委托单列表
|
||||
*/
|
||||
List<OutEntrustOrderPO> queryList(OutEntrustOrderDO outEntrustOrderDO);
|
||||
|
||||
/**
|
||||
* 根据编号集合查询出仓委托单列表
|
||||
*/
|
||||
List<OutEntrustOrderPO> getInfoByIds(@Param("idList") List<Long> idList);
|
||||
}
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.persistence;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrderDetail;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.facade.IOutEntrustOrderDetailService;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.mapper.OutEntrustOrderDetailMapper;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderDetailPO;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDetailDO;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 出仓委托单明细Service业务层处理
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
@Service
|
||||
public class OutEntrustOrderDetailImpl extends ServiceImpl<OutEntrustOrderDetailMapper, OutEntrustOrderDetail> implements IOutEntrustOrderDetailService {
|
||||
|
||||
/**
|
||||
* 根据委托单号查询有效明细
|
||||
*/
|
||||
@Override
|
||||
public List<OutEntrustOrderDetailPO> queryByEntrustNumber(String entrustNumber) {
|
||||
List<OutEntrustOrderDetail> detailList = this.list(new LambdaQueryWrapper<OutEntrustOrderDetail>()
|
||||
.eq(OutEntrustOrderDetail::getEntrustNumber, entrustNumber)
|
||||
.eq(OutEntrustOrderDetail::getDelFlag, 1)
|
||||
.orderByAsc(OutEntrustOrderDetail::getId));
|
||||
return detailList.stream().map(detail -> {
|
||||
OutEntrustOrderDetailPO detailPO = new OutEntrustOrderDetailPO();
|
||||
BeanUtils.copyProperties(detail, detailPO);
|
||||
return detailPO;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据委托单号集合查询有效明细
|
||||
*/
|
||||
@Override
|
||||
public List<OutEntrustOrderDetailPO> queryByEntrustNumbers(List<String> entrustNumbers) {
|
||||
if (entrustNumbers == null || entrustNumbers.isEmpty()) {
|
||||
return new java.util.ArrayList<>();
|
||||
}
|
||||
List<OutEntrustOrderDetail> detailList = this.list(new LambdaQueryWrapper<OutEntrustOrderDetail>()
|
||||
.in(OutEntrustOrderDetail::getEntrustNumber, entrustNumbers)
|
||||
.eq(OutEntrustOrderDetail::getDelFlag, 1)
|
||||
.orderByAsc(OutEntrustOrderDetail::getId));
|
||||
return detailList.stream().map(detail -> {
|
||||
OutEntrustOrderDetailPO detailPO = new OutEntrustOrderDetailPO();
|
||||
BeanUtils.copyProperties(detail, detailPO);
|
||||
return detailPO;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量保存明细
|
||||
*/
|
||||
@Override
|
||||
public Boolean batchInsert(String entrustNumber, List<OutEntrustOrderDetailDO> detailDOList) {
|
||||
List<OutEntrustOrderDetail> detailList = detailDOList.stream().map(detailDO -> {
|
||||
OutEntrustOrderDetail detail = new OutEntrustOrderDetail();
|
||||
BeanUtils.copyProperties(detailDO, detail);
|
||||
detail.setEntrustNumber(entrustNumber);
|
||||
detail.setDelFlag(1);
|
||||
return detail;
|
||||
}).collect(Collectors.toList());
|
||||
return this.saveBatch(detailList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据委托单号逻辑删除明细
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteByEntrustNumber(String entrustNumber) {
|
||||
return this.update(new LambdaUpdateWrapper<OutEntrustOrderDetail>()
|
||||
.eq(OutEntrustOrderDetail::getEntrustNumber, entrustNumber)
|
||||
.eq(OutEntrustOrderDetail::getDelFlag, 1)
|
||||
.set(OutEntrustOrderDetail::getDelFlag, 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据委托单号集合逻辑删除明细
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteByEntrustNumbers(List<String> entrustNumbers) {
|
||||
return this.update(new LambdaUpdateWrapper<OutEntrustOrderDetail>()
|
||||
.in(OutEntrustOrderDetail::getEntrustNumber, entrustNumbers)
|
||||
.eq(OutEntrustOrderDetail::getDelFlag, 1)
|
||||
.set(OutEntrustOrderDetail::getDelFlag, 2));
|
||||
}
|
||||
}
|
||||
+159
@@ -0,0 +1,159 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.persistence;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.mhd.common.core.exception.ServiceException;
|
||||
import com.mhd.common.security.utils.SecurityUtils;
|
||||
import com.mhd.oms.constant.OutEntrustOrderConstant;
|
||||
import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrder;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.facade.IOutEntrustOrderService;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.mapper.OutEntrustOrderMapper;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
|
||||
import com.mhd.system.api.model.LoginUser;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 出仓委托单Service业务层处理
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
@Service
|
||||
public class OutEntrustOrderImpl extends ServiceImpl<OutEntrustOrderMapper, OutEntrustOrder> implements IOutEntrustOrderService {
|
||||
|
||||
/**
|
||||
* 查询出仓委托单列表
|
||||
*/
|
||||
@Override
|
||||
public List<OutEntrustOrderPO> queryList(OutEntrustOrderDO outEntrustOrderDO) {
|
||||
return baseMapper.queryList(outEntrustOrderDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增出仓委托单
|
||||
*/
|
||||
@Override
|
||||
public Boolean insert(OutEntrustOrderDO outEntrustOrderDO) {
|
||||
OutEntrustOrder outEntrustOrder = new OutEntrustOrder();
|
||||
BeanUtils.copyProperties(outEntrustOrderDO, outEntrustOrder);
|
||||
return this.save(outEntrustOrder);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改出仓委托单
|
||||
*/
|
||||
@Override
|
||||
public Boolean update(OutEntrustOrderDO outEntrustOrderDO) {
|
||||
OutEntrustOrder outEntrustOrder = new OutEntrustOrder();
|
||||
BeanUtils.copyProperties(outEntrustOrderDO, outEntrustOrder);
|
||||
return this.updateById(outEntrustOrder);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除出仓委托单(仅待审核/已驳回且未下发可删除)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean delete(Long[] ids) {
|
||||
List<OutEntrustOrder> outEntrustOrders = this.listByIds(Arrays.asList(ids));
|
||||
//只有待审核/已驳回且未下发的委托单才可以删除
|
||||
List<OutEntrustOrder> unableDeleteList = outEntrustOrders.stream()
|
||||
.filter(order -> !(OutEntrustOrderConstant.ORDER_STATUS_PENDING_AUDIT.equals(order.getOrderStatus())
|
||||
|| OutEntrustOrderConstant.ORDER_STATUS_REJECTED.equals(order.getOrderStatus()))
|
||||
|| !OutEntrustOrderConstant.ISSUE_STATUS_1.equals(order.getIssueStatus()))
|
||||
.collect(Collectors.toList());
|
||||
if (!unableDeleteList.isEmpty()) {
|
||||
throw new ServiceException("已审核/进行中/已入库或已下发的委托单不允许删除");
|
||||
}
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
Date now = new Date();
|
||||
for (OutEntrustOrder outEntrustOrder : outEntrustOrders) {
|
||||
outEntrustOrder.setDelFlag(2);
|
||||
outEntrustOrder.setUpdateBy(loginUser == null ? null : loginUser.getUserid());
|
||||
outEntrustOrder.setUpdateByName(loginUser == null ? null : loginUser.getUsername());
|
||||
outEntrustOrder.setUpdateTime(now);
|
||||
}
|
||||
return this.updateBatchById(outEntrustOrders);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取出仓委托单详情
|
||||
*/
|
||||
@Override
|
||||
public OutEntrustOrderPO getInfo(Long id) {
|
||||
OutEntrustOrder outEntrustOrder = this.getOne(new LambdaQueryWrapper<OutEntrustOrder>()
|
||||
.eq(OutEntrustOrder::getId, id).eq(OutEntrustOrder::getDelFlag, 1));
|
||||
if (outEntrustOrder == null) {
|
||||
throw new ServiceException("出仓委托单不存在");
|
||||
}
|
||||
OutEntrustOrderPO outEntrustOrderPO = new OutEntrustOrderPO();
|
||||
BeanUtils.copyProperties(outEntrustOrder, outEntrustOrderPO);
|
||||
return outEntrustOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编号集合查询出仓委托单列表
|
||||
*/
|
||||
@Override
|
||||
public List<OutEntrustOrderPO> getInfoByIds(List<Long> ids) {
|
||||
return baseMapper.getInfoByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核:待审核/已驳回 → 已审核(2)或已驳回(3)
|
||||
*/
|
||||
@Override
|
||||
public Boolean audit(List<Long> ids, Integer targetStatus, Long auditBy, String auditByName, String auditRemark) {
|
||||
return this.update(new LambdaUpdateWrapper<OutEntrustOrder>()
|
||||
.in(OutEntrustOrder::getId, ids)
|
||||
.eq(OutEntrustOrder::getDelFlag, 1)
|
||||
.set(OutEntrustOrder::getOrderStatus, targetStatus)
|
||||
.set(OutEntrustOrder::getAuditBy, auditBy)
|
||||
.set(OutEntrustOrder::getAuditByName, auditByName)
|
||||
.set(OutEntrustOrder::getAuditTime, new Date())
|
||||
.set(OutEntrustOrder::getAuditRemark, auditRemark)
|
||||
.set(OutEntrustOrder::getUpdateBy, auditBy)
|
||||
.set(OutEntrustOrder::getUpdateByName, auditByName)
|
||||
.set(OutEntrustOrder::getUpdateTime, new Date()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 下发:下发状态置为已下发(订单状态保持已审核)
|
||||
*/
|
||||
@Override
|
||||
public Boolean issue(List<Long> ids, Long issueBy, String issueByName) {
|
||||
return this.update(new LambdaUpdateWrapper<OutEntrustOrder>()
|
||||
.in(OutEntrustOrder::getId, ids)
|
||||
.eq(OutEntrustOrder::getDelFlag, 1)
|
||||
.set(OutEntrustOrder::getIssueStatus, OutEntrustOrderConstant.ISSUE_STATUS_2)
|
||||
.set(OutEntrustOrder::getIssueBy, issueBy)
|
||||
.set(OutEntrustOrder::getIssueByName, issueByName)
|
||||
.set(OutEntrustOrder::getIssueTime, new Date())
|
||||
.set(OutEntrustOrder::getUpdateBy, issueBy)
|
||||
.set(OutEntrustOrder::getUpdateByName, issueByName)
|
||||
.set(OutEntrustOrder::getUpdateTime, new Date()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 完成:已审核(已下发)/进行中 → 已入库
|
||||
*/
|
||||
@Override
|
||||
public Boolean finish(List<Long> ids, Long updateBy, String updateByName) {
|
||||
return this.update(new LambdaUpdateWrapper<OutEntrustOrder>()
|
||||
.in(OutEntrustOrder::getId, ids)
|
||||
.eq(OutEntrustOrder::getDelFlag, 1)
|
||||
.set(OutEntrustOrder::getOrderStatus, OutEntrustOrderConstant.ORDER_STATUS_STORED)
|
||||
.set(OutEntrustOrder::getUpdateBy, updateBy)
|
||||
.set(OutEntrustOrder::getUpdateByName, updateByName)
|
||||
.set(OutEntrustOrder::getUpdateTime, new Date()));
|
||||
}
|
||||
}
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.po;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 出仓委托单明细对象 oms_out_entrust_order_detail
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
|
||||
@Data
|
||||
@ApiModel(value = "出仓委托单明细对象", description = "出仓委托单明细响应对象")
|
||||
public class OutEntrustOrderDetailPO extends BaseVOEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("编号")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("委托单号(关联主表)")
|
||||
private String entrustNumber;
|
||||
|
||||
@ApiModelProperty("物料基础信息ID")
|
||||
private Long materialBaseInfoId;
|
||||
@ApiModelProperty("商品编码")
|
||||
private String materialCode;
|
||||
@ApiModelProperty("商品名称(物料档案名)")
|
||||
private String materialName;
|
||||
@ApiModelProperty("商品条形码")
|
||||
private String barCode;
|
||||
|
||||
@ApiModelProperty("商品名称(委托单品名)")
|
||||
private String commodityName;
|
||||
@ApiModelProperty("商品编号")
|
||||
private String commodityNo;
|
||||
@ApiModelProperty("料号")
|
||||
private String materialNo;
|
||||
@ApiModelProperty("规格型号")
|
||||
private String specificationModel;
|
||||
@ApiModelProperty("SKU码")
|
||||
private String skucode;
|
||||
@ApiModelProperty("发票号")
|
||||
private String invoiceNo;
|
||||
|
||||
@ApiModelProperty("申报单位")
|
||||
private String declareUnit;
|
||||
@ApiModelProperty("申报数量")
|
||||
private BigDecimal declareQuantity;
|
||||
@ApiModelProperty("单价")
|
||||
private BigDecimal unitPrice;
|
||||
|
||||
@ApiModelProperty("单位")
|
||||
private String unit;
|
||||
@ApiModelProperty("升")
|
||||
private String liter;
|
||||
@ApiModelProperty("尺寸")
|
||||
private String size;
|
||||
@ApiModelProperty("箱数")
|
||||
private BigDecimal caseCount;
|
||||
@ApiModelProperty("件数")
|
||||
private BigDecimal pieceCount;
|
||||
@ApiModelProperty("出库数量")
|
||||
private BigDecimal outboundQuantity;
|
||||
@ApiModelProperty("总净重(千克)")
|
||||
private BigDecimal totalNetWeight;
|
||||
@ApiModelProperty("总毛重(千克)")
|
||||
private BigDecimal totalGrossWeight;
|
||||
@ApiModelProperty("总体积(立方米)")
|
||||
private BigDecimal totalVolume;
|
||||
@ApiModelProperty("总面积")
|
||||
private BigDecimal totalArea;
|
||||
@ApiModelProperty("总金额")
|
||||
private BigDecimal totalAmount;
|
||||
@ApiModelProperty("币制")
|
||||
private String currency;
|
||||
@ApiModelProperty("批次")
|
||||
private String batchRefNo;
|
||||
@ApiModelProperty("单据参考号")
|
||||
private String sheetRefNo;
|
||||
@ApiModelProperty("原产国")
|
||||
private String countryOfOrigin;
|
||||
@ApiModelProperty("箱/托盘号")
|
||||
private String boxPalletNo;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("创建时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
}
|
||||
+212
@@ -0,0 +1,212 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.po;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 出仓委托单对象 oms_out_entrust_order
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
|
||||
@Data
|
||||
@ApiModel(value = "出仓委托单对象", description = "出仓委托单响应对象")
|
||||
public class OutEntrustOrderPO extends BaseVOEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("编号")
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("委托单号")
|
||||
private String entrustNumber;
|
||||
|
||||
@ApiModelProperty("出库仓库ID")
|
||||
private Long warehouseId;
|
||||
@ApiModelProperty("仓库编码")
|
||||
private String warehouseCode;
|
||||
@ApiModelProperty("仓库名称")
|
||||
private String warehouseName;
|
||||
|
||||
@ApiModelProperty("客户ID(货主)")
|
||||
private Long shipperId;
|
||||
@ApiModelProperty("客户编码")
|
||||
private String shipperCode;
|
||||
@ApiModelProperty("客户名称")
|
||||
private String shipperName;
|
||||
|
||||
@ApiModelProperty("业务员ID")
|
||||
private String salesmanId;
|
||||
@ApiModelProperty("业务员名称")
|
||||
private String salesmanName;
|
||||
|
||||
@ApiModelProperty("订单类型编码(字典outDocumentType)")
|
||||
private String orderTypeCode;
|
||||
@ApiModelProperty("订单类型名称")
|
||||
private String orderTypeName;
|
||||
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
|
||||
@ApiModelProperty("优先级别编码")
|
||||
private String priorityLevelCode;
|
||||
@ApiModelProperty("优先级别名称")
|
||||
private String priorityLevelName;
|
||||
|
||||
@ApiModelProperty("是否直接出库: 1-是 2-否")
|
||||
private Integer directWarehouse;
|
||||
|
||||
@ApiModelProperty("是否复核: 1-是 2-否")
|
||||
private Integer review;
|
||||
|
||||
@ApiModelProperty("预计出货时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date expectTime;
|
||||
|
||||
@ApiModelProperty("出仓日期")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date outboundDate;
|
||||
|
||||
@ApiModelProperty("orderDate")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date orderDate;
|
||||
|
||||
@ApiModelProperty("完成时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date completeTime;
|
||||
|
||||
@ApiModelProperty("To(收货人)")
|
||||
@JsonProperty("to")
|
||||
private String toReceiver;
|
||||
|
||||
@ApiModelProperty("联系人")
|
||||
private String contactPerson;
|
||||
|
||||
@ApiModelProperty("车型及车牌")
|
||||
private String vehicleModelPlate;
|
||||
|
||||
@ApiModelProperty("委托编号(客户委托单号)")
|
||||
private String entrustNo;
|
||||
|
||||
@ApiModelProperty("Tel电话")
|
||||
private String tel;
|
||||
|
||||
@ApiModelProperty("Fax传真")
|
||||
private String fax;
|
||||
|
||||
@ApiModelProperty("司机签名")
|
||||
private String driverSign;
|
||||
|
||||
@ApiModelProperty("承运商编码")
|
||||
private String carrier;
|
||||
@ApiModelProperty("承运商名称")
|
||||
private String carrierName;
|
||||
|
||||
@ApiModelProperty("柜号")
|
||||
private String containerNo;
|
||||
@ApiModelProperty("柜")
|
||||
private String containerNoName;
|
||||
|
||||
@ApiModelProperty("运输方式编码")
|
||||
private String transportModeCode;
|
||||
@ApiModelProperty("运输方式名称")
|
||||
private String transportModeName;
|
||||
|
||||
@ApiModelProperty("监管方式编码")
|
||||
private String supervisionModeCode;
|
||||
@ApiModelProperty("监管方式名称")
|
||||
private String supervisionModeName;
|
||||
|
||||
@ApiModelProperty("申报地关区")
|
||||
private String declareCustoms;
|
||||
|
||||
@ApiModelProperty("进出境关别")
|
||||
private String entryExitCustoms;
|
||||
|
||||
@ApiModelProperty("起运/运抵国(地区)")
|
||||
private String departureArrivalCountry;
|
||||
|
||||
@ApiModelProperty("海关是否查验货物")
|
||||
private String customsInspectionFlag;
|
||||
|
||||
@ApiModelProperty("是否需要报关(预留,页面隐藏)")
|
||||
private String needDeclareFlag;
|
||||
@ApiModelProperty("是否需要运输(预留,页面隐藏)")
|
||||
private String needTransportFlag;
|
||||
|
||||
@ApiModelProperty("生产商")
|
||||
private String manufacturer;
|
||||
|
||||
@ApiModelProperty("报关员姓名及联系方式")
|
||||
private String customsDeclarerInfo;
|
||||
|
||||
@ApiModelProperty("送货地址")
|
||||
private String deliveryAddr;
|
||||
|
||||
@ApiModelProperty("附件url")
|
||||
private String annexUrl;
|
||||
|
||||
@ApiModelProperty("订单状态:1-待审核 2-已审核 3-已驳回 4-进行中 5-已入库")
|
||||
private Integer orderStatus;
|
||||
@ApiModelProperty("订单状态")
|
||||
private String orderStatusStr;
|
||||
|
||||
@ApiModelProperty("审核人ID")
|
||||
private Long auditBy;
|
||||
@ApiModelProperty("审核人姓名")
|
||||
private String auditByName;
|
||||
@ApiModelProperty("审核时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date auditTime;
|
||||
@ApiModelProperty("审核备注(驳回原因)")
|
||||
private String auditRemark;
|
||||
|
||||
@ApiModelProperty("下发状态:1-未下发 2-已下发")
|
||||
private Integer issueStatus;
|
||||
@ApiModelProperty("下发状态")
|
||||
private String issueStatusStr;
|
||||
@ApiModelProperty("下发人ID")
|
||||
private Long issueBy;
|
||||
@ApiModelProperty("下发人姓名")
|
||||
private String issueByName;
|
||||
@ApiModelProperty("下发时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date issueTime;
|
||||
|
||||
@ApiModelProperty("申报总数量(明细申报数量之和)")
|
||||
private BigDecimal declareTotalQuantity;
|
||||
|
||||
@ApiModelProperty("发票号(列表展示用,明细发票号逗号拼接;详情请看明细)")
|
||||
private String invoiceNo;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("组织ID")
|
||||
private Long organizationId;
|
||||
@ApiModelProperty("组织名称")
|
||||
private String organizationName;
|
||||
@ApiModelProperty("一级组织ID")
|
||||
private Long topOrganizationId;
|
||||
|
||||
@ApiModelProperty("商品明细")
|
||||
private List<OutEntrustOrderDetailPO> materialDetailList;
|
||||
}
|
||||
+216
@@ -0,0 +1,216 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.todo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 出仓委托单对象 oms_out_entrust_order
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class OutEntrustOrderDO extends BaseVOEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("编号")
|
||||
private Long id;
|
||||
@ApiModelProperty("编号集合")
|
||||
private List<Long> idList;
|
||||
|
||||
@ApiModelProperty(name = "组织ID集合")
|
||||
private List<Long> organizationIdList;
|
||||
|
||||
@ApiModelProperty(name = "权限菜单ID")
|
||||
private Long permissionMenuId;
|
||||
|
||||
@ApiModelProperty("委托单号")
|
||||
private String entrustNumber;
|
||||
|
||||
@ApiModelProperty("出库仓库ID")
|
||||
private Long warehouseId;
|
||||
@ApiModelProperty("仓库编码")
|
||||
private String warehouseCode;
|
||||
@ApiModelProperty("仓库名称")
|
||||
private String warehouseName;
|
||||
|
||||
@ApiModelProperty("客户ID(货主)")
|
||||
private Long shipperId;
|
||||
@ApiModelProperty("客户编码")
|
||||
private String shipperCode;
|
||||
@ApiModelProperty("客户名称")
|
||||
private String shipperName;
|
||||
|
||||
@ApiModelProperty("业务员ID")
|
||||
private String salesmanId;
|
||||
@ApiModelProperty("业务员名称")
|
||||
private String salesmanName;
|
||||
|
||||
@ApiModelProperty("订单类型编码(字典outDocumentType)")
|
||||
private String orderTypeCode;
|
||||
@ApiModelProperty("订单类型名称")
|
||||
private String orderTypeName;
|
||||
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
|
||||
@ApiModelProperty("优先级别编码")
|
||||
private String priorityLevelCode;
|
||||
@ApiModelProperty("优先级别名称")
|
||||
private String priorityLevelName;
|
||||
|
||||
@ApiModelProperty("是否直接出库: 1-是 2-否")
|
||||
private Integer directWarehouse;
|
||||
|
||||
@ApiModelProperty("是否复核: 1-是 2-否")
|
||||
private Integer review;
|
||||
|
||||
@ApiModelProperty("预计出货时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date expectTime;
|
||||
|
||||
@ApiModelProperty("出仓日期")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date outboundDate;
|
||||
|
||||
@ApiModelProperty("orderDate")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date orderDate;
|
||||
|
||||
@ApiModelProperty("完成时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date completeTime;
|
||||
|
||||
@ApiModelProperty("To(收货人)")
|
||||
private String toReceiver;
|
||||
|
||||
@ApiModelProperty("联系人")
|
||||
private String contactPerson;
|
||||
|
||||
@ApiModelProperty("车型及车牌")
|
||||
private String vehicleModelPlate;
|
||||
|
||||
@ApiModelProperty("委托编号(客户委托单号)")
|
||||
private String entrustNo;
|
||||
|
||||
@ApiModelProperty("Tel电话")
|
||||
private String tel;
|
||||
|
||||
@ApiModelProperty("Fax传真")
|
||||
private String fax;
|
||||
|
||||
@ApiModelProperty("司机签名")
|
||||
private String driverSign;
|
||||
|
||||
@ApiModelProperty("承运商编码")
|
||||
private String carrier;
|
||||
@ApiModelProperty("承运商名称")
|
||||
private String carrierName;
|
||||
|
||||
@ApiModelProperty("柜号")
|
||||
private String containerNo;
|
||||
@ApiModelProperty("柜")
|
||||
private String containerNoName;
|
||||
|
||||
@ApiModelProperty("运输方式编码")
|
||||
private String transportModeCode;
|
||||
@ApiModelProperty("运输方式名称")
|
||||
private String transportModeName;
|
||||
|
||||
@ApiModelProperty("监管方式编码")
|
||||
private String supervisionModeCode;
|
||||
@ApiModelProperty("监管方式名称")
|
||||
private String supervisionModeName;
|
||||
|
||||
@ApiModelProperty("申报地关区")
|
||||
private String declareCustoms;
|
||||
|
||||
@ApiModelProperty("进出境关别")
|
||||
private String entryExitCustoms;
|
||||
|
||||
@ApiModelProperty("起运/运抵国(地区)")
|
||||
private String departureArrivalCountry;
|
||||
|
||||
@ApiModelProperty("海关是否查验货物")
|
||||
private String customsInspectionFlag;
|
||||
|
||||
@ApiModelProperty("是否需要报关(预留,页面隐藏)")
|
||||
private String needDeclareFlag;
|
||||
@ApiModelProperty("是否需要运输(预留,页面隐藏)")
|
||||
private String needTransportFlag;
|
||||
|
||||
@ApiModelProperty("生产商")
|
||||
private String manufacturer;
|
||||
|
||||
@ApiModelProperty("报关员姓名及联系方式")
|
||||
private String customsDeclarerInfo;
|
||||
|
||||
@ApiModelProperty("送货地址")
|
||||
private String deliveryAddr;
|
||||
|
||||
@ApiModelProperty("附件url")
|
||||
private String annexUrl;
|
||||
|
||||
@ApiModelProperty("订单状态:1-待审核 2-已审核 3-已驳回 4-进行中 5-已入库")
|
||||
private Integer orderStatus;
|
||||
|
||||
@ApiModelProperty("审核人ID")
|
||||
private Long auditBy;
|
||||
@ApiModelProperty("审核人姓名")
|
||||
private String auditByName;
|
||||
@ApiModelProperty("审核时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date auditTime;
|
||||
@ApiModelProperty("审核备注(驳回原因)")
|
||||
private String auditRemark;
|
||||
|
||||
@ApiModelProperty("下发状态:1-未下发 2-已下发")
|
||||
private Integer issueStatus;
|
||||
@ApiModelProperty("下发人ID")
|
||||
private Long issueBy;
|
||||
@ApiModelProperty("下发人姓名")
|
||||
private String issueByName;
|
||||
@ApiModelProperty("下发时间")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date issueTime;
|
||||
|
||||
@ApiModelProperty("申报总数量(明细申报数量之和)")
|
||||
private BigDecimal declareTotalQuantity;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("组织ID")
|
||||
private Long organizationId;
|
||||
@ApiModelProperty("组织名称")
|
||||
private String organizationName;
|
||||
@ApiModelProperty("一级组织ID")
|
||||
private Long topOrganizationId;
|
||||
|
||||
@ApiModelProperty("查询-创建开始时间(年月日yyyy-MM-dd)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date beginCreateTime;
|
||||
@ApiModelProperty("查询-创建结束时间(年月日yyyy-MM-dd,含当天)")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private Date endCreateTime;
|
||||
|
||||
@ApiModelProperty("查询-发票号(模糊匹配明细发票号)")
|
||||
private String invoiceNo;
|
||||
|
||||
@ApiModelProperty("商品明细")
|
||||
private List<OutEntrustOrderDetailDO> materialDetailList;
|
||||
}
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.repository.todo;
|
||||
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 出仓委托单明细对象 oms_out_entrust_order_detail
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class OutEntrustOrderDetailDO extends BaseVOEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("编号")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("委托单号(关联主表)")
|
||||
private String entrustNumber;
|
||||
|
||||
@ApiModelProperty("物料基础信息ID")
|
||||
private Long materialBaseInfoId;
|
||||
@ApiModelProperty("商品编码")
|
||||
private String materialCode;
|
||||
@ApiModelProperty("商品名称(物料档案名)")
|
||||
private String materialName;
|
||||
@ApiModelProperty("商品条形码")
|
||||
private String barCode;
|
||||
|
||||
@ApiModelProperty("商品名称(委托单品名)")
|
||||
private String commodityName;
|
||||
@ApiModelProperty("商品编号")
|
||||
private String commodityNo;
|
||||
@ApiModelProperty("料号")
|
||||
private String materialNo;
|
||||
@ApiModelProperty("规格型号")
|
||||
private String specificationModel;
|
||||
@ApiModelProperty("SKU码")
|
||||
private String skucode;
|
||||
@ApiModelProperty("发票号")
|
||||
private String invoiceNo;
|
||||
|
||||
@ApiModelProperty("申报单位")
|
||||
private String declareUnit;
|
||||
@ApiModelProperty("申报数量")
|
||||
private BigDecimal declareQuantity;
|
||||
@ApiModelProperty("单价")
|
||||
private BigDecimal unitPrice;
|
||||
|
||||
@ApiModelProperty("单位")
|
||||
private String unit;
|
||||
@ApiModelProperty("升")
|
||||
private String liter;
|
||||
@ApiModelProperty("尺寸")
|
||||
private String size;
|
||||
@ApiModelProperty("箱数")
|
||||
private BigDecimal caseCount;
|
||||
@ApiModelProperty("件数")
|
||||
private BigDecimal pieceCount;
|
||||
@ApiModelProperty("出库数量")
|
||||
private BigDecimal outboundQuantity;
|
||||
@ApiModelProperty("总净重(千克)")
|
||||
private BigDecimal totalNetWeight;
|
||||
@ApiModelProperty("总毛重(千克)")
|
||||
private BigDecimal totalGrossWeight;
|
||||
@ApiModelProperty("总体积(立方米)")
|
||||
private BigDecimal totalVolume;
|
||||
@ApiModelProperty("总面积")
|
||||
private BigDecimal totalArea;
|
||||
@ApiModelProperty("总金额")
|
||||
private BigDecimal totalAmount;
|
||||
@ApiModelProperty("币制")
|
||||
private String currency;
|
||||
@ApiModelProperty("批次")
|
||||
private String batchRefNo;
|
||||
@ApiModelProperty("单据参考号")
|
||||
private String sheetRefNo;
|
||||
@ApiModelProperty("原产国")
|
||||
private String countryOfOrigin;
|
||||
@ApiModelProperty("箱/托盘号")
|
||||
private String boxPalletNo;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
+177
@@ -0,0 +1,177 @@
|
||||
package com.mhd.oms.domain.outEntrustOrder.service;
|
||||
|
||||
import com.mhd.common.core.exception.ServiceException;
|
||||
import com.mhd.common.core.utils.OrderSequence;
|
||||
import com.mhd.oms.constant.OutEntrustOrderConstant;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.facade.IOutEntrustOrderDetailService;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.facade.IOutEntrustOrderService;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderDetailPO;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
|
||||
import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDetailDO;
|
||||
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.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 出仓委托单
|
||||
*
|
||||
* @author rcx
|
||||
* @date 2026-09-02
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class OutEntrustOrderDomainService {
|
||||
|
||||
@Autowired
|
||||
private IOutEntrustOrderService outEntrustOrderService;
|
||||
|
||||
@Autowired
|
||||
private IOutEntrustOrderDetailService outEntrustOrderDetailService;
|
||||
|
||||
/**
|
||||
* 分页查询出仓委托单列表
|
||||
*/
|
||||
public List<OutEntrustOrderPO> queryList(OutEntrustOrderDO outEntrustOrderDO) {
|
||||
return outEntrustOrderService.queryList(outEntrustOrderDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增出仓委托单(主单+明细)
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insert(OutEntrustOrderDO outEntrustOrderDO) {
|
||||
//生成委托单号,初始状态:待审核、未下发;新单无审核信息
|
||||
outEntrustOrderDO.setEntrustNumber(OrderSequence.getOrderCode(OutEntrustOrderConstant.OUT_ENTRUST_NO_PREFIX));
|
||||
outEntrustOrderDO.setOrderStatus(OutEntrustOrderConstant.ORDER_STATUS_PENDING_AUDIT);
|
||||
outEntrustOrderDO.setIssueStatus(OutEntrustOrderConstant.ISSUE_STATUS_1);
|
||||
outEntrustOrderDO.setAuditRemark(null);
|
||||
outEntrustOrderService.insert(outEntrustOrderDO);
|
||||
outEntrustOrderDetailService.batchInsert(outEntrustOrderDO.getEntrustNumber(), buildDetailList(outEntrustOrderDO));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改出仓委托单(仅已创建且未下发可修改,明细全量替换)
|
||||
*/
|
||||
/**
|
||||
* 修改出仓委托单(仅待审核/已驳回且未下发可修改,明细全量替换)
|
||||
* 已驳回单重新编辑后状态重置为待审核,待重新审核
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean update(OutEntrustOrderDO outEntrustOrderDO) {
|
||||
OutEntrustOrderPO orderPO = checkEditable(outEntrustOrderDO.getId());
|
||||
//已驳回 → 编辑后回到待审核;待审核 → 保持不变(置null,updateById跳过该列)
|
||||
outEntrustOrderDO.setOrderStatus(OutEntrustOrderConstant.ORDER_STATUS_REJECTED.equals(orderPO.getOrderStatus())
|
||||
? OutEntrustOrderConstant.ORDER_STATUS_PENDING_AUDIT : null);
|
||||
outEntrustOrderDO.setEntrustNumber(orderPO.getEntrustNumber());
|
||||
outEntrustOrderService.update(outEntrustOrderDO);
|
||||
//明细全量替换:逻辑删除旧明细后重新保存
|
||||
outEntrustOrderDetailService.deleteByEntrustNumber(outEntrustOrderDO.getEntrustNumber());
|
||||
outEntrustOrderDetailService.batchInsert(outEntrustOrderDO.getEntrustNumber(), buildDetailList(outEntrustOrderDO));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除出仓委托单(仅待审核/已驳回且未下发可删除)
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean delete(Long[] ids) {
|
||||
List<OutEntrustOrderPO> orderList = outEntrustOrderService.getInfoByIds(java.util.Arrays.stream(ids).collect(Collectors.toList()));
|
||||
List<String> entrustNumbers = orderList.stream().map(OutEntrustOrderPO::getEntrustNumber).collect(Collectors.toList());
|
||||
outEntrustOrderService.delete(ids);
|
||||
outEntrustOrderDetailService.deleteByEntrustNumbers(entrustNumbers);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取出仓委托单详情(含明细)
|
||||
*/
|
||||
public OutEntrustOrderPO getInfo(Long id) {
|
||||
OutEntrustOrderPO outEntrustOrderPO = outEntrustOrderService.getInfo(id);
|
||||
List<OutEntrustOrderDetailPO> detailList = outEntrustOrderDetailService.queryByEntrustNumber(outEntrustOrderPO.getEntrustNumber());
|
||||
outEntrustOrderPO.setMaterialDetailList(detailList);
|
||||
return outEntrustOrderPO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量审核:待审核/已驳回 → 已审核(2)或已驳回(3)
|
||||
*/
|
||||
public Boolean audit(List<Long> ids, Integer targetStatus, Long auditBy, String auditByName, String auditRemark) {
|
||||
return outEntrustOrderService.audit(ids, targetStatus, auditBy, auditByName, auditRemark);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量下发:订单状态保持已审核,下发状态置为已下发(WMS侧单据由ApplicationService推送)
|
||||
*/
|
||||
public Boolean issue(List<Long> ids, Long issueBy, String issueByName) {
|
||||
return outEntrustOrderService.issue(ids, issueBy, issueByName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 完成:已审核(已下发) → 已入库(OMS人工推进)
|
||||
*/
|
||||
public Boolean finish(List<Long> ids, Long updateBy, String updateByName) {
|
||||
return outEntrustOrderService.finish(ids, updateBy, updateByName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据委托单号查询明细
|
||||
*/
|
||||
public List<OutEntrustOrderDetailPO> getDetailByEntrustNumber(String entrustNumber) {
|
||||
return outEntrustOrderDetailService.queryByEntrustNumber(entrustNumber);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据委托单号集合查询明细
|
||||
*/
|
||||
public List<OutEntrustOrderDetailPO> getDetailByEntrustNumbers(List<String> entrustNumbers) {
|
||||
return outEntrustOrderDetailService.queryByEntrustNumbers(entrustNumbers);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编号集合查询出仓委托单列表
|
||||
*/
|
||||
public List<OutEntrustOrderPO> queryByIds(List<Long> ids) {
|
||||
return outEntrustOrderService.getInfoByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 明细补充审计信息(取主单的创建/更新人)
|
||||
*/
|
||||
private List<OutEntrustOrderDetailDO> buildDetailList(OutEntrustOrderDO outEntrustOrderDO) {
|
||||
List<OutEntrustOrderDetailDO> detailDOList = outEntrustOrderDO.getMaterialDetailList();
|
||||
for (OutEntrustOrderDetailDO detailDO : detailDOList) {
|
||||
detailDO.setCreateBy(outEntrustOrderDO.getCreateBy());
|
||||
detailDO.setCreateByName(outEntrustOrderDO.getCreateByName());
|
||||
detailDO.setCreateTime(outEntrustOrderDO.getCreateTime());
|
||||
detailDO.setUpdateBy(outEntrustOrderDO.getUpdateBy());
|
||||
detailDO.setUpdateByName(outEntrustOrderDO.getUpdateByName());
|
||||
detailDO.setUpdateTime(outEntrustOrderDO.getUpdateTime());
|
||||
detailDO.setDelFlag(1);
|
||||
}
|
||||
return detailDOList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验委托单是否可编辑/删除:仅待审核/已驳回 且未下发
|
||||
*
|
||||
* @return 委托单信息(供调用方复用当前状态/委托单号)
|
||||
*/
|
||||
private OutEntrustOrderPO checkEditable(Long id) {
|
||||
OutEntrustOrderPO outEntrustOrderPO = outEntrustOrderService.getInfo(id);
|
||||
boolean editableStatus = OutEntrustOrderConstant.ORDER_STATUS_PENDING_AUDIT.equals(outEntrustOrderPO.getOrderStatus())
|
||||
|| OutEntrustOrderConstant.ORDER_STATUS_REJECTED.equals(outEntrustOrderPO.getOrderStatus());
|
||||
if (!editableStatus) {
|
||||
throw new ServiceException("已审核/进行中/已入库的委托单不允许修改");
|
||||
}
|
||||
if (!OutEntrustOrderConstant.ISSUE_STATUS_1.equals(outEntrustOrderPO.getIssueStatus())) {
|
||||
throw new ServiceException("已下发的委托单不允许修改");
|
||||
}
|
||||
return outEntrustOrderPO;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user