集成oms服务模块

This commit is contained in:
hjx
2026-01-19 15:20:20 +08:00
parent 1837337488
commit 56356839bf
163 changed files with 16893 additions and 0 deletions
@@ -0,0 +1,42 @@
package com.mhd.oms.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel(value = "订单公共类", description = "订单公共类")
public class OrderInfoPO implements Serializable {
@ApiModelProperty("订单号/商流订单号")
private String orderNo;
@ApiModelProperty("货主")
private String shipper;
@ApiModelProperty("业务订单类型")
private String orderType;
@ApiModelProperty("客户订单号")
private String customerOrders;
@ApiModelProperty("拦截状态;0未拦截1拦截成功2拦截失败")
private Integer tacklState;
@ApiModelProperty("作业任务类型名称")
private String jobTaskType;
@ApiModelProperty("货主ID")
private Long shipperId;
@ApiModelProperty("供应商ID")
private Long supplierId;
@ApiModelProperty("客户ID")
private Long customerId;
@ApiModelProperty("订单类型ID")
private Long orderTypeId;
@ApiModelProperty("入库单类型编码")
private String orderTypeCode;
}
@@ -0,0 +1,77 @@
package com.mhd.oms.domain.deliveryInfo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 发货信息对象 oms_delivery_info
*
* @author gen
* @date 2024-05-16
*/
@Data
@TableName(value = "oms_delivery_info")
public class DeliveryInfo extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("发货人")
@Excel(name = "发货人")
private String consigner;
@ApiModelProperty("发货人联系电话")
@Excel(name = "发货人联系电话")
private String consignerPhone;
@ApiModelProperty("发货人所在区域编码")
@Excel(name = "发货人所在区域编码")
private String consignerAreaCode;
@ApiModelProperty("发货人所在区域")
@Excel(name = "发货人所在区域")
private String consignerArea;
@ApiModelProperty("发货人详细地址")
@Excel(name = "发货人详细地址")
private String consignerAddress;
@ApiModelProperty("发货地址经纬度")
@Excel(name = "发货地址经纬度")
private String saddressLatLon;
@ApiModelProperty("预计发货时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date estimatedDeliveryTime;
}
@@ -0,0 +1,48 @@
package com.mhd.oms.domain.deliveryInfo.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.deliveryInfo.entity.DeliveryInfo;
import com.mhd.oms.domain.deliveryInfo.repository.po.DeliveryInfoPO;
import com.mhd.oms.domain.deliveryInfo.repository.todo.DeliveryInfoDO;
import java.util.List;
/**
* 发货信息Service接口
*
* @author gen
* @date 2024-05-16
*/
public interface IDeliveryInfoService extends IService<DeliveryInfo>
{
/**
* 分页查询发货信息列表
*/
public List<DeliveryInfoPO> queryList(DeliveryInfoDO deliveryInfoDO);
/**
* 新增发货信息
*/
public Boolean insert(DeliveryInfoDO deliveryInfoDO);
/**
* 修改发货信息
*/
public Boolean update(DeliveryInfoDO deliveryInfoDO);
/**
* 批量删除发货信息
*/
public Boolean delete(Long[] ids);
/**
* 查询发货信息
*/
public DeliveryInfoPO getInfo(Long id);
/**
* 批量新增
*/
Boolean batchInsert(List<DeliveryInfoDO> deliveryInfoDOList);
}
@@ -0,0 +1,23 @@
package com.mhd.oms.domain.deliveryInfo.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.deliveryInfo.entity.DeliveryInfo;
import com.mhd.oms.domain.deliveryInfo.repository.po.DeliveryInfoPO;
import com.mhd.oms.domain.deliveryInfo.repository.todo.DeliveryInfoDO;
import java.util.List;
/**
* 发货信息Mapper接口
*
* @author gen
* @date 2024-05-16
*/
public interface DeliveryInfoMapper extends BaseMapper<DeliveryInfo>
{
/**
* 查询发货信息列表
*/
public List<DeliveryInfoPO> queryList(DeliveryInfoDO deliveryInfoDO);
}
@@ -0,0 +1,98 @@
package com.mhd.oms.domain.deliveryInfo.repository.persistence;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.oms.domain.deliveryInfo.entity.DeliveryInfo;
import com.mhd.oms.domain.deliveryInfo.repository.facade.IDeliveryInfoService;
import com.mhd.oms.domain.deliveryInfo.repository.mapper.DeliveryInfoMapper;
import com.mhd.oms.domain.deliveryInfo.repository.po.DeliveryInfoPO;
import com.mhd.oms.domain.deliveryInfo.repository.todo.DeliveryInfoDO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 发货信息Service业务层处理
*
* @author gen
* @date 2024-05-16
*/
@Service
public class DeliveryInfoImpl extends ServiceImpl<DeliveryInfoMapper, DeliveryInfo> implements IDeliveryInfoService {
@Autowired
private DeliveryInfoMapper deliveryInfoMapper;
/**
* 查询发货信息列表
*/
@Override
public List<DeliveryInfoPO> queryList(DeliveryInfoDO deliveryInfoDO)
{
return deliveryInfoMapper.queryList(deliveryInfoDO);
}
/**
* 新增发货信息
*/
@Override
public Boolean insert(DeliveryInfoDO deliveryInfoDO) {
DeliveryInfo deliveryInfo = new DeliveryInfo();
BeanUtils.copyProperties(deliveryInfoDO,deliveryInfo);
return this.save(deliveryInfo);
}
/**
* 修改发货信息
*/
@Override
public Boolean update(DeliveryInfoDO deliveryInfoDO) {
DeliveryInfo deliveryInfo = new DeliveryInfo();
BeanUtils.copyProperties(deliveryInfoDO,deliveryInfo);
return this.updateById(deliveryInfo);
}
/**
* 批量删除发货信息
*/
@Override
public Boolean delete(Long[] ids ) {
List<DeliveryInfo> list = new ArrayList<>();
for (Long id : ids) {
DeliveryInfo deliveryInfo = new DeliveryInfo();
deliveryInfo.setId(id);
deliveryInfo.setDelFlag(2);
list.add(deliveryInfo);
}
return this.updateBatchById(list);
}
/**
* 修改发货信息
*/
@Override
public DeliveryInfoPO getInfo(Long id) {
DeliveryInfo deliveryInfo = this.getById(id);
DeliveryInfoPO deliveryInfoPO = new DeliveryInfoPO();
BeanUtils.copyProperties(deliveryInfo,deliveryInfoPO);
return deliveryInfoPO;
}
/**
* 批量新增
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean batchInsert(List<DeliveryInfoDO> deliveryInfoDOList) {
List<DeliveryInfo> deliveryInfoList = deliveryInfoDOList.stream().map(deliveryInfoDO -> {
DeliveryInfo deliveryInfo = new DeliveryInfo();
BeanUtils.copyProperties(deliveryInfoDO, deliveryInfo);
return deliveryInfo;
}).collect(Collectors.toList());
return this.saveBatch(deliveryInfoList);
}
}
@@ -0,0 +1,75 @@
package com.mhd.oms.domain.deliveryInfo.repository.po;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
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.util.Date;
/**
* 发货信息对象 oms_delivery_info
*
* @author gen
* @date 2024-05-16
*/
@Data
@ApiModel(value = "发货信息对象", description = "发货信息响应对象")
public class DeliveryInfoPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("发货人")
@Excel(name = "发货人")
private String consigner;
@ApiModelProperty("发货人联系电话")
@Excel(name = "发货人联系电话")
private String consignerPhone;
@ApiModelProperty("发货人所在区域编码")
@Excel(name = "发货人所在区域编码")
private String consignerAreaCode;
@ApiModelProperty("发货人所在区域")
@Excel(name = "发货人所在区域")
private String consignerArea;
@ApiModelProperty("发货人详细地址")
@Excel(name = "发货人详细地址")
private String consignerAddress;
@ApiModelProperty("发货地址经纬度")
@Excel(name = "发货地址经纬度")
private String saddressLatLon;
@ApiModelProperty("预计发货时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date estimatedDeliveryTime;
}
@@ -0,0 +1,78 @@
package com.mhd.oms.domain.deliveryInfo.repository.todo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
/**
* 发货信息对象 oms_delivery_info
*
* @author gen
* @date 2024-05-16
*/
@Data
public class DeliveryInfoDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("发货人")
@Excel(name = "发货人")
private String consigner;
@ApiModelProperty("发货人联系电话")
@Excel(name = "发货人联系电话")
private String consignerPhone;
@ApiModelProperty("发货人所在区域编码")
@Excel(name = "发货人所在区域编码")
private String consignerAreaCode;
@ApiModelProperty("发货人所在区域")
@Excel(name = "发货人所在区域")
private String consignerArea;
@ApiModelProperty("发货人详细地址")
@Excel(name = "发货人详细地址")
private String consignerAddress;
@ApiModelProperty("发货地址经纬度")
@Excel(name = "发货地址经纬度")
private String saddressLatLon;
@ApiModelProperty("预计发货时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date estimatedDeliveryTime;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
}
@@ -0,0 +1,119 @@
package com.mhd.oms.domain.deliveryInfo.service;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.deliveryInfo.repository.facade.IDeliveryInfoService;
import com.mhd.oms.domain.deliveryInfo.repository.po.DeliveryInfoPO;
import com.mhd.oms.domain.deliveryInfo.repository.todo.DeliveryInfoDO;
import com.mhd.oms.domain.purchaseOrder.entity.PurchaseOrder;
import com.mhd.oms.domain.salesOrder.entity.SalesOrder;
import com.mhd.oms.interfaces.dto.purchaseOrder.PurchaseOrderExcelDTO;
import com.mhd.oms.interfaces.dto.salesOrder.SalesOrderExcelDTO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 发货信息
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class DeliveryInfoDomainService {
@Autowired
private IDeliveryInfoService deliveryInfoService;
/**
* 分页查询发货信息列表
*/
public List<DeliveryInfoPO> queryList(DeliveryInfoDO deliveryInfoDO) {
return deliveryInfoService.queryList(deliveryInfoDO);
}
/**
* 新增发货信息
*/
public Boolean insert(DeliveryInfoDO deliveryInfoDO) {
return deliveryInfoService.insert(deliveryInfoDO);
}
/**
* 修改发货信息
*/
public Boolean update(DeliveryInfoDO deliveryInfoDO) {
return deliveryInfoService.update(deliveryInfoDO);
}
/**
* 批量删除发货信息
*/
public Boolean delete(Long[] ids) {
return deliveryInfoService.delete(ids);
}
/**
* 获取发货信息详细信息
*/
public DeliveryInfoPO getInfo(Long id)
{
return deliveryInfoService.getInfo(id);
}
/**
* 批量新增
*/
public Boolean batchInsert(List<DeliveryInfoDO> deliveryInfoDOList) {
return deliveryInfoService.batchInsert(deliveryInfoDOList);
}
/**
* 导入销售订单 - 为传入的发货列表添加一条发货信息
*
* @param deliveryInfoDOList - 添加数据的列表
* @param salesOrderExcelDTO -导入的数据
* @param salesOrder - 导入数据中的销售订单信息
*/
public void listAddFromImportSalesOrder(List<DeliveryInfoDO> deliveryInfoDOList, SalesOrderExcelDTO salesOrderExcelDTO, SalesOrder salesOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
DeliveryInfoDO deliveryInfoDO = new DeliveryInfoDO();
BeanUtils.copyProperties(salesOrderExcelDTO, deliveryInfoDO, IgnoreNullUtil.getNullPropertyNames(salesOrderExcelDTO));
deliveryInfoDO.setOrderId(salesOrder.getId());
deliveryInfoDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
deliveryInfoDO.setCreateBy(loginUser.getUserPo().getUserId());
deliveryInfoDO.setCreateByName(loginUser.getUserPo().getUserName());
deliveryInfoDO.setCreateTime(new Date());
deliveryInfoDOList.add(deliveryInfoDO);
}
/**
* 导入采购订单 - 为传入的发货列表添加一条发货信息
*
* @param deliveryInfoDOList - 添加数据的列表
* @param purOrderExcelDTO -导入的数据
* @param purOrder - 导入的采购订单信息
*/
public void listAddFromImportPurOrder(List<DeliveryInfoDO> deliveryInfoDOList, PurchaseOrderExcelDTO purOrderExcelDTO, PurchaseOrder purOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
DeliveryInfoDO deliveryInfoDO = new DeliveryInfoDO();
BeanUtils.copyProperties(purOrderExcelDTO, deliveryInfoDO, IgnoreNullUtil.getNullPropertyNames(purOrderExcelDTO));
deliveryInfoDO.setOrderId(purOrder.getId());
deliveryInfoDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
deliveryInfoDO.setCreateBy(loginUser.getUserPo().getUserId());
deliveryInfoDO.setCreateByName(loginUser.getUserPo().getUserName());
deliveryInfoDO.setCreateTime(new Date());
deliveryInfoDOList.add(deliveryInfoDO);
}
}
@@ -0,0 +1,109 @@
package com.mhd.oms.domain.goods.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 商品信息对象 oms_goods
*
* @author gen
* @date 2024-05-16
*/
@Data
@TableName("oms_goods")
public class Goods extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("商品编码")
@Excel(name = "商品编码")
private String goodsNo;
@ApiModelProperty("商品名称")
@Excel(name = "商品名称")
private String goodsName;
@ApiModelProperty("包装规格")
@Excel(name = "包装规格")
private String packingSize;
@ApiModelProperty("辅助单位ID")
@Excel(name = "辅助单位ID")
private String supportUnitId;
@ApiModelProperty("辅助单位")
@Excel(name = "辅助单位")
private String supportUnit;
@ApiModelProperty("辅助单位数量")
@Excel(name = "辅助单位数量")
private Integer supportUnitQuantity;
@ApiModelProperty("物料单位EA")
@Excel(name = "物料单位EA")
private String materialUnitEa;
@ApiModelProperty("物料数量EA")
@Excel(name = "物料数量EA")
private Integer materialUnitEaQuantity;
@ApiModelProperty("单价")
@Excel(name = "单价")
private BigDecimal unitPrice;
@ApiModelProperty("含税单价")
@Excel(name = "含税单价")
private BigDecimal taxUnitPrice;
@ApiModelProperty("税率")
@Excel(name = "税率")
private BigDecimal taxRate;
@ApiModelProperty("税金")
@Excel(name = "税金")
private BigDecimal taxes;
@ApiModelProperty("金额")
@Excel(name = "金额")
private BigDecimal amount;
@ApiModelProperty("含税金额")
@Excel(name = "含税金额")
private BigDecimal taxAmount;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty("物料基础信息id")
@Excel(name = "物料基础信息id")
private Long materialBaseInfoId;
}
@@ -0,0 +1,56 @@
package com.mhd.oms.domain.goods.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.goods.entity.Goods;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import java.util.List;
/**
* 商品信息Service接口
*
* @author gen
* @date 2024-05-16
*/
public interface IGoodsService extends IService<Goods>
{
/**
* 分页查询商品信息列表
*/
public List<GoodsPO> queryList(GoodsDO goodsDO);
/**
* 新增商品信息
*/
public Boolean insert(GoodsDO goodsDO);
/**
* 修改商品信息
*/
public Boolean update(GoodsDO goodsDO);
/**
* 批量删除商品信息
*/
public Boolean delete(Long[] ids);
/**
* 查询商品信息
*/
public GoodsPO getInfo(Long id);
/**
* 根据订单ID删除物料信息
* @param orderId
* @return
*/
public Boolean deleteByOrderId(Long orderId);
/**
* 批量新增
* @param goodsDOList
*/
public Boolean batchInsert(List<GoodsDO> goodsDOList);
}
@@ -0,0 +1,23 @@
package com.mhd.oms.domain.goods.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.goods.entity.Goods;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import java.util.List;
/**
* 商品信息Mapper接口
*
* @author gen
* @date 2024-05-16
*/
public interface GoodsMapper extends BaseMapper<Goods>
{
/**
* 查询商品信息列表
*/
public List<GoodsPO> queryList(GoodsDO goodsDO);
}
@@ -0,0 +1,110 @@
package com.mhd.oms.domain.goods.repository.persistence;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.oms.domain.goods.entity.Goods;
import com.mhd.oms.domain.goods.repository.facade.IGoodsService;
import com.mhd.oms.domain.goods.repository.mapper.GoodsMapper;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 商品信息Service业务层处理
*
* @author gen
* @date 2024-05-16
*/
@Service
public class GoodsImpl extends ServiceImpl<GoodsMapper, Goods> implements IGoodsService {
@Autowired
private GoodsMapper goodsMapper;
/**
* 查询商品信息列表
*/
@Override
public List<GoodsPO> queryList(GoodsDO goodsDO)
{
return goodsMapper.queryList(goodsDO);
}
/**
* 新增商品信息
*/
@Override
public Boolean insert(GoodsDO goodsDO) {
Goods goods = new Goods();
BeanUtils.copyProperties(goodsDO,goods);
return this.save(goods);
}
/**
* 修改商品信息
*/
@Override
public Boolean update(GoodsDO goodsDO) {
Goods goods = new Goods();
BeanUtils.copyProperties(goodsDO,goods);
return this.updateById(goods);
}
/**
* 批量删除商品信息
*/
@Override
public Boolean delete(Long[] ids ) {
List<Goods> list = new ArrayList<>();
for (Long id : ids) {
Goods goods = new Goods();
goods.setId(id);
goods.setDelFlag(2);
list.add(goods);
}
return this.updateBatchById(list);
}
/**
* 修改商品信息
*/
@Override
public GoodsPO getInfo(Long id) {
Goods goods = this.getById(id);
GoodsPO goodsPO = new GoodsPO();
BeanUtils.copyProperties(goods,goodsPO);
return goodsPO;
}
/**
* 根据订单ID删除物料信息
* @param orderId
* @return
*/
@Override
public Boolean deleteByOrderId(Long orderId) {
LambdaUpdateWrapper<Goods> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(Goods::getOrderId, orderId).set(Goods::getDelFlag, 2);
return this.update(null, lambdaUpdateWrapper);
}
/**
* 批量新增
* @param goodsDOList
*/
@Override
public Boolean batchInsert(List<GoodsDO> goodsDOList) {
List<Goods> goodsList = goodsDOList.stream().map(goodsDO -> {
Goods goods = new Goods();
BeanUtils.copyProperties(goodsDO, goods);
return goods;
}).collect(Collectors.toList());
return this.saveBatch(goodsList);
}
}
@@ -0,0 +1,115 @@
package com.mhd.oms.domain.goods.repository.po;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 商品信息对象 oms_goods
*
* @author gen
* @date 2024-05-16
*/
@Data
@ApiModel(value = "商品信息对象", description = "商品信息响应对象")
public class GoodsPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("商品编码")
@Excel(name = "商品编码")
private String goodsNo;
@ApiModelProperty("商品名称")
@Excel(name = "商品名称")
private String goodsName;
@ApiModelProperty("包装规格")
@Excel(name = "包装规格")
private String packingSize;
@ApiModelProperty("辅助单位ID")
@Excel(name = "辅助单位ID")
private String supportUnitId;
@ApiModelProperty("辅助单位")
@Excel(name = "辅助单位")
private String supportUnit;
@ApiModelProperty("辅助单位数量")
@Excel(name = "辅助单位数量")
private Integer supportUnitQuantity;
@ApiModelProperty("物料单位EA")
@Excel(name = "物料单位EA")
private String materialUnitEa;
@ApiModelProperty("物料数量EA")
@Excel(name = "物料数量EA")
private Integer materialUnitEaQuantity;
@ApiModelProperty("单价")
@Excel(name = "单价")
private BigDecimal unitPrice;
@ApiModelProperty("含税单价")
@Excel(name = "含税单价")
private BigDecimal taxUnitPrice;
@ApiModelProperty("税率")
@Excel(name = "税率")
private BigDecimal taxRate;
@ApiModelProperty("税金")
@Excel(name = "税金")
private BigDecimal taxes;
@ApiModelProperty("金额")
@Excel(name = "金额")
private BigDecimal amount;
@ApiModelProperty("含税金额")
@Excel(name = "含税金额")
private BigDecimal taxAmount;
@ApiModelProperty("完成数量")
private Integer completeNum;
@ApiModelProperty("库存可用数量")
private Long stockUsableNum;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty("物料基础信息id")
@Excel(name = "物料基础信息id")
private Long materialBaseInfoId;
}
@@ -0,0 +1,124 @@
package com.mhd.oms.domain.goods.repository.todo;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 商品信息对象 oms_goods
*
* @author gen
* @date 2024-05-16
*/
@Data
public class GoodsDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("ID列表")
private List<Long> idList;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("商品编码")
@Excel(name = "商品编码")
private String goodsNo;
@ApiModelProperty("商品名称")
@Excel(name = "商品名称")
private String goodsName;
@ApiModelProperty("包装规格")
@Excel(name = "包装规格")
private String packingSize;
@ApiModelProperty("辅助单位ID")
@Excel(name = "辅助单位ID")
private String supportUnitId;
@ApiModelProperty("辅助单位")
@Excel(name = "辅助单位")
private String supportUnit;
@ApiModelProperty("辅助单位数量")
@Excel(name = "辅助单位数量")
private Integer supportUnitQuantity = 0;
@ApiModelProperty("物料单位EA")
@Excel(name = "物料单位EA")
private String materialUnitEa;
@ApiModelProperty("物料数量EA")
@Excel(name = "物料数量EA")
private Integer materialUnitEaQuantity = 0;
@ApiModelProperty("单价")
@Excel(name = "单价")
private BigDecimal unitPrice;
@ApiModelProperty("含税单价")
@Excel(name = "含税单价")
private BigDecimal taxUnitPrice;
@ApiModelProperty("税率")
@Excel(name = "税率")
private BigDecimal taxRate;
@ApiModelProperty("税金")
@Excel(name = "税金")
private BigDecimal taxes;
@ApiModelProperty("金额")
@Excel(name = "金额")
private BigDecimal amount;
@ApiModelProperty("含税金额")
@Excel(name = "含税金额")
private BigDecimal taxAmount;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
@ApiModelProperty("供应链订单ID")
private Long scmId;
@ApiModelProperty("物料基础信息id")
@Excel(name = "物料基础信息id")
private Long materialBaseInfoId;
public GoodsDO(){
}
public GoodsDO(List<Long> idList){
this.idList = idList;
}
}
@@ -0,0 +1,131 @@
package com.mhd.oms.domain.goods.service;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.goods.repository.facade.IGoodsService;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import com.mhd.oms.domain.purchaseOrder.entity.PurchaseOrder;
import com.mhd.oms.domain.salesOrder.entity.SalesOrder;
import com.mhd.oms.interfaces.dto.purchaseOrder.PurchaseOrderExcelDTO;
import com.mhd.oms.interfaces.dto.salesOrder.SalesOrderExcelDTO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 商品信息
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class GoodsDomainService {
@Autowired
private IGoodsService goodsService;
/**
* 分页查询商品信息列表
*/
public List<GoodsPO> queryList(GoodsDO goodsDO) {
return goodsService.queryList(goodsDO);
}
/**
* 新增商品信息
*/
public Boolean insert(GoodsDO goodsDO) {
return goodsService.insert(goodsDO);
}
/**
* 修改商品信息
*/
public Boolean update(GoodsDO goodsDO) {
return goodsService.update(goodsDO);
}
/**
* 批量删除商品信息
*/
public Boolean delete(Long[] ids) {
return goodsService.delete(ids);
}
/**
* 获取商品信息详细信息
*/
public GoodsPO getInfo(Long id)
{
return goodsService.getInfo(id);
}
/**
* 根据订单ID删除物料信息
* @param orderId
* @return
*/
public Boolean deleteByOrderId(Long orderId) {
return goodsService.deleteByOrderId(orderId);
}
/**
* 批量新增
* @param goodsDOList
*/
public Boolean batchInsert(List<GoodsDO> goodsDOList) {
return goodsService.batchInsert(goodsDOList);
}
/**
* 导入销售订单 - 为传入的销售明细列表添加一条明细
*
* @param goodsDOList - 添加数据的列表
* @param salesOrderExcelDTO -导入的数据
* @param salesOrder - 导入数据中的销售订单信息
*/
public void listAddFromImportSalesOrder(List<GoodsDO> goodsDOList, SalesOrderExcelDTO salesOrderExcelDTO, SalesOrder salesOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
GoodsDO goodsDO = new GoodsDO();
BeanUtils.copyProperties(salesOrderExcelDTO, goodsDO, IgnoreNullUtil.getNullPropertyNames(salesOrderExcelDTO));
goodsDO.setOrderId(salesOrder.getId());
goodsDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
goodsDO.setCreateBy(loginUser.getUserPo().getUserId());
goodsDO.setCreateByName(loginUser.getUserPo().getUserName());
goodsDO.setCreateTime(new Date());
goodsDOList.add(goodsDO);
}
/**
* 导入采购订单 - 为传入的销售明细列表添加一条明细
*
* @param goodsDOList - 添加数据的列表
* @param purOrderExcelDTO -导入的数据
* @param purOrder - 导入的采购订单信息
*/
public void listAddFromImportPurOrder(List<GoodsDO> goodsDOList, PurchaseOrderExcelDTO purOrderExcelDTO, PurchaseOrder purOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
GoodsDO goodsDO = new GoodsDO();
BeanUtils.copyProperties(purOrderExcelDTO, goodsDO, IgnoreNullUtil.getNullPropertyNames(purOrderExcelDTO));
goodsDO.setOrderId(purOrder.getId());
goodsDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
goodsDO.setCreateBy(loginUser.getUserPo().getUserId());
goodsDO.setCreateByName(loginUser.getUserPo().getUserName());
goodsDO.setCreateTime(new Date());
goodsDOList.add(goodsDO);
}
}
@@ -0,0 +1,73 @@
package com.mhd.oms.domain.interceptOrder.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 拦截订单对象 oms_intercept_order
*
* @author gen
* @date 2024-05-30
*/
@Data
@TableName("oms_intercept_order")
public class InterceptOrder extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单ID")
@Excel(name = "订单ID")
private Long orderId;
@ApiModelProperty("拦截状态:0-无拦截、1-拦截成功、2-拦截失败")
@Excel(name = "拦截状态:0-无拦截、1-拦截成功、2-拦截失败")
private Integer interceptState;
@ApiModelProperty("拦截人ID")
@Excel(name = "拦截人ID")
private Long interceptBy;
@ApiModelProperty("拦截人名称")
@Excel(name = "拦截人名称")
private String interceptByName;
@ApiModelProperty("拦截时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "拦截时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date interceptTime;
@ApiModelProperty("失败原因")
@Excel(name = "失败原因")
private String failCause;
@ApiModelProperty("作业任务号")
@Excel(name = "作业任务号")
private String taskNos;
}
@@ -0,0 +1,43 @@
package com.mhd.oms.domain.interceptOrder.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.interceptOrder.entity.InterceptOrder;
import com.mhd.oms.domain.interceptOrder.repository.po.InterceptOrderPO;
import com.mhd.oms.domain.interceptOrder.repository.todo.InterceptOrderDO;
import java.util.List;
/**
* 拦截订单Service接口
*
* @author gen
* @date 2024-05-30
*/
public interface IInterceptOrderService extends IService<InterceptOrder>
{
/**
* 分页查询拦截订单列表
*/
public List<InterceptOrderPO> queryList(InterceptOrderDO interceptOrderDO);
/**
* 新增拦截订单
*/
public Boolean insert(InterceptOrderDO interceptOrderDO);
/**
* 修改拦截订单
*/
public Boolean update(InterceptOrderDO interceptOrderDO);
/**
* 批量删除拦截订单
*/
public Boolean delete(Long[] ids);
/**
* 查询拦截订单
*/
public InterceptOrderPO getInfo(Long id);
}
@@ -0,0 +1,23 @@
package com.mhd.oms.domain.interceptOrder.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.interceptOrder.entity.InterceptOrder;
import com.mhd.oms.domain.interceptOrder.repository.po.InterceptOrderPO;
import com.mhd.oms.domain.interceptOrder.repository.todo.InterceptOrderDO;
import java.util.List;
/**
* 拦截订单Mapper接口
*
* @author gen
* @date 2024-05-30
*/
public interface InterceptOrderMapper extends BaseMapper<InterceptOrder>
{
/**
* 查询拦截订单列表
*/
public List<InterceptOrderPO> queryList(InterceptOrderDO interceptOrderDO);
}
@@ -0,0 +1,98 @@
package com.mhd.oms.domain.interceptOrder.repository.persistence;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.interceptOrder.entity.InterceptOrder;
import com.mhd.oms.domain.interceptOrder.repository.facade.IInterceptOrderService;
import com.mhd.oms.domain.interceptOrder.repository.mapper.InterceptOrderMapper;
import com.mhd.oms.domain.interceptOrder.repository.po.InterceptOrderPO;
import com.mhd.oms.domain.interceptOrder.repository.todo.InterceptOrderDO;
import com.mhd.oms.domain.scmOrder.repository.mapper.ScmOrderMapper;
import com.mhd.system.api.model.LoginUser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 拦截订单Service业务层处理
*
* @author gen
* @date 2024-05-30
*/
@Service
public class InterceptOrderImpl extends ServiceImpl<InterceptOrderMapper, InterceptOrder> implements IInterceptOrderService{
@Autowired
private InterceptOrderMapper interceptOrderMapper;
@Resource
private ScmOrderMapper scmOrderMapper;
/**
* 查询拦截订单列表
*/
@Override
public List<InterceptOrderPO> queryList(InterceptOrderDO interceptOrderDO)
{
List<InterceptOrderPO> interceptOrderPOS = interceptOrderMapper.queryList(interceptOrderDO);
for (InterceptOrderPO interceptOrderPO:interceptOrderPOS) {
String scmOrderNo = scmOrderMapper.selectScmOrderNoByOrderId(interceptOrderPO.getOrderId());
interceptOrderPO.setScmOrderNo(scmOrderNo);
}
return interceptOrderPOS;
}
/**
* 新增拦截订单
*/
@Override
public Boolean insert(InterceptOrderDO interceptOrderDO) {
InterceptOrder interceptOrder = new InterceptOrder();
BeanUtils.copyProperties(interceptOrderDO,interceptOrder);
return this.save(interceptOrder);
}
/**
* 修改拦截订单
*/
@Override
public Boolean update(InterceptOrderDO interceptOrderDO) {
InterceptOrder interceptOrder = new InterceptOrder();
BeanUtils.copyProperties(interceptOrderDO,interceptOrder);
return this.updateById(interceptOrder);
}
/**
* 批量删除拦截订单
*/
@Override
public Boolean delete(Long[] ids ) {
LoginUser loginUser = SecurityUtils.getLoginUser();
List<InterceptOrder> list = new ArrayList<>();
for (Long id : ids) {
InterceptOrder interceptOrder = new InterceptOrder();
interceptOrder.setId(id);
interceptOrder.setDelFlag(2);
interceptOrder.setUpdateBy(loginUser.getUserid());
interceptOrder.setUpdateByName(loginUser.getUsername());
interceptOrder.setUpdateTime(new Date());
list.add(interceptOrder);
}
return this.updateBatchById(list);
}
/**
* 修改拦截订单
*/
@Override
public InterceptOrderPO getInfo(Long id) {
InterceptOrder interceptOrder = this.getById(id);
InterceptOrderPO interceptOrderPO = new InterceptOrderPO();
BeanUtils.copyProperties(interceptOrder,interceptOrderPO);
return interceptOrderPO;
}
}
@@ -0,0 +1,95 @@
package com.mhd.oms.domain.interceptOrder.repository.po;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 拦截订单对象 oms_intercept_order
*
* @author gen
* @date 2024-05-30
*/
@Data
@ApiModel(value = "拦截订单对象", description = "拦截订单响应对象")
public class InterceptOrderPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单ID")
@Excel(name = "订单ID")
private Long orderId;
@ApiModelProperty("拦截状态:0-无拦截、1-拦截成功、2-拦截失败")
@Excel(name = "拦截状态:0-无拦截、1-拦截成功、2-拦截失败")
private Integer interceptState;
@ApiModelProperty("拦截人ID")
@Excel(name = "拦截人ID")
private String interceptBy;
@ApiModelProperty("拦截人名称")
@Excel(name = "拦截人名称")
private String interceptByName;
@ApiModelProperty("拦截时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "拦截时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date interceptTime;
@ApiModelProperty("失败原因")
@Excel(name = "失败原因")
private String failCause;
@ApiModelProperty("作业任务号")
@Excel(name = "作业任务号")
private String taskNos;
@ApiModelProperty("客户订单号")
@Excel(name = "客户订单号")
private String customerOrders;
@ApiModelProperty("订单类型")
@Excel(name = "订单类型")
private String orderType;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
@ApiModelProperty("下发系统")
@Excel(name = "下发系统")
private String deliverySystem;
@ApiModelProperty("供应链订单号")
@Excel(name = "供应链订单号")
private String scmOrderNo;
}
@@ -0,0 +1,73 @@
package com.mhd.oms.domain.interceptOrder.repository.todo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 拦截订单对象 oms_intercept_order
*
* @author gen
* @date 2024-05-30
*/
@Data
public class InterceptOrderDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单ID")
@Excel(name = "订单ID")
private Long orderId;
@ApiModelProperty("拦截状态:0-无拦截、1-拦截成功、2-拦截失败")
@Excel(name = "拦截状态:0-无拦截、1-拦截成功、2-拦截失败")
private Integer interceptState;
@ApiModelProperty("拦截人ID")
@Excel(name = "拦截人ID")
private Long interceptBy;
@ApiModelProperty("拦截人名称")
@Excel(name = "拦截人名称")
private String interceptByName;
@ApiModelProperty("拦截时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "拦截时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date interceptTime;
@ApiModelProperty("失败原因")
@Excel(name = "失败原因")
private String failCause;
@ApiModelProperty("作业任务号")
@Excel(name = "作业任务号")
private String taskNos;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
}
@@ -0,0 +1,135 @@
package com.mhd.oms.domain.interceptOrder.service;
import cn.hutool.core.util.ArrayUtil;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.constant.OrderConstant;
import com.mhd.oms.domain.interceptOrder.repository.facade.IInterceptOrderService;
import com.mhd.oms.domain.interceptOrder.repository.po.InterceptOrderPO;
import com.mhd.oms.domain.interceptOrder.repository.todo.InterceptOrderDO;
import com.mhd.oms.domain.taskOrder.repository.po.TaskOrderPO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 拦截订单
*
* @author gen
* @date 2024-05-30
*/
@Service
@Slf4j
public class InterceptOrderDomainService {
@Autowired
private IInterceptOrderService interceptOrderService;
/**
* 分页查询拦截订单列表
*/
public List<InterceptOrderPO> queryList(InterceptOrderDO interceptOrderDO) {
return interceptOrderService.queryList(interceptOrderDO);
}
/**
* 新增拦截订单
*/
public Boolean insert(InterceptOrderDO interceptOrderDO) {
return interceptOrderService.insert(interceptOrderDO);
}
/**
* 修改拦截订单
*/
public Boolean update(InterceptOrderDO interceptOrderDO) {
return interceptOrderService.update(interceptOrderDO);
}
/**
* 批量删除拦截订单
*/
public Boolean delete(Long[] ids) {
return interceptOrderService.delete(ids);
}
/**
* 获取拦截订单详细信息
*/
public InterceptOrderPO getInfo(Long id)
{
return interceptOrderService.getInfo(id);
}
/**
* 保存订单拦截表
*
* 获取不可拦截订单列表(已下发、已完成、未下发已合并)
* 若不可拦截列表不为空,保存为拦截失败的记录,否则保存为拦截成功
*
* @param k - 订单ID
* @param v - 订单下全部任务列表
* @return -拦截订单DO
*/
public InterceptOrderDO saveInterceptOrder(Long k, List<TaskOrderPO> v) {
LoginUser loginUser = SecurityUtils.getLoginUser();
// =========================== 获取不可拦截的任务列表 ==============================
// 不可拦截任务列表1:任务状态不可拦截
List<TaskOrderPO> unableInterceptTask1 = v.stream()
.filter(x -> ArrayUtil.contains(OrderConstant.TASK_STATUS_GROUP_UNABLE_INTERCEPT, x.getTaskStatus()))
.collect(Collectors.toList());
// 不可拦截任务列表2:任务未下发但已合并
List<TaskOrderPO> unableInterceptTask2 = v.stream()
.filter(x -> OrderConstant.TASK_STATUS_0.equals(x.getTaskStatus()) && 1 == x.getMergeState())
.collect(Collectors.toList());
// 任务单号字符串
String taskNos = v.stream().map(TaskOrderPO::getTaskNo)
.map(Object::toString)
.collect(Collectors.joining(","));
// =========================== 拦截表数据固定参数组装 ============================
InterceptOrderDO interceptOrderDO = new InterceptOrderDO();
interceptOrderDO.setCreateBy(loginUser.getUserid());
interceptOrderDO.setCreateByName(loginUser.getUsername());
interceptOrderDO.setCreateTime(new Date());
interceptOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
interceptOrderDO.setOrderId(k);
interceptOrderDO.setInterceptState(OrderConstant.INTERCEPT_STATUS_0);
interceptOrderDO.setInterceptBy(loginUser.getUserid());
interceptOrderDO.setInterceptByName(loginUser.getUsername());
interceptOrderDO.setInterceptTime(new Date());
interceptOrderDO.setTaskNos(taskNos);
// ========================== 拦截表数据特殊参数处理:拦截状态、失败原因 ==========================
// 如果存在不可拦截任务,保存拦截失败记录
if(unableInterceptTask1.size() > 0){
interceptOrderDO.setInterceptState(OrderConstant.INTERCEPT_STATUS_2);
List<String> unableInterceptTaskNos = unableInterceptTask1.stream().map(TaskOrderPO::getTaskNo)
.map(Object::toString)
.collect(Collectors.toList());
interceptOrderDO.setFailCause(unableInterceptTaskNos + "作业任务状态已下发或已完成");
}
else if(unableInterceptTask2.size() > 0){
interceptOrderDO.setInterceptState(OrderConstant.INTERCEPT_STATUS_2);
List<String> unableInterceptTaskNos = unableInterceptTask2.stream().map(TaskOrderPO::getTaskNo)
.map(Object::toString)
.collect(Collectors.toList());
interceptOrderDO.setFailCause(unableInterceptTaskNos + "作业任务已合并");
}
// 不存在,保存拦截成功记录
else{
interceptOrderDO.setInterceptState(OrderConstant.INTERCEPT_STATUS_1);
}
interceptOrderService.insert(interceptOrderDO);
return interceptOrderDO;
}
}
@@ -0,0 +1,83 @@
package com.mhd.oms.domain.logistics.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 物流信息对象 oms_logistics
*
* @author gen
* @date 2024-05-16
*/
@Data
@TableName(value = "oms_logistics")
public class Logistics extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("运输方式ID")
@Excel(name = "运输方式ID")
private String shippingTypeId;
@ApiModelProperty("运输方式")
@Excel(name = "运输方式")
private String shippingType;
@ApiModelProperty("承运商ID")
@Excel(name = "承运商ID")
private Long carrierId;
@ApiModelProperty("承运商")
@Excel(name = "承运商")
private String carrier;
@ApiModelProperty("物流单号")
@Excel(name = "物流单号")
private String trackingNum;
@ApiModelProperty("运费金额")
@Excel(name = "运费金额")
private BigDecimal freightAmount;
@ApiModelProperty("车牌号")
@Excel(name = "车牌号")
private String plateNum;
@ApiModelProperty("司机")
@Excel(name = "司机")
private String driverName;
@ApiModelProperty("联系电话")
@Excel(name = "联系电话")
private String driverPhone;
}
@@ -0,0 +1,48 @@
package com.mhd.oms.domain.logistics.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.logistics.entity.Logistics;
import com.mhd.oms.domain.logistics.repository.po.LogisticsPO;
import com.mhd.oms.domain.logistics.repository.todo.LogisticsDO;
import java.util.List;
/**
* 物流信息Service接口
*
* @author gen
* @date 2024-05-16
*/
public interface ILogisticsService extends IService<Logistics>
{
/**
* 分页查询物流信息列表
*/
public List<LogisticsPO> queryList(LogisticsDO logisticsDO);
/**
* 新增物流信息
*/
public Boolean insert(LogisticsDO logisticsDO);
/**
* 修改物流信息
*/
public Boolean update(LogisticsDO logisticsDO);
/**
* 批量删除物流信息
*/
public Boolean delete(Long[] ids);
/**
* 查询物流信息
*/
public LogisticsPO getInfo(Long id);
/**
* 批量新增
*/
Boolean batchInsert(List<LogisticsDO> logisticsDOList);
}
@@ -0,0 +1,23 @@
package com.mhd.oms.domain.logistics.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.logistics.entity.Logistics;
import com.mhd.oms.domain.logistics.repository.po.LogisticsPO;
import com.mhd.oms.domain.logistics.repository.todo.LogisticsDO;
import java.util.List;
/**
* 物流信息Mapper接口
*
* @author gen
* @date 2024-05-16
*/
public interface LogisticsMapper extends BaseMapper<Logistics>
{
/**
* 查询物流信息列表
*/
public List<LogisticsPO> queryList(LogisticsDO logisticsDO);
}
@@ -0,0 +1,98 @@
package com.mhd.oms.domain.logistics.repository.persistence;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.oms.domain.logistics.entity.Logistics;
import com.mhd.oms.domain.logistics.repository.facade.ILogisticsService;
import com.mhd.oms.domain.logistics.repository.mapper.LogisticsMapper;
import com.mhd.oms.domain.logistics.repository.po.LogisticsPO;
import com.mhd.oms.domain.logistics.repository.todo.LogisticsDO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 物流信息Service业务层处理
*
* @author gen
* @date 2024-05-16
*/
@Service
public class LogisticsImpl extends ServiceImpl<LogisticsMapper, Logistics> implements ILogisticsService {
@Autowired
private LogisticsMapper logisticsMapper;
/**
* 查询物流信息列表
*/
@Override
public List<LogisticsPO> queryList(LogisticsDO logisticsDO)
{
return logisticsMapper.queryList(logisticsDO);
}
/**
* 新增物流信息
*/
@Override
public Boolean insert(LogisticsDO logisticsDO) {
Logistics logistics = new Logistics();
BeanUtils.copyProperties(logisticsDO,logistics);
return this.save(logistics);
}
/**
* 修改物流信息
*/
@Override
public Boolean update(LogisticsDO logisticsDO) {
Logistics logistics = new Logistics();
BeanUtils.copyProperties(logisticsDO,logistics);
return this.updateById(logistics);
}
/**
* 批量删除物流信息
*/
@Override
public Boolean delete(Long[] ids ) {
List<Logistics> list = new ArrayList<>();
for (Long id : ids) {
Logistics logistics = new Logistics();
logistics.setId(id);
logistics.setDelFlag(2);
list.add(logistics);
}
return this.updateBatchById(list);
}
/**
* 修改物流信息
*/
@Override
public LogisticsPO getInfo(Long id) {
Logistics logistics = this.getById(id);
LogisticsPO logisticsPO = new LogisticsPO();
BeanUtils.copyProperties(logistics,logisticsPO);
return logisticsPO;
}
/**
* 批量新增
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean batchInsert(List<LogisticsDO> logisticsDOList) {
List<Logistics> logisticsList = logisticsDOList.stream().map(logisticsDO -> {
Logistics logistics = new Logistics();
BeanUtils.copyProperties(logisticsDO, logistics);
return logistics;
}).collect(Collectors.toList());
return this.saveBatch(logisticsList);
}
}
@@ -0,0 +1,81 @@
package com.mhd.oms.domain.logistics.repository.po;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 物流信息对象 oms_logistics
*
* @author gen
* @date 2024-05-16
*/
@Data
@ApiModel(value = "物流信息对象", description = "物流信息响应对象")
public class LogisticsPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("运输方式ID")
@Excel(name = "运输方式ID")
private String shippingTypeId;
@ApiModelProperty("运输方式")
@Excel(name = "运输方式")
private String shippingType;
@ApiModelProperty("承运商ID")
@Excel(name = "承运商ID")
private Long carrierId;
@ApiModelProperty("承运商")
@Excel(name = "承运商")
private String carrier;
@ApiModelProperty("物流单号")
@Excel(name = "物流单号")
private String trackingNum;
@ApiModelProperty("运费金额")
@Excel(name = "运费金额")
private BigDecimal freightAmount;
@ApiModelProperty("车牌号")
@Excel(name = "车牌号")
private String plateNum;
@ApiModelProperty("司机")
@Excel(name = "司机")
private String driverName;
@ApiModelProperty("联系电话")
@Excel(name = "联系电话")
private String driverPhone;
}
@@ -0,0 +1,83 @@
package com.mhd.oms.domain.logistics.repository.todo;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 物流信息对象 oms_logistics
*
* @author gen
* @date 2024-05-16
*/
@Data
public class LogisticsDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("运输方式ID")
@Excel(name = "运输方式ID")
private String shippingTypeId;
@ApiModelProperty("运输方式")
@Excel(name = "运输方式")
private String shippingType;
@ApiModelProperty("承运商ID")
@Excel(name = "承运商ID")
private Long carrierId;
@ApiModelProperty("承运商")
@Excel(name = "承运商")
private String carrier;
@ApiModelProperty("物流单号")
@Excel(name = "物流单号")
private String trackingNum;
@ApiModelProperty("运费金额")
@Excel(name = "运费金额")
private BigDecimal freightAmount;
@ApiModelProperty("车牌号")
@Excel(name = "车牌号")
private String plateNum;
@ApiModelProperty("司机")
@Excel(name = "司机")
private String driverName;
@ApiModelProperty("联系电话")
@Excel(name = "联系电话")
private String driverPhone;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
}
@@ -0,0 +1,119 @@
package com.mhd.oms.domain.logistics.service;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.logistics.repository.facade.ILogisticsService;
import com.mhd.oms.domain.logistics.repository.po.LogisticsPO;
import com.mhd.oms.domain.logistics.repository.todo.LogisticsDO;
import com.mhd.oms.domain.purchaseOrder.entity.PurchaseOrder;
import com.mhd.oms.domain.salesOrder.entity.SalesOrder;
import com.mhd.oms.interfaces.dto.purchaseOrder.PurchaseOrderExcelDTO;
import com.mhd.oms.interfaces.dto.salesOrder.SalesOrderExcelDTO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 物流信息
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class LogisticsDomainService {
@Autowired
private ILogisticsService logisticsService;
/**
* 分页查询物流信息列表
*/
public List<LogisticsPO> queryList(LogisticsDO logisticsDO) {
return logisticsService.queryList(logisticsDO);
}
/**
* 新增物流信息
*/
public Boolean insert(LogisticsDO logisticsDO) {
return logisticsService.insert(logisticsDO);
}
/**
* 修改物流信息
*/
public Boolean update(LogisticsDO logisticsDO) {
return logisticsService.update(logisticsDO);
}
/**
* 批量删除物流信息
*/
public Boolean delete(Long[] ids) {
return logisticsService.delete(ids);
}
/**
* 获取物流信息详细信息
*/
public LogisticsPO getInfo(Long id)
{
return logisticsService.getInfo(id);
}
/**
* 批量新增
*/
public Boolean batchInsert(List<LogisticsDO> logisticsDOList) {
return logisticsService.batchInsert(logisticsDOList);
}
/**
* 导入销售订单 - 为传入的物流列表添加一条物流信息
*
* @param logisticsDOList - 添加数据的列表
* @param salesOrderExcelDTO -导入的数据
* @param salesOrder - 导入数据中的销售订单信息
*/
public void listAddFromImportSalesOrder(List<LogisticsDO> logisticsDOList, SalesOrderExcelDTO salesOrderExcelDTO, SalesOrder salesOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
LogisticsDO logisticsDO = new LogisticsDO();
BeanUtils.copyProperties(salesOrderExcelDTO, logisticsDO, IgnoreNullUtil.getNullPropertyNames(salesOrderExcelDTO));
logisticsDO.setOrderId(salesOrder.getId());
logisticsDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
logisticsDO.setCreateBy(loginUser.getUserPo().getUserId());
logisticsDO.setCreateByName(loginUser.getUserPo().getUserName());
logisticsDO.setCreateTime(new Date());
logisticsDOList.add(logisticsDO);
}
/**
* 导入采购订单 - 为传入的物流列表添加一条物流信息
*
* @param logisticsDOList - 添加数据的列表
* @param purOrderExcelDTO -导入的数据
* @param purOrder - 导入的采购订单信息
*/
public void listAddFromImportPurOrder(List<LogisticsDO> logisticsDOList, PurchaseOrderExcelDTO purOrderExcelDTO, PurchaseOrder purOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
LogisticsDO logisticsDO = new LogisticsDO();
BeanUtils.copyProperties(purOrderExcelDTO, logisticsDO, IgnoreNullUtil.getNullPropertyNames(purOrderExcelDTO));
logisticsDO.setOrderId(purOrder.getId());
logisticsDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
logisticsDO.setCreateBy(loginUser.getUserPo().getUserId());
logisticsDO.setCreateByName(loginUser.getUserPo().getUserName());
logisticsDO.setCreateTime(new Date());
logisticsDOList.add(logisticsDO);
}
}
@@ -0,0 +1,73 @@
package com.mhd.oms.domain.orderType.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 订单类型关系对象 oms_order_type
*
* @author gen
* @date 2024-05-15
*/
@Data
@TableName("oms_order_type")
public class OrderType extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("业务订单类型ID")
@Excel(name = "业务订单类型ID")
private String businessOrderTypeId;
@ApiModelProperty("业务订单类型")
@Excel(name = "业务订单类型")
private String businessOrderType;
@ApiModelProperty("作业任务类型ID")
@Excel(name = "作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
@ApiModelProperty("下发系统ID")
@Excel(name = "下发系统ID")
private String deliverySystemId;
@ApiModelProperty("下发系统")
@Excel(name = "下发系统")
private String deliverySystem;
@ApiModelProperty("下发订单类型ID")
@Excel(name = "下发订单类型ID")
private String orderTypeId;
@ApiModelProperty("下发订单类型")
@Excel(name = "下发订单类型")
private String orderType;
}
@@ -0,0 +1,46 @@
package com.mhd.oms.domain.orderType.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.orderType.entity.OrderType;
import com.mhd.oms.domain.orderType.repository.po.OrderTypeDictPO;
import com.mhd.oms.domain.orderType.repository.po.OrderTypePO;
import com.mhd.oms.domain.orderType.repository.todo.OrderTypeDO;
import java.util.List;
/**
* 订单类型关系Service接口
*
* @author gen
* @date 2024-05-15
*/
public interface IOrderTypeService extends IService<OrderType>
{
/**
* 分页查询订单类型关系列表
*/
public List<OrderTypePO> queryList(OrderTypeDO orderTypeDO);
/**
* 新增订单类型关系
*/
public Boolean insert(OrderTypeDO orderTypeDO);
/**
* 修改订单类型关系
*/
public Boolean update(OrderTypeDO orderTypeDO);
/**
* 批量删除订单类型关系
*/
public Boolean delete(Long[] ids);
/**
* 查询订单类型关系
*/
public OrderTypePO getInfo(Long id);
List<OrderTypeDictPO> listDict();
}
@@ -0,0 +1,25 @@
package com.mhd.oms.domain.orderType.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.orderType.entity.OrderType;
import com.mhd.oms.domain.orderType.repository.po.OrderTypeDictPO;
import com.mhd.oms.domain.orderType.repository.po.OrderTypePO;
import com.mhd.oms.domain.orderType.repository.todo.OrderTypeDO;
import java.util.List;
/**
* 订单类型关系Mapper接口
*
* @author gen
* @date 2024-05-15
*/
public interface OrderTypeMapper extends BaseMapper<OrderType>
{
/**
* 查询订单类型关系列表
*/
public List<OrderTypePO> queryList(OrderTypeDO orderTypeDO);
List<OrderTypeDictPO> listDict();
}
@@ -0,0 +1,91 @@
package com.mhd.oms.domain.orderType.repository.persistence;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.oms.domain.orderType.entity.OrderType;
import com.mhd.oms.domain.orderType.repository.facade.IOrderTypeService;
import com.mhd.oms.domain.orderType.repository.mapper.OrderTypeMapper;
import com.mhd.oms.domain.orderType.repository.po.OrderTypeDictPO;
import com.mhd.oms.domain.orderType.repository.po.OrderTypePO;
import com.mhd.oms.domain.orderType.repository.todo.OrderTypeDO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 订单类型关系Service业务层处理
*
* @author gen
* @date 2024-05-15
*/
@Service
public class OrderTypeImpl extends ServiceImpl<OrderTypeMapper, OrderType> implements IOrderTypeService{
@Autowired
private OrderTypeMapper orderTypeMapper;
/**
* 查询订单类型关系列表
*/
@Override
public List<OrderTypePO> queryList(OrderTypeDO orderTypeDO)
{
return orderTypeMapper.queryList(orderTypeDO);
}
/**
* 新增订单类型关系
*/
@Override
public Boolean insert(OrderTypeDO orderTypeDO) {
OrderType orderType = new OrderType();
BeanUtils.copyProperties(orderTypeDO,orderType);
return this.save(orderType);
}
/**
* 修改订单类型关系
*/
@Override
public Boolean update(OrderTypeDO orderTypeDO) {
OrderType orderType = new OrderType();
BeanUtils.copyProperties(orderTypeDO,orderType);
return this.updateById(orderType);
}
/**
* 批量删除订单类型关系
*/
@Override
public Boolean delete(Long[] ids ) {
List<OrderType> list = new ArrayList<>();
for (Long id : ids) {
OrderType orderType = new OrderType();
orderType.setId(id);
orderType.setDelFlag(2);
list.add(orderType);
}
return this.updateBatchById(list);
}
/**
* 修改订单类型关系
*/
@Override
public OrderTypePO getInfo(Long id) {
OrderType orderType = this.orderTypeMapper.selectOne(new LambdaQueryWrapper<OrderType>()
.eq(OrderType::getId,id).eq(OrderType::getDelFlag,1));
OrderTypePO orderTypePO = new OrderTypePO();
if (orderType != null) {
BeanUtils.copyProperties(orderType, orderTypePO);
}
return orderTypePO;
}
@Override
public List<OrderTypeDictPO> listDict() {
return orderTypeMapper.listDict();
}
}
@@ -0,0 +1,13 @@
package com.mhd.oms.domain.orderType.repository.po;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(value = "订单类型关系数据字典对象", description = "订单类型关系数据字典对象")
public class OrderTypeDictPO {
private Long id;
private String businessOrderType;
}
@@ -0,0 +1,71 @@
package com.mhd.oms.domain.orderType.repository.po;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 订单类型关系对象 oms_order_type
*
* @author gen
* @date 2024-05-15
*/
@Data
@ApiModel(value = "订单类型关系对象", description = "订单类型关系响应对象")
public class OrderTypePO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("业务订单类型ID")
@Excel(name = "业务订单类型ID")
private String businessOrderTypeId;
@ApiModelProperty("业务订单类型")
@Excel(name = "业务订单类型")
private String businessOrderType;
@ApiModelProperty("作业任务类型ID")
@Excel(name = "作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
@ApiModelProperty("下发系统ID")
@Excel(name = "下发系统ID")
private String deliverySystemId;
@ApiModelProperty("下发系统")
@Excel(name = "下发系统")
private String deliverySystem;
@ApiModelProperty("下发订单类型ID")
@Excel(name = "下发订单类型ID")
private String orderTypeId;
@ApiModelProperty("下发订单类型")
@Excel(name = "下发订单类型")
private String orderType;
}
@@ -0,0 +1,74 @@
package com.mhd.oms.domain.orderType.repository.todo;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 订单类型关系对象 oms_order_type
*
* @author gen
* @date 2024-05-15
*/
@Data
public class OrderTypeDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("业务订单类型ID")
@Excel(name = "业务订单类型ID")
private String businessOrderTypeId;
@ApiModelProperty("业务订单类型")
@Excel(name = "业务订单类型")
private String businessOrderType;
@ApiModelProperty("作业任务类型ID")
@Excel(name = "作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
@ApiModelProperty("下发系统ID")
@Excel(name = "下发系统ID")
private String deliverySystemId;
@ApiModelProperty("下发系统")
@Excel(name = "下发系统")
private String deliverySystem;
@ApiModelProperty("下发订单类型ID")
@Excel(name = "下发订单类型ID")
private String orderTypeId;
@ApiModelProperty("下发订单类型")
@Excel(name = "下发订单类型")
private String orderType;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
}
@@ -0,0 +1,69 @@
package com.mhd.oms.domain.orderType.service;
import com.mhd.oms.domain.orderType.repository.facade.IOrderTypeService;
import com.mhd.oms.domain.orderType.repository.po.OrderTypeDictPO;
import com.mhd.oms.domain.orderType.repository.po.OrderTypePO;
import com.mhd.oms.domain.orderType.repository.todo.OrderTypeDO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 订单类型关系
*
* @author gen
* @date 2024-05-15
*/
@Service
@Slf4j
public class OrderTypeDomainService {
@Autowired
private IOrderTypeService orderTypeService;
/**
* 分页查询订单类型关系列表
*/
public List<OrderTypePO> queryList(OrderTypeDO orderTypeDO) {
return orderTypeService.queryList(orderTypeDO);
}
/**
* 新增订单类型关系
*/
public Boolean insert(OrderTypeDO orderTypeDO) {
return orderTypeService.insert(orderTypeDO);
}
/**
* 修改订单类型关系
*/
public Boolean update(OrderTypeDO orderTypeDO) {
return orderTypeService.update(orderTypeDO);
}
/**
* 批量删除订单类型关系
*/
public Boolean delete(Long[] ids) {
return orderTypeService.delete(ids);
}
/**
* 获取订单类型关系详细信息
*/
public OrderTypePO getInfo(Long id)
{
return orderTypeService.getInfo(id);
}
public List<OrderTypeDictPO> listDict() {
return orderTypeService.listDict();
}
}
@@ -0,0 +1,202 @@
package com.mhd.oms.domain.purchaseOrder.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 采购订单管理对象 oms_purchase_order
*
* @author gen
* @date 2024-05-16
*/
@Data
@TableName("oms_purchase_order")
public class PurchaseOrder extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("审核人")
@Excel(name = "审核人")
private Long auditBy;
@ApiModelProperty("审核时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date auditTime;
@ApiModelProperty("审核状态;1待审核2通过3拒绝")
@Excel(name = "审核状态;1待审核2通过3拒绝")
private Integer auditState;
@ApiModelProperty("审核结果")
@Excel(name = "审核结果")
private String auditResult;
@ApiModelProperty("采购单号")
@Excel(name = "采购单号")
private String orderNo;
@ApiModelProperty("订单状态;1待审核2已审核3已拒绝4已生成5部分采购6完成采购7已取消8已拦截")
@Excel(name = "订单状态;1待审核2已审核3已拒绝4已生成5部分采购6完成采购7已取消8已拦截")
private Integer orderState;
@ApiModelProperty("供应商ID")
@Excel(name = "供应商ID")
private Long supplierId;
@ApiModelProperty("供应商")
@Excel(name = "供应商")
private String supplier;
@ApiModelProperty("货主ID")
@Excel(name = "货主ID")
private Long shipperId;
@ApiModelProperty("货主")
@Excel(name = "货主")
private String shipper;
@ApiModelProperty("组织ID")
@Excel(name = "组织ID")
private Long orgId;
@ApiModelProperty("组织")
@Excel(name = "组织")
private String org;
@ApiModelProperty("订单时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "订单时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date orderTime;
@ApiModelProperty("订单类型ID")
@Excel(name = "订单类型ID")
private Long orderTypeId;
@ApiModelProperty("订单类型")
@Excel(name = "订单类型")
private String orderType;
@ApiModelProperty("作业任务类型ID")
@Excel(name = "作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
@ApiModelProperty("收货仓库ID")
@Excel(name = "收货仓库ID")
private Long receivingWarehouseId;
@ApiModelProperty("收货仓库")
@Excel(name = "收货仓库")
private String receivingWarehouse;
@ApiModelProperty("交货日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "交货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date deliveryDate;
@ApiModelProperty("客户订单号")
@Excel(name = "客户订单号")
private String customerOrders;
@ApiModelProperty("合同号")
@Excel(name = "合同号")
private String contractNo;
@ApiModelProperty("项目ID")
@Excel(name = "项目ID")
private String projectId;
@ApiModelProperty("项目")
@Excel(name = "项目")
private String project;
@ApiModelProperty("优惠率")
@Excel(name = "优惠率")
private BigDecimal rateConcession;
@ApiModelProperty("优惠金额")
@Excel(name = "优惠金额")
private BigDecimal discountAmount;
@ApiModelProperty("合计金额")
@Excel(name = "合计金额")
private BigDecimal totalAmount;
@ApiModelProperty("附件名称")
@Excel(name = "附件名称")
private String fileName;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileUrl;
@ApiModelProperty("来源;0-内部1-外部")
@Excel(name = "来源;0-内部1-外部")
private Integer source;
@ApiModelProperty("拦截状态;0未拦截1拦截成功2拦截失败")
@Excel(name = "拦截状态;0未拦截1拦截成功2拦截失败")
private Integer tacklState;
@ApiModelProperty("拦截时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "拦截时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date tacklTime;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty("价税合计")
@Excel(name = "价税合计")
private BigDecimal totalPriceTax;
@ApiModelProperty("物料信息")
@Excel(name = "物料信息")
private String materialInfo;
@ApiModelProperty("物料数量")
@Excel(name = "物料数量")
private Integer materialNum;
@ApiModelProperty("入库数量")
@Excel(name = "入库数量")
private Integer inStorageNum;
@ApiModelProperty("下发系统")
@Excel(name = "下发系统")
private String deliverySystem;
}
@@ -0,0 +1,75 @@
package com.mhd.oms.domain.purchaseOrder.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.purchaseOrder.entity.PurchaseOrder;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderDetailsPO;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderPO;
import com.mhd.oms.domain.purchaseOrder.repository.todo.PurchaseOrderAuditDO;
import com.mhd.oms.domain.purchaseOrder.repository.todo.PurchaseOrderDO;
import java.util.List;
/**
* 采购订单管理Service接口
*
* @author gen
* @date 2024-05-16
*/
public interface IPurchaseOrderService extends IService<PurchaseOrder>
{
/**
* 分页查询采购订单管理列表
*/
public List<PurchaseOrderPO> queryList(PurchaseOrderDO purchaseOrderDO);
/**
* 新增采购订单管理
*/
public Boolean insert(PurchaseOrderDO purchaseOrderDO);
/** 新增并返回实体 */
public PurchaseOrder insertReturnEntity(PurchaseOrderDO purchaseOrderDO);
/**
* 新增采购订单管理
*/
public Long insertReturnId(PurchaseOrderDO purchaseOrderDO);
/**
* 修改采购订单管理
*/
public Boolean update(PurchaseOrderDO purchaseOrderDO);
/**
* 批量删除采购订单管理
*/
public Boolean delete(Long[] ids);
/**
* 查询采购订单管理
*/
public PurchaseOrderDetailsPO getInfo(Long id);
/**
* 采购订单审核
* @param purchaseOrderAuditDO
* @return
*/
public Boolean audit(PurchaseOrderAuditDO purchaseOrderAuditDO);
/**
* 采购订单取消审核
* @param purchaseOrderAuditDO
* @return
*/
public Boolean cancelAudit(PurchaseOrderAuditDO purchaseOrderAuditDO);
/**
* 根据ID更新状态
*/
void updateStateById(Long id, Integer state);
List<PurchaseOrderPO> getInfo(List<Long> ids);
Boolean batchUpdate(List<PurchaseOrderDO> purchaseOrderDOS);
}
@@ -0,0 +1,28 @@
package com.mhd.oms.domain.purchaseOrder.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.OrderInfoPO;
import com.mhd.oms.domain.purchaseOrder.entity.PurchaseOrder;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderPO;
import com.mhd.oms.domain.purchaseOrder.repository.todo.PurchaseOrderDO;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 采购订单管理Mapper接口
*
* @author gen
* @date 2024-05-16
*/
public interface PurchaseOrderMapper extends BaseMapper<PurchaseOrder>
{
/**
* 查询采购订单管理列表
*/
public List<PurchaseOrderPO> queryList(PurchaseOrderDO purchaseOrderDO);
@Select("select order_no, shipper_id, shipper, order_type, customer_orders, tackl_state, job_task_type, supplier_id, order_type_id " +
"from oms_purchase_order where id = #{orderId}")
OrderInfoPO selectOrderInfoByOrderId(Long orderId);
}
@@ -0,0 +1,307 @@
package com.mhd.oms.domain.purchaseOrder.repository.persistence;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
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.OrderConstant;
import com.mhd.oms.domain.deliveryInfo.entity.DeliveryInfo;
import com.mhd.oms.domain.deliveryInfo.repository.mapper.DeliveryInfoMapper;
import com.mhd.oms.domain.deliveryInfo.repository.po.DeliveryInfoPO;
import com.mhd.oms.domain.goods.entity.Goods;
import com.mhd.oms.domain.goods.repository.mapper.GoodsMapper;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.logistics.entity.Logistics;
import com.mhd.oms.domain.logistics.repository.mapper.LogisticsMapper;
import com.mhd.oms.domain.logistics.repository.po.LogisticsPO;
import com.mhd.oms.domain.purchaseOrder.entity.PurchaseOrder;
import com.mhd.oms.domain.purchaseOrder.repository.facade.IPurchaseOrderService;
import com.mhd.oms.domain.purchaseOrder.repository.mapper.PurchaseOrderMapper;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderDetailsPO;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderPO;
import com.mhd.oms.domain.purchaseOrder.repository.todo.PurchaseOrderAuditDO;
import com.mhd.oms.domain.purchaseOrder.repository.todo.PurchaseOrderDO;
import com.mhd.oms.domain.receiptInfo.entity.ReceiptInfo;
import com.mhd.oms.domain.receiptInfo.repository.mapper.ReceiptInfoMapper;
import com.mhd.oms.domain.receiptInfo.repository.po.ReceiptInfoPO;
import com.mhd.oms.domain.scmOrder.repository.mapper.ScmOrderMapper;
import com.mhd.oms.domain.settlement.entity.Settlement;
import com.mhd.oms.domain.settlement.repository.mapper.SettlementMapper;
import com.mhd.oms.domain.settlement.repository.po.SettlementPO;
import com.mhd.system.api.model.LoginUser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 采购订单管理Service业务层处理
*
* @author gen
* @date 2024-05-16
*/
@Service
public class PurchaseOrderImpl extends ServiceImpl<PurchaseOrderMapper, PurchaseOrder> implements IPurchaseOrderService {
@Autowired
private PurchaseOrderMapper purchaseOrderMapper;
@Resource
private SettlementMapper settlementMapper;
@Resource
private DeliveryInfoMapper deliveryInfoMapper;
@Resource
private ReceiptInfoMapper receiptInfoMapper;
@Resource
private LogisticsMapper logisticsMapper;
@Resource
private GoodsMapper goodsMapper;
@Resource
private ScmOrderMapper scmOrderMapper;
/**
* 查询采购订单管理列表
*/
@Override
public List<PurchaseOrderPO> queryList(PurchaseOrderDO purchaseOrderDO)
{
List<PurchaseOrderPO> purchaseOrderPOS = purchaseOrderMapper.queryList(purchaseOrderDO);
for (PurchaseOrderPO purchaseOrderPO : purchaseOrderPOS) {
//查询供应链订单号
String scmOrderNo = scmOrderMapper.selectScmOrderNoByOrderId(purchaseOrderPO.getId());
}
return purchaseOrderPOS;
}
/**
* 新增采购订单管理
*/
@Override
public Boolean insert(PurchaseOrderDO purchaseOrderDO) {
PurchaseOrder purchaseOrder = new PurchaseOrder();
BeanUtils.copyProperties(purchaseOrderDO,purchaseOrder);
return this.save(purchaseOrder);
}
@Override
public PurchaseOrder insertReturnEntity(PurchaseOrderDO purchaseOrderDO) {
PurchaseOrder purchaseOrder = new PurchaseOrder();
BeanUtils.copyProperties(purchaseOrderDO,purchaseOrder);
this.save(purchaseOrder);
return purchaseOrder;
}
/**
* 新增采购订单管理并且返回主键ID
*/
@Override
public Long insertReturnId(PurchaseOrderDO purchaseOrderDO) {
PurchaseOrder purchaseOrder = new PurchaseOrder();
BeanUtils.copyProperties(purchaseOrderDO,purchaseOrder);
this.save(purchaseOrder);
return purchaseOrder.getId();
}
/**
* 修改采购订单管理
*/
@Override
public Boolean update(PurchaseOrderDO purchaseOrderDO) {
PurchaseOrder purchaseOrder = new PurchaseOrder();
BeanUtils.copyProperties(purchaseOrderDO,purchaseOrder);
return this.updateById(purchaseOrder);
}
/**
* 批量删除采购订单管理
*/
@Override
public Boolean delete(Long[] ids ) {
List<PurchaseOrder> list = new ArrayList<>();
List<PurchaseOrderPO> purchaseOrderPOS = getInfo(Arrays.asList(ids));
//采购订单 订单状态未审核/已审核状态下才可以删除,否则提示异常
List<PurchaseOrderPO> collect = purchaseOrderPOS.stream().
filter(purchaseOrderPO -> purchaseOrderPO.getOrderState() > 2).collect(Collectors.toList());
if (!collect.isEmpty()) {
throw new ServiceException("未审核/已审核状态下才可以删除订单");
}
for (PurchaseOrderPO purchaseOrderPO : purchaseOrderPOS) {
PurchaseOrder purchaseOrder = new PurchaseOrder();
purchaseOrder.setId(purchaseOrderPO.getId());
purchaseOrder.setDelFlag(2);
list.add(purchaseOrder);
}
return this.updateBatchById(list);
}
/**
* 修改采购订单管理
*/
@Override
public PurchaseOrderDetailsPO getInfo(Long id) {
PurchaseOrderDetailsPO purchaseOrderDetailsPO = new PurchaseOrderDetailsPO();
PurchaseOrder purchaseOrder = this.getById(id);
PurchaseOrderPO purchaseOrderPO = new PurchaseOrderPO();
if (ObjectUtil.isNull(purchaseOrder)) {
throw new ServiceException("未查询到对应的采购单信息");
}
BeanUtils.copyProperties(purchaseOrder,purchaseOrderPO);
purchaseOrderDetailsPO.setPurchaseOrderPO(purchaseOrderPO);
SettlementPO settlementPO = new SettlementPO();
Settlement settlement = settlementMapper.selectOne(new LambdaQueryWrapper<Settlement>()
.eq(Settlement::getOrderId, id).eq(Settlement::getDelFlag, 1));
if (ObjectUtil.isNull(settlement)) {//结算单对象可以为空,如果为空则认为结算单没有数据
settlement = new Settlement();
}
BeanUtils.copyProperties(settlement,settlementPO);
purchaseOrderDetailsPO.setSettlementPO(settlementPO);
DeliveryInfoPO deliveryInfoPO = new DeliveryInfoPO();
DeliveryInfo deliveryInfo = deliveryInfoMapper.selectOne(new LambdaQueryWrapper<DeliveryInfo>()
.eq(DeliveryInfo::getOrderId, id).eq(DeliveryInfo::getDelFlag, 1));
if (ObjectUtil.isNull(deliveryInfo)) {
deliveryInfo = new DeliveryInfo();
}
BeanUtils.copyProperties(deliveryInfo, deliveryInfoPO);
purchaseOrderDetailsPO.setDeliveryInfoPO(deliveryInfoPO);
ReceiptInfoPO receiptInfoPO = new ReceiptInfoPO();
ReceiptInfo receiptInfo = receiptInfoMapper.selectOne(new LambdaQueryWrapper<ReceiptInfo>()
.eq(ReceiptInfo::getOrderId, id).eq(ReceiptInfo::getDelFlag, 1));
if (ObjectUtil.isNull(receiptInfo)) {
receiptInfo = new ReceiptInfo();
}
BeanUtils.copyProperties(receiptInfo, receiptInfoPO);
purchaseOrderDetailsPO.setReceiptInfoPO(receiptInfoPO);
LogisticsPO logisticsPO = new LogisticsPO();
Logistics logistics = logisticsMapper.selectOne(new LambdaQueryWrapper<Logistics>()
.eq(Logistics::getOrderId, id).eq(Logistics::getDelFlag, 1));
if (ObjectUtil.isNull(logistics)) {
logistics = new Logistics();
}
BeanUtils.copyProperties(logistics, logisticsPO);
purchaseOrderDetailsPO.setLogisticsPO(logisticsPO);
List<Goods> goodsList = goodsMapper.selectList(new LambdaQueryWrapper<Goods>()
.eq(Goods::getOrderId, id).eq(Goods::getDelFlag, 1));
List<GoodsPO> goodsPOList = goodsList.stream().map(goods -> {
GoodsPO goodsPO = new GoodsPO();
BeanUtils.copyProperties(goods, goodsPO);
return goodsPO;
}).collect(Collectors.toList());
purchaseOrderDetailsPO.setGoodsPOList(goodsPOList);
return purchaseOrderDetailsPO;
}
/**
* 采购订单审核
* @param purchaseOrderAuditDO
* @return
*/
@Override
public Boolean audit(PurchaseOrderAuditDO purchaseOrderAuditDO) {
List<PurchaseOrder> purchaseOrders = new ArrayList<>();
List<Long> ids = Convert.toList(Long.class, purchaseOrderAuditDO.getIds());
for (Long id : ids) {
PurchaseOrder purchaseOrder = this.getById(id);
if (ObjectUtil.isNull(purchaseOrder)) {
throw new ServiceException("未查询到对应的采购订单");
}
if (purchaseOrder.getAuditState() == 2 || purchaseOrder.getAuditState() == 3) {
throw new ServiceException(String.format("订单号【%s】订单状态不符合预期,仅在待审核状态下才允许审核", purchaseOrder.getOrderNo()));
}
purchaseOrder.setAuditBy(purchaseOrderAuditDO.getAuditBy());
purchaseOrder.setAuditTime(new Date());
purchaseOrder.setAuditState(purchaseOrderAuditDO.getAuditState());
purchaseOrder.setAuditResult(purchaseOrderAuditDO.getAuditResult());
purchaseOrder.setOrderState(purchaseOrderAuditDO.getAuditState());
purchaseOrder.setUpdateBy(purchaseOrderAuditDO.getUpdateBy());
purchaseOrder.setUpdateTime(purchaseOrderAuditDO.getUpdateTime());
purchaseOrder.setUpdateByName(purchaseOrderAuditDO.getUpdateByName());
purchaseOrders.add(purchaseOrder);
}
return this.updateBatchById(purchaseOrders);
}
@Override
public Boolean cancelAudit(PurchaseOrderAuditDO purchaseOrderAuditDO) {
List<PurchaseOrder> purchaseOrders = new ArrayList<>();
List<Long> ids = Convert.toList(Long.class, purchaseOrderAuditDO.getIds());
for (Long id : ids) {
PurchaseOrder purchaseOrder = this.getById(id);
if (ObjectUtil.isNull(purchaseOrder)) {
throw new ServiceException("未查询到对应的采购订单");
}
//状态1,4,5,6,7,8无法取消审核
if (ArrayUtil.contains(OrderConstant.PUR_STATUS_GROUP_UNABLE_CANCEL_AUDIT, purchaseOrder.getOrderState())) {
throw new ServiceException(String.format("订单号【%s】订单状态异常,暂时无法取消审核", purchaseOrder.getOrderNo()));
}
purchaseOrder.setAuditBy(null);
purchaseOrder.setAuditTime(null);
//取消审核,审核状态还原为未审核
purchaseOrder.setAuditState(OrderConstant.PUR_STATUS_1);
purchaseOrder.setOrderState(1);
purchaseOrder.setAuditResult("");
purchaseOrder.setUpdateBy(purchaseOrderAuditDO.getUpdateBy());
purchaseOrder.setUpdateTime(purchaseOrderAuditDO.getUpdateTime());
purchaseOrder.setUpdateByName(purchaseOrderAuditDO.getUpdateByName());
purchaseOrders.add(purchaseOrder);
}
return this.updateBatchById(purchaseOrders);
}
@Override
public List<PurchaseOrderPO> getInfo(List<Long> ids) {
List<PurchaseOrder> purchaseOrders = purchaseOrderMapper.selectList(new LambdaQueryWrapper<PurchaseOrder>()
.in(PurchaseOrder::getId, ids));
return purchaseOrders.stream().map(purchaseOrder -> {
PurchaseOrderPO purchaseOrderPO = new PurchaseOrderPO();
BeanUtils.copyProperties(purchaseOrder, purchaseOrderPO);
return purchaseOrderPO;
}).collect(Collectors.toList());
}
@Override
public Boolean batchUpdate(List<PurchaseOrderDO> purchaseOrderDOS) {
List<PurchaseOrder> purchaseOrders = new ArrayList<>();
for (PurchaseOrderDO purchaseOrderDO : purchaseOrderDOS) {
PurchaseOrder purchaseOrder = new PurchaseOrder();
BeanUtils.copyProperties(purchaseOrderDO,purchaseOrder);
purchaseOrders.add(purchaseOrder);
}
return this.updateBatchById(purchaseOrders);
}
@Override
public void updateStateById(Long id, Integer state) {
LoginUser loginUser = SecurityUtils.getLoginUser();
purchaseOrderMapper.update(new PurchaseOrder(), new LambdaUpdateWrapper<PurchaseOrder>()
.set(PurchaseOrder::getOrderState, state)
.set(PurchaseOrder::getUpdateBy, loginUser.getUserid())
.set(PurchaseOrder::getUpdateByName, loginUser.getUsername())
.set(PurchaseOrder::getUpdateTime, new Date())
.eq(PurchaseOrder::getId, id));
}
}
@@ -0,0 +1,48 @@
package com.mhd.oms.domain.purchaseOrder.repository.po;
import com.mhd.oms.domain.deliveryInfo.repository.po.DeliveryInfoPO;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.logistics.repository.po.LogisticsPO;
import com.mhd.oms.domain.receiptInfo.repository.po.ReceiptInfoPO;
import com.mhd.oms.domain.settlement.repository.po.SettlementPO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 采购订单管理对象 oms_purchase_order
*
* @author gen
* @date 2024-05-16
*/
@Data
@ApiModel(value = "采购订单详情对象", description = "采购订单详情响应对象")
public class PurchaseOrderDetailsPO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("基本信息")
private PurchaseOrderPO purchaseOrderPO;
@ApiModelProperty("结算信息")
private SettlementPO settlementPO;
@ApiModelProperty("发货信息")
private DeliveryInfoPO deliveryInfoPO;
@ApiModelProperty("收货信息")
private ReceiptInfoPO receiptInfoPO;
@ApiModelProperty("物流信息")
private LogisticsPO logisticsPO;
@ApiModelProperty("物料信息")
private List<GoodsPO> goodsPOList;
}
@@ -0,0 +1,216 @@
package com.mhd.oms.domain.purchaseOrder.repository.po;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 采购订单管理对象 oms_purchase_order
*
* @author gen
* @date 2024-05-16
*/
@Data
@ApiModel(value = "采购订单管理对象", description = "采购订单管理响应对象")
public class PurchaseOrderPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("审核人")
@Excel(name = "审核人")
private Long auditBy;
@ApiModelProperty("审核时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date auditTime;
@ApiModelProperty("审核状态;1待审核2通过3拒绝")
@Excel(name = "审核状态;1待审核2通过3拒绝")
private Integer auditState;
@ApiModelProperty("审核结果")
@Excel(name = "审核结果")
private String auditResult;
@ApiModelProperty("采购单号")
@Excel(name = "采购单号")
private String orderNo;
@ApiModelProperty("订单状态:1-待审核、2-已审核、3-已拒绝、4-已生成、5-部分采购、6-完成采购、7-已取消、8-已拦截")
@Excel(name = "订单状态;1待审核2已审核3已拒绝4已生成5部分采购6完成采购7已取消8已拦截")
private Integer orderState;
@ApiModelProperty("供应商ID")
@Excel(name = "供应商ID")
private Long supplierId;
@ApiModelProperty("供应商")
@Excel(name = "供应商")
private String supplier;
@ApiModelProperty("货主ID")
@Excel(name = "货主ID")
private Long shipperId;
@ApiModelProperty("货主")
@Excel(name = "货主")
private String shipper;
@ApiModelProperty("组织ID")
@Excel(name = "组织ID")
private Long orgId;
@ApiModelProperty("组织")
@Excel(name = "组织")
private String org;
@ApiModelProperty("订单时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "订单时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date orderTime;
@ApiModelProperty("订单类型ID")
@Excel(name = "订单类型ID")
private Long orderTypeId;
@ApiModelProperty("订单类型")
@Excel(name = "订单类型")
private String orderType;
@ApiModelProperty("作业任务类型ID")
@Excel(name = "作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
@ApiModelProperty("收货仓库ID")
@Excel(name = "收货仓库ID")
private Long receivingWarehouseId;
@ApiModelProperty("收货仓库")
@Excel(name = "收货仓库")
private String receivingWarehouse;
@ApiModelProperty("交货日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "交货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date deliveryDate;
@ApiModelProperty("客户订单号")
@Excel(name = "客户订单号")
private String customerOrders;
@ApiModelProperty("合同号")
@Excel(name = "合同号")
private String contractNo;
@ApiModelProperty("项目ID")
@Excel(name = "项目ID")
private String projectId;
@ApiModelProperty("项目")
@Excel(name = "项目")
private String project;
@ApiModelProperty("优惠率")
@Excel(name = "优惠率")
private BigDecimal rateConcession;
@ApiModelProperty("优惠金额")
@Excel(name = "优惠金额")
private BigDecimal discountAmount;
@ApiModelProperty("合计金额")
@Excel(name = "合计金额")
private BigDecimal totalAmount;
@ApiModelProperty("附件名称")
@Excel(name = "附件名称")
private String fileName;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileUrl;
@ApiModelProperty("来源:0-内部、1-外部")
@Excel(name = "来源;0-内部1-外部")
private Integer source;
@ApiModelProperty("拦截状态:0-未拦截、1-拦截成功、2-拦截失败")
@Excel(name = "拦截状态;0未拦截1拦截成功2拦截失败")
private Integer tacklState;
@ApiModelProperty("拦截时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "拦截时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date tacklTime;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty("结算对象")
@Excel(name = "结算对象")
private String settlementObj;
@ApiModelProperty("结算方式")
@Excel(name = "结算方式")
private String settlementWay;
@ApiModelProperty("支付状态")
@Excel(name = "支付状态")
private String payStatus;
@ApiModelProperty("供应链订单号")
@Excel(name = "供应链订单号")
private String scmOrderNo;
@ApiModelProperty("价税合计")
@Excel(name = "价税合计")
private BigDecimal totalPriceTax;
@ApiModelProperty("物料信息")
@Excel(name = "物料信息")
private String materialInfo;
@ApiModelProperty("物料数量")
@Excel(name = "物料数量")
private Integer materialNum;
@ApiModelProperty("入库数量")
@Excel(name = "入库数量")
private Integer inStorageNum;
@ApiModelProperty("下发系统")
@Excel(name = "下发系统")
private String deliverySystem;
}
@@ -0,0 +1,44 @@
package com.mhd.oms.domain.purchaseOrder.repository.todo;
import com.mhd.oms.domain.deliveryInfo.repository.todo.DeliveryInfoDO;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import com.mhd.oms.domain.logistics.repository.todo.LogisticsDO;
import com.mhd.oms.domain.receiptInfo.repository.todo.ReceiptInfoDO;
import com.mhd.oms.domain.settlement.repository.todo.SettlementDO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 采购订单管理对象 oms_purchase_order
*
* @author gen
* @date 2024-05-16
*/
@Data
public class PurchaseOrderAddDO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("基本信息")
private PurchaseOrderDO purchaseOrderDo;
@ApiModelProperty("结算信息")
private SettlementDO settlementDo;
@ApiModelProperty("发货信息")
private DeliveryInfoDO deliveryInfoDo;
@ApiModelProperty("收货信息")
private ReceiptInfoDO receiptInfoDo;
@ApiModelProperty("物流信息")
private LogisticsDO logisticsDo;
@ApiModelProperty("物料信息")
private List<GoodsDO> goodsDOList;
}
@@ -0,0 +1,37 @@
package com.mhd.oms.domain.purchaseOrder.repository.todo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class PurchaseOrderAuditDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("采购订单ID集合")
private String ids;
@ApiModelProperty("审核人")
@Excel(name = "审核人")
private Long auditBy;
@ApiModelProperty("审核时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date auditTime;
@ApiModelProperty("审核状态;1待审核2通过3拒绝")
@Excel(name = "审核状态;1待审核2通过3拒绝")
private Integer auditState;
@ApiModelProperty("审核结果")
@Excel(name = "审核结果")
private String auditResult;
}
@@ -0,0 +1,197 @@
package com.mhd.oms.domain.purchaseOrder.repository.todo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 采购订单管理对象 oms_purchase_order
*
* @author gen
* @date 2024-05-16
*/
@Data
public class PurchaseOrderDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("审核人")
@Excel(name = "审核人")
private Long auditBy;
@ApiModelProperty("审核时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date auditTime;
@ApiModelProperty("审核状态;1待审核2通过3拒绝")
@Excel(name = "审核状态;1待审核2通过3拒绝")
private Integer auditState;
@ApiModelProperty("审核结果")
@Excel(name = "审核结果")
private String auditResult;
@ApiModelProperty("采购单号")
@Excel(name = "采购单号")
private String orderNo;
@ApiModelProperty("订单状态;1待审核2已审核3已拒绝4已生成5部分采购6完成采购7已取消8已拦截")
@Excel(name = "订单状态;1待审核2已审核3已拒绝4已生成5部分采购6完成采购7已取消8已拦截")
private Integer orderState;
@ApiModelProperty("供应商ID")
@Excel(name = "供应商ID")
private Long supplierId;
@ApiModelProperty("供应商")
@Excel(name = "供应商")
private String supplier;
@ApiModelProperty("货主ID")
@Excel(name = "货主ID")
private Long shipperId;
@ApiModelProperty("货主")
@Excel(name = "货主")
private String shipper;
@ApiModelProperty("组织ID")
@Excel(name = "组织ID")
private Long orgId;
@ApiModelProperty("组织")
@Excel(name = "组织")
private String org;
@ApiModelProperty("订单时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "订单时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date orderTime;
@ApiModelProperty("订单类型ID")
@Excel(name = "订单类型ID")
private Long orderTypeId;
@ApiModelProperty("订单类型")
@Excel(name = "订单类型")
private String orderType;
@ApiModelProperty("作业任务类型ID")
@Excel(name = "作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
@ApiModelProperty("下发系统")
@Excel(name = "下发系统")
private String deliverySystem;
@ApiModelProperty("收货仓库ID")
@Excel(name = "收货仓库ID")
private Long receivingWarehouseId;
@ApiModelProperty("收货仓库")
@Excel(name = "收货仓库")
private String receivingWarehouse;
@ApiModelProperty("交货日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "交货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date deliveryDate;
@ApiModelProperty("客户订单号")
@Excel(name = "客户订单号")
private String customerOrders;
@ApiModelProperty("合同号")
@Excel(name = "合同号")
private String contractNo;
@ApiModelProperty("项目ID")
@Excel(name = "项目ID")
private String projectId;
@ApiModelProperty("项目")
@Excel(name = "项目")
private String project;
@ApiModelProperty("优惠率")
@Excel(name = "优惠率")
private BigDecimal rateConcession;
@ApiModelProperty("优惠金额")
@Excel(name = "优惠金额")
private BigDecimal discountAmount;
@ApiModelProperty("合计金额")
@Excel(name = "合计金额")
private BigDecimal totalAmount;
@ApiModelProperty("附件名称")
@Excel(name = "附件名称")
private String fileName;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileUrl;
@ApiModelProperty("来源;0-内部1-外部")
@Excel(name = "来源;0-内部1-外部")
private Integer source;
@ApiModelProperty("拦截状态;0未拦截1拦截成功2拦截失败")
@Excel(name = "拦截状态;0未拦截1拦截成功2拦截失败")
private Integer tacklState;
@ApiModelProperty("拦截时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "拦截时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date tacklTime;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty("价税合计")
@Excel(name = "价税合计")
private BigDecimal totalPriceTax;
@ApiModelProperty("物料信息")
@Excel(name = "物料信息")
private String materialInfo;
@ApiModelProperty("物料数量")
@Excel(name = "物料数量")
private Integer materialNum;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
}
@@ -0,0 +1,133 @@
package com.mhd.oms.domain.purchaseOrder.service;
import cn.hutool.core.util.ObjectUtil;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.purchaseOrder.entity.PurchaseOrder;
import com.mhd.oms.domain.purchaseOrder.repository.facade.IPurchaseOrderService;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderDetailsPO;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderPO;
import com.mhd.oms.domain.purchaseOrder.repository.todo.PurchaseOrderAuditDO;
import com.mhd.oms.domain.purchaseOrder.repository.todo.PurchaseOrderDO;
import com.mhd.oms.interfaces.dto.purchaseOrder.PurchaseOrderExcelDTO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 采购订单管理
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class PurchaseOrderDomainService {
@Autowired
private IPurchaseOrderService purchaseOrderService;
/**
* 分页查询采购订单管理列表
*/
public List<PurchaseOrderPO> queryList(PurchaseOrderDO purchaseOrderDO) {
return purchaseOrderService.queryList(purchaseOrderDO);
}
/**
* 新增采购订单管理
*/
public Boolean insert(PurchaseOrderDO purchaseOrderDO) {
return purchaseOrderService.insert(purchaseOrderDO);
}
/**
* 新增采购订单管理并且返回主键ID
*/
public Long insertReturnId(PurchaseOrderDO purchaseOrderDO) {
return purchaseOrderService.insertReturnId(purchaseOrderDO);
}
/**
* 修改采购订单管理
*/
public Boolean update(PurchaseOrderDO purchaseOrderDO) {
return purchaseOrderService.update(purchaseOrderDO);
}
/**
* 批量删除采购订单管理
*/
public Boolean delete(Long[] ids) {
return purchaseOrderService.delete(ids);
}
/**
* 获取采购订单管理详细信息
*/
public PurchaseOrderDetailsPO getInfo(Long id)
{
return purchaseOrderService.getInfo(id);
}
public Boolean audit(PurchaseOrderAuditDO purchaseOrderAuditDO) {
return purchaseOrderService.audit(purchaseOrderAuditDO);
}
public Boolean cancelAudit(PurchaseOrderAuditDO purchaseOrderAuditDO) {
return purchaseOrderService.cancelAudit(purchaseOrderAuditDO);
}
public List<PurchaseOrderPO> getInfo(List<Long> ids) {
return purchaseOrderService.getInfo(ids);
}
public Boolean batchUpdate(List<PurchaseOrderDO> purchaseOrderDOS) {
return purchaseOrderService.batchUpdate(purchaseOrderDOS);
}
/**
* 根据ID更新状态
*/
public void updateStateById(Long id, Integer state) {
purchaseOrderService.updateStateById(id, state);
}
/**
* 采购订单导入-保存采购订单信息
* @param purOrderExcelDTO - 导入信息
* @return 保存的采购订单
*/
public PurchaseOrder saveFromImportSalesOrder(PurchaseOrderExcelDTO purOrderExcelDTO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
PurchaseOrderDO purchaseOrderDO = new PurchaseOrderDO();
BeanUtils.copyProperties(purOrderExcelDTO, purchaseOrderDO, IgnoreNullUtil.getNullPropertyNames(purOrderExcelDTO));
purchaseOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
purchaseOrderDO.setCreateBy(loginUser.getUserPo().getUserId());
purchaseOrderDO.setCreateByName(loginUser.getUserPo().getUserName());
purchaseOrderDO.setCreateTime(new Date());
// 成交价税合计物料价税合计 - 优惠金额
if(ObjectUtil.isNotNull(purOrderExcelDTO.getTaxAmount()) && ObjectUtil.isNotNull(purOrderExcelDTO.getDiscountAmount())){
BigDecimal reachTotalAmount = purOrderExcelDTO.getTaxAmount().subtract(purOrderExcelDTO.getDiscountAmount());
if(BigDecimal.ZERO.compareTo(reachTotalAmount) >= 0){
throw new ServiceException("订单成交价税合计<=0,请检查物料价税合计与优惠金额数据!");
}
purchaseOrderDO.setTotalAmount(reachTotalAmount);
}
return purchaseOrderService.insertReturnEntity(purchaseOrderDO);
}
}
@@ -0,0 +1,77 @@
package com.mhd.oms.domain.receiptInfo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* 收货信息对象 oms_receipt_info
*
* @author gen
* @date 2024-05-16
*/
@Data
@TableName(value = "oms_receipt_info")
public class ReceiptInfo extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("收货人")
@Excel(name = "收货人")
private String consignee;
@ApiModelProperty("收货人联系电话")
@Excel(name = "收货人联系电话")
private String consigneePhone;
@ApiModelProperty("收货人所在区域编码")
@Excel(name = "收货人所在区域编码")
private String consigneeAreaCode;
@ApiModelProperty("收货人所在区域")
@Excel(name = "收货人所在区域")
private String consigneeArea;
@ApiModelProperty("收货人详细地址")
@Excel(name = "收货人详细地址")
private String consigneeAddress;
@ApiModelProperty("收货地址经纬度")
@Excel(name = "收货地址经纬度")
private String raddressLatLon;
@ApiModelProperty("预计到货时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date estimatedReceivingTime;
}
@@ -0,0 +1,48 @@
package com.mhd.oms.domain.receiptInfo.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.receiptInfo.entity.ReceiptInfo;
import com.mhd.oms.domain.receiptInfo.repository.po.ReceiptInfoPO;
import com.mhd.oms.domain.receiptInfo.repository.todo.ReceiptInfoDO;
import java.util.List;
/**
* 收货信息Service接口
*
* @author gen
* @date 2024-05-16
*/
public interface IReceiptInfoService extends IService<ReceiptInfo>
{
/**
* 分页查询收货信息列表
*/
public List<ReceiptInfoPO> queryList(ReceiptInfoDO receiptInfoDO);
/**
* 新增收货信息
*/
public Boolean insert(ReceiptInfoDO receiptInfoDO);
/**
* 修改收货信息
*/
public Boolean update(ReceiptInfoDO receiptInfoDO);
/**
* 批量删除收货信息
*/
public Boolean delete(Long[] ids);
/**
* 查询收货信息
*/
public ReceiptInfoPO getInfo(Long id);
/**
* 批量新增
*/
Boolean batchInsert(List<ReceiptInfoDO> receiptInfoDOList);
}
@@ -0,0 +1,23 @@
package com.mhd.oms.domain.receiptInfo.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.receiptInfo.entity.ReceiptInfo;
import com.mhd.oms.domain.receiptInfo.repository.po.ReceiptInfoPO;
import com.mhd.oms.domain.receiptInfo.repository.todo.ReceiptInfoDO;
import java.util.List;
/**
* 收货信息Mapper接口
*
* @author gen
* @date 2024-05-16
*/
public interface ReceiptInfoMapper extends BaseMapper<ReceiptInfo>
{
/**
* 查询收货信息列表
*/
public List<ReceiptInfoPO> queryList(ReceiptInfoDO receiptInfoDO);
}
@@ -0,0 +1,95 @@
package com.mhd.oms.domain.receiptInfo.repository.persistence;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.oms.domain.receiptInfo.entity.ReceiptInfo;
import com.mhd.oms.domain.receiptInfo.repository.facade.IReceiptInfoService;
import com.mhd.oms.domain.receiptInfo.repository.mapper.ReceiptInfoMapper;
import com.mhd.oms.domain.receiptInfo.repository.po.ReceiptInfoPO;
import com.mhd.oms.domain.receiptInfo.repository.todo.ReceiptInfoDO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 收货信息Service业务层处理
*
* @author gen
* @date 2024-05-16
*/
@Service
public class ReceiptInfoImpl extends ServiceImpl<ReceiptInfoMapper, ReceiptInfo> implements IReceiptInfoService {
@Autowired
private ReceiptInfoMapper receiptInfoMapper;
/**
* 查询收货信息列表
*/
@Override
public List<ReceiptInfoPO> queryList(ReceiptInfoDO receiptInfoDO)
{
return receiptInfoMapper.queryList(receiptInfoDO);
}
/**
* 新增收货信息
*/
@Override
public Boolean insert(ReceiptInfoDO receiptInfoDO) {
ReceiptInfo receiptInfo = new ReceiptInfo();
BeanUtils.copyProperties(receiptInfoDO,receiptInfo);
return this.save(receiptInfo);
}
/**
* 修改收货信息
*/
@Override
public Boolean update(ReceiptInfoDO receiptInfoDO) {
ReceiptInfo receiptInfo = new ReceiptInfo();
BeanUtils.copyProperties(receiptInfoDO,receiptInfo);
return this.updateById(receiptInfo);
}
/**
* 批量删除收货信息
*/
@Override
public Boolean delete(Long[] ids ) {
List<ReceiptInfo> list = new ArrayList<>();
for (Long id : ids) {
ReceiptInfo receiptInfo = new ReceiptInfo();
receiptInfo.setId(id);
receiptInfo.setDelFlag(2);
list.add(receiptInfo);
}
return this.updateBatchById(list);
}
/**
* 修改收货信息
*/
@Override
public ReceiptInfoPO getInfo(Long id) {
ReceiptInfo receiptInfo = this.getById(id);
ReceiptInfoPO receiptInfoPO = new ReceiptInfoPO();
BeanUtils.copyProperties(receiptInfo,receiptInfoPO);
return receiptInfoPO;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean batchInsert(List<ReceiptInfoDO> receiptInfoDOList) {
List<ReceiptInfo> receiptInfoList = receiptInfoDOList.stream().map(receiptInfoDO -> {
ReceiptInfo receiptInfo = new ReceiptInfo();
BeanUtils.copyProperties(receiptInfoDO, receiptInfo);
return receiptInfo;
}).collect(Collectors.toList());
return this.saveBatch(receiptInfoList);
}
}
@@ -0,0 +1,74 @@
package com.mhd.oms.domain.receiptInfo.repository.po;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
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.util.Date;
/**
* 收货信息对象 oms_receipt_info
*
* @author gen
* @date 2024-05-16
*/
@Data
@ApiModel(value = "收货信息对象", description = "收货信息响应对象")
public class ReceiptInfoPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("收货人")
@Excel(name = "收货人")
private String consignee;
@ApiModelProperty("收货人联系电话")
@Excel(name = "收货人联系电话")
private String consigneePhone;
@ApiModelProperty("收货人所在区域编码")
@Excel(name = "收货人所在区域编码")
private String consigneeAreaCode;
@ApiModelProperty("收货人所在区域")
@Excel(name = "收货人所在区域")
private String consigneeArea;
@ApiModelProperty("收货人详细地址")
@Excel(name = "收货人详细地址")
private String consigneeAddress;
@ApiModelProperty("收货地址经纬度")
@Excel(name = "收货地址经纬度")
private String raddressLatLon;
@ApiModelProperty("预计到货时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date estimatedReceivingTime;
}
@@ -0,0 +1,78 @@
package com.mhd.oms.domain.receiptInfo.repository.todo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
/**
* 收货信息对象 oms_receipt_info
*
* @author gen
* @date 2024-05-16
*/
@Data
public class ReceiptInfoDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("收货人")
@Excel(name = "收货人")
private String consignee;
@ApiModelProperty("收货人联系电话")
@Excel(name = "收货人联系电话")
private String consigneePhone;
@ApiModelProperty("收货人所在区域编码")
@Excel(name = "收货人所在区域编码")
private String consigneeAreaCode;
@ApiModelProperty("收货人所在区域")
@Excel(name = "收货人所在区域")
private String consigneeArea;
@ApiModelProperty("收货人详细地址")
@Excel(name = "收货人详细地址")
private String consigneeAddress;
@ApiModelProperty("收货地址经纬度")
@Excel(name = "收货地址经纬度")
private String raddressLatLon;
@ApiModelProperty("预计到货时间")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date estimatedReceivingTime;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
}
@@ -0,0 +1,119 @@
package com.mhd.oms.domain.receiptInfo.service;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.purchaseOrder.entity.PurchaseOrder;
import com.mhd.oms.domain.receiptInfo.repository.facade.IReceiptInfoService;
import com.mhd.oms.domain.receiptInfo.repository.po.ReceiptInfoPO;
import com.mhd.oms.domain.receiptInfo.repository.todo.ReceiptInfoDO;
import com.mhd.oms.domain.salesOrder.entity.SalesOrder;
import com.mhd.oms.interfaces.dto.purchaseOrder.PurchaseOrderExcelDTO;
import com.mhd.oms.interfaces.dto.salesOrder.SalesOrderExcelDTO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 收货信息
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class ReceiptInfoDomainService {
@Autowired
private IReceiptInfoService receiptInfoService;
/**
* 分页查询收货信息列表
*/
public List<ReceiptInfoPO> queryList(ReceiptInfoDO receiptInfoDO) {
return receiptInfoService.queryList(receiptInfoDO);
}
/**
* 新增收货信息
*/
public Boolean insert(ReceiptInfoDO receiptInfoDO) {
return receiptInfoService.insert(receiptInfoDO);
}
/**
* 修改收货信息
*/
public Boolean update(ReceiptInfoDO receiptInfoDO) {
return receiptInfoService.update(receiptInfoDO);
}
/**
* 批量删除收货信息
*/
public Boolean delete(Long[] ids) {
return receiptInfoService.delete(ids);
}
/**
* 获取收货信息详细信息
*/
public ReceiptInfoPO getInfo(Long id)
{
return receiptInfoService.getInfo(id);
}
/**
* 批量新增
*/
public Boolean batchInsert(List<ReceiptInfoDO> receiptInfoDOList) {
return receiptInfoService.batchInsert(receiptInfoDOList);
}
/**
* 导入销售订单 - 为传入的收货列表添加一条收货信息
*
* @param receiptInfoDOList - 添加数据的列表
* @param salesOrderExcelDTO -导入的数据
* @param salesOrder - 导入数据中的销售订单信息
*/
public void listAddFromImportSalesOrder(List<ReceiptInfoDO> receiptInfoDOList, SalesOrderExcelDTO salesOrderExcelDTO, SalesOrder salesOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
ReceiptInfoDO receiptInfoDO = new ReceiptInfoDO();
BeanUtils.copyProperties(salesOrderExcelDTO, receiptInfoDO, IgnoreNullUtil.getNullPropertyNames(salesOrderExcelDTO));
receiptInfoDO.setOrderId(salesOrder.getId());
receiptInfoDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
receiptInfoDO.setCreateBy(loginUser.getUserPo().getUserId());
receiptInfoDO.setCreateByName(loginUser.getUserPo().getUserName());
receiptInfoDO.setCreateTime(new Date());
receiptInfoDOList.add(receiptInfoDO);
}
/**
* 导入采购订单 - 为传入的收货列表添加一条收货信息
*
* @param receiptInfoDOList - 添加数据的列表
* @param purOrderExcelDTO -导入的数据
* @param purOrder - 导入的采购订单信息
*/
public void listAddFromImportPurOrder(List<ReceiptInfoDO> receiptInfoDOList, PurchaseOrderExcelDTO purOrderExcelDTO, PurchaseOrder purOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
ReceiptInfoDO receiptInfoDO = new ReceiptInfoDO();
BeanUtils.copyProperties(purOrderExcelDTO, receiptInfoDO, IgnoreNullUtil.getNullPropertyNames(purOrderExcelDTO));
receiptInfoDO.setOrderId(purOrder.getId());
receiptInfoDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
receiptInfoDO.setCreateBy(loginUser.getUserPo().getUserId());
receiptInfoDO.setCreateByName(loginUser.getUserPo().getUserName());
receiptInfoDO.setCreateTime(new Date());
receiptInfoDOList.add(receiptInfoDO);
}
}
@@ -0,0 +1,205 @@
package com.mhd.oms.domain.salesOrder.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 销售订单对象 oms_sales_order
*
* @author gen
* @date 2024-06-08
*/
@Data
@TableName("oms_sales_order")
public class SalesOrder extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("审核人")
@Excel(name = "审核人")
private Long auditBy;
@ApiModelProperty("审核时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date auditTime;
@ApiModelProperty("审核状态;1待审核2通过3拒绝")
@Excel(name = "审核状态;1待审核2通过3拒绝")
private Integer auditState;
@ApiModelProperty("审核结果")
@Excel(name = "审核结果")
private String auditResult;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("销售单号")
@Excel(name = "销售单号")
private String orderNo;
@ApiModelProperty("订单状态;1待审核2已审核3已拒绝4已生成5部分销售6完成7已取消8已拦截")
@Excel(name = "订单状态;1待审核2已审核3已拒绝4已生成5部分销售6完成7已取消8已拦截")
private Integer orderState;
@ApiModelProperty("供应链订单号;生产供应链订单回填此字段,取消供应链置空此字段")
@Excel(name = "供应链订单号;生产供应链订单回填此字段,取消供应链置空此字段")
private String scoNo;
@ApiModelProperty("客户ID")
@Excel(name = "客户ID")
private Long customerId;
@ApiModelProperty("客户姓名")
@Excel(name = "客户姓名")
private String customer;
@ApiModelProperty("合计金额")
@Excel(name = "合计金额")
private BigDecimal totalAmount;
@ApiModelProperty("含税金额")
@Excel(name = "含税金额")
private BigDecimal taxAmount;
@ApiModelProperty("出库数量")
@Excel(name = "出库数量")
private Long inStorageNum;
@ApiModelProperty("订单类型ID")
@Excel(name = "订单类型ID")
private Long orderTypeId;
@ApiModelProperty("订单类型")
@Excel(name = "订单类型")
private String orderType;
@ApiModelProperty("作业任务类型ID")
@Excel(name = "作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
@ApiModelProperty("下发系统")
@Excel(name = "下发系统")
private String deliverySystem;
@ApiModelProperty("货主ID")
@Excel(name = "货主ID")
private Long shipperId;
@ApiModelProperty("货主")
@Excel(name = "货主")
private String shipper;
@ApiModelProperty("合同号")
@Excel(name = "合同号")
private String contractNo;
@ApiModelProperty("项目ID")
@Excel(name = "项目ID")
private String projectId;
@ApiModelProperty("项目")
@Excel(name = "项目")
private String project;
@ApiModelProperty("拦截状态;0未拦截1拦截成功2拦截失败")
@Excel(name = "拦截状态;0未拦截1拦截成功2拦截失败")
private Integer tacklState;
@ApiModelProperty("拦截时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "拦截时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date tacklTime;
@ApiModelProperty("来源;0-内部1-外部")
@Excel(name = "来源;0-内部1-外部")
private Integer source;
@ApiModelProperty("组织ID")
@Excel(name = "组织ID")
private Long orgId;
@ApiModelProperty("组织")
@Excel(name = "组织")
private String org;
@ApiModelProperty("订单时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "订单时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date orderTime;
@ApiModelProperty("发货仓库ID")
@Excel(name = "发货仓库ID")
private Long deliveryWarehouseId;
@ApiModelProperty("发货仓库")
@Excel(name = "发货仓库")
private String deliveryWarehouse;
@ApiModelProperty("发货日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "发货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date deliveryDate;
@ApiModelProperty("客户订单号")
@Excel(name = "客户订单号")
private String customerOrders;
@ApiModelProperty("校验库存是否充足;0-不校验1-校验")
@Excel(name = "校验库存是否充足;0-不校验1-校验")
private Long checkInventory;
@ApiModelProperty("优惠率")
@Excel(name = "优惠率")
private BigDecimal rateConcession;
@ApiModelProperty("优惠金额")
@Excel(name = "优惠金额")
private BigDecimal discountAmount;
@ApiModelProperty("成交价税合计")
@Excel(name = "成交价税合计")
private BigDecimal totalPriceTax;
@ApiModelProperty("附件名称")
@Excel(name = "附件名称")
private String fileName;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileUrl;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
}
@@ -0,0 +1,61 @@
package com.mhd.oms.domain.salesOrder.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.salesOrder.entity.SalesOrder;
import com.mhd.oms.domain.salesOrder.repository.po.SalesOrderDetailsPO;
import com.mhd.oms.domain.salesOrder.repository.po.SalesOrderPO;
import com.mhd.oms.domain.salesOrder.repository.todo.SalesOrderAuditDO;
import com.mhd.oms.domain.salesOrder.repository.todo.SalesOrderDO;
import java.util.List;
/**
* 销售订单Service接口
*
* @author gen
* @date 2024-06-08
*/
public interface ISalesOrderService extends IService<SalesOrder>
{
/**
* 分页查询销售订单列表
*/
public List<SalesOrderPO> queryList(SalesOrderDO salesOrderDO);
/**
* 新增销售订单
*/
public Boolean insert(SalesOrderDO salesOrderDO);
/** 新增并返回实体 */
public SalesOrder insertReturnEntity(SalesOrderDO salesOrderDO);
/**
* 修改销售订单
*/
public Boolean update(SalesOrderDO salesOrderDO);
/**
* 批量删除销售订单
*/
public Boolean delete(Long[] ids);
/**
* 查询销售订单
*/
public SalesOrderPO getInfo(Long id);
List<SalesOrderPO> getInfos(List<Long> ids);
Boolean batchUpdate(List<SalesOrderDO> salesOrderDOS);
Boolean audit(SalesOrderAuditDO salesOrderAuditDO);
Boolean cancelAudit(SalesOrderAuditDO salesOrderAuditDO);
Long insertReturnId(SalesOrderDO salesOrderDO);
void updateStateById(Long id, Integer state);
SalesOrderDetailsPO getetails(Long id);
}
@@ -0,0 +1,29 @@
package com.mhd.oms.domain.salesOrder.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.OrderInfoPO;
import com.mhd.oms.domain.salesOrder.entity.SalesOrder;
import com.mhd.oms.domain.salesOrder.repository.po.SalesOrderPO;
import com.mhd.oms.domain.salesOrder.repository.todo.SalesOrderDO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 销售订单Mapper接口
*
* @author gen
* @date 2024-06-08
*/
public interface SalesOrderMapper extends BaseMapper<SalesOrder>
{
/**
* 查询销售订单列表
*/
public List<SalesOrderPO> queryList(SalesOrderDO salesOrderDO);
List<SalesOrderPO> getInfosById(@Param("ids") List<Long> ids);
@Select("select order_no, shipper, order_type, customer_orders, tackl_state,job_task_type,customer_id,shipper_id, order_type_id from oms_sales_order where id = #{orderId}")
OrderInfoPO selectOrderInfoByOrderId(Long orderId);
}
@@ -0,0 +1,279 @@
package com.mhd.oms.domain.salesOrder.repository.persistence;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
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.OrderConstant;
import com.mhd.oms.domain.deliveryInfo.entity.DeliveryInfo;
import com.mhd.oms.domain.deliveryInfo.repository.mapper.DeliveryInfoMapper;
import com.mhd.oms.domain.deliveryInfo.repository.po.DeliveryInfoPO;
import com.mhd.oms.domain.goods.entity.Goods;
import com.mhd.oms.domain.goods.repository.mapper.GoodsMapper;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.logistics.entity.Logistics;
import com.mhd.oms.domain.logistics.repository.mapper.LogisticsMapper;
import com.mhd.oms.domain.logistics.repository.po.LogisticsPO;
import com.mhd.oms.domain.receiptInfo.entity.ReceiptInfo;
import com.mhd.oms.domain.receiptInfo.repository.mapper.ReceiptInfoMapper;
import com.mhd.oms.domain.receiptInfo.repository.po.ReceiptInfoPO;
import com.mhd.oms.domain.salesOrder.entity.SalesOrder;
import com.mhd.oms.domain.salesOrder.repository.facade.ISalesOrderService;
import com.mhd.oms.domain.salesOrder.repository.mapper.SalesOrderMapper;
import com.mhd.oms.domain.salesOrder.repository.po.SalesOrderDetailsPO;
import com.mhd.oms.domain.salesOrder.repository.po.SalesOrderPO;
import com.mhd.oms.domain.salesOrder.repository.todo.SalesOrderAuditDO;
import com.mhd.oms.domain.salesOrder.repository.todo.SalesOrderDO;
import com.mhd.oms.domain.settlement.entity.Settlement;
import com.mhd.oms.domain.settlement.repository.mapper.SettlementMapper;
import com.mhd.oms.domain.settlement.repository.po.SettlementPO;
import com.mhd.system.api.model.LoginUser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 销售订单Service业务层处理
*
* @author gen
* @date 2024-06-08
*/
@Service
public class SalesOrderImpl extends ServiceImpl<SalesOrderMapper, SalesOrder> implements ISalesOrderService {
@Autowired
private SalesOrderMapper salesOrderMapper;
@Resource
private SettlementMapper settlementMapper;
@Resource
private DeliveryInfoMapper deliveryInfoMapper;
@Resource
private ReceiptInfoMapper receiptInfoMapper;
@Resource
private LogisticsMapper logisticsMapper;
@Resource
private GoodsMapper goodsMapper;
/**
* 查询销售订单列表
*/
@Override
public List<SalesOrderPO> queryList(SalesOrderDO salesOrderDO)
{
return salesOrderMapper.queryList(salesOrderDO);
}
/**
* 新增销售订单
*/
@Override
public Boolean insert(SalesOrderDO salesOrderDO) {
SalesOrder salesOrder = new SalesOrder();
BeanUtils.copyProperties(salesOrderDO,salesOrder);
return this.save(salesOrder);
}
@Override
public SalesOrder insertReturnEntity(SalesOrderDO salesOrderDO) {
SalesOrder salesOrder = new SalesOrder();
BeanUtils.copyProperties(salesOrderDO,salesOrder);
this.save(salesOrder);
return salesOrder;
}
/**
* 修改销售订单
*/
@Override
public Boolean update(SalesOrderDO salesOrderDO) {
SalesOrder salesOrder = new SalesOrder();
BeanUtils.copyProperties(salesOrderDO,salesOrder);
return this.updateById(salesOrder);
}
/**
* 批量删除销售订单
*/
@Override
public Boolean delete(Long[] ids ) {
List<SalesOrder> list = new ArrayList<>();
for (Long id : ids) {
SalesOrder salesOrder = new SalesOrder();
salesOrder.setId(id);
salesOrder.setDelFlag(2);
list.add(salesOrder);
}
return this.updateBatchById(list);
}
/**
* 修改销售订单
*/
@Override
public SalesOrderPO getInfo(Long id) {
SalesOrder salesOrder = this.getById(id);
SalesOrderPO salesOrderPO = new SalesOrderPO();
BeanUtils.copyProperties(salesOrder,salesOrderPO);
return salesOrderPO;
}
@Override
public List<SalesOrderPO> getInfos(List<Long> ids) {
return salesOrderMapper.getInfosById(ids);
}
@Override
public Boolean batchUpdate(List<SalesOrderDO> salesOrderDOS) {
List<SalesOrder> salesOrders = new ArrayList<>();
for (SalesOrderDO salesOrderDO : salesOrderDOS) {
SalesOrder salesOrder = new SalesOrder();
BeanUtils.copyProperties(salesOrderDO,salesOrder);
salesOrders.add(salesOrder);
}
return this.updateBatchById(salesOrders);
}
@Override
public Boolean audit(SalesOrderAuditDO salesOrderAuditDO) {
List<SalesOrder> salesOrders = new ArrayList<>();
List<Long> ids = Convert.toList(Long.class, salesOrderAuditDO.getIds());
for (Long id : ids) {
SalesOrder salesOrder = this.getById(id);
if (ObjectUtil.isNull(salesOrder)) {
throw new ServiceException("未查询到销售订单信息");
}
if (salesOrder.getOrderState() != 1) {
throw new ServiceException(String.format("订单号【%s】订单状态不符合预期,仅在待审核状态下才允许审核", salesOrder.getOrderNo()));
}
salesOrder.setAuditBy(salesOrderAuditDO.getAuditBy());
salesOrder.setAuditTime(new Date());
salesOrder.setAuditState(salesOrderAuditDO.getAuditState());
salesOrder.setAuditResult(salesOrderAuditDO.getAuditResult());
salesOrder.setOrderState(salesOrderAuditDO.getAuditState());
salesOrder.setUpdateBy(salesOrderAuditDO.getUpdateBy());
salesOrder.setUpdateTime(salesOrderAuditDO.getUpdateTime());
salesOrder.setUpdateByName(salesOrderAuditDO.getUpdateByName());
salesOrders.add(salesOrder);
}
return this.updateBatchById(salesOrders);
}
@Override
public Boolean cancelAudit(SalesOrderAuditDO salesOrderAuditDO) {
List<SalesOrder> salesOrders = new ArrayList<>();
List<Long> ids = Convert.toList(Long.class, salesOrderAuditDO.getIds());
for (Long id : ids) {
SalesOrder salesOrder = this.getById(id);
if (ObjectUtil.isNull(salesOrder)) {
throw new ServiceException("未查询到销售订单信息");
}
if (ArrayUtil.contains(OrderConstant.SO_STATUS_GROUP_UNABLE_CANCEL_AUDIT, salesOrder.getOrderState())) {
throw new ServiceException(String.format("订单号【%s】订单状态不符合预期,仅在待审核状态下才允许审核", salesOrder.getOrderNo()));
}
salesOrder.setAuditBy(salesOrderAuditDO.getAuditBy());
salesOrder.setAuditTime(new Date());
salesOrder.setAuditState(OrderConstant.PUR_STATUS_1);
salesOrder.setAuditResult("");
salesOrder.setOrderState(1);
salesOrder.setUpdateBy(salesOrderAuditDO.getUpdateBy());
salesOrder.setUpdateTime(salesOrderAuditDO.getUpdateTime());
salesOrder.setUpdateByName(salesOrderAuditDO.getUpdateByName());
salesOrders.add(salesOrder);
}
return this.updateBatchById(salesOrders);
}
@Override
public Long insertReturnId(SalesOrderDO salesOrderDO) {
SalesOrder salesOrder = new SalesOrder();
BeanUtils.copyProperties(salesOrderDO,salesOrder);
this.save(salesOrder);
return salesOrder.getId();
}
@Override
public void updateStateById(Long id, Integer state) {
LoginUser loginUser = SecurityUtils.getLoginUser();
salesOrderMapper.update(new SalesOrder(), new LambdaUpdateWrapper<SalesOrder>()
.set(SalesOrder::getOrderState, state)
.set(SalesOrder::getUpdateBy, loginUser.getUserid())
.set(SalesOrder::getUpdateByName, loginUser.getUsername())
.set(SalesOrder::getUpdateTime, new Date())
.eq(SalesOrder::getId, id));
}
@Override
public SalesOrderDetailsPO getetails(Long id) {
SalesOrderDetailsPO salesOrderDetailsPO = new SalesOrderDetailsPO();
SalesOrder salesOrder = this.getById(id);
SalesOrderPO salesOrderPO = new SalesOrderPO();
if (ObjectUtil.isNull(salesOrder)) {
throw new ServiceException("未查询到对应的销售单信息");
}
BeanUtils.copyProperties(salesOrder,salesOrderPO);
salesOrderDetailsPO.setSalesOrderPO(salesOrderPO);
SettlementPO settlementPO = new SettlementPO();
Settlement settlement = settlementMapper.selectOne(new LambdaQueryWrapper<Settlement>()
.eq(Settlement::getOrderId, id).eq(Settlement::getDelFlag, 1));
if (ObjectUtil.isNull(settlement)) {//结算单对象可以为空如果为空则认为结算单没有数据
settlement = new Settlement();
}
BeanUtils.copyProperties(settlement,settlementPO);
salesOrderDetailsPO.setSettlementPO(settlementPO);
DeliveryInfoPO deliveryInfoPO = new DeliveryInfoPO();
DeliveryInfo deliveryInfo = deliveryInfoMapper.selectOne(new LambdaQueryWrapper<DeliveryInfo>()
.eq(DeliveryInfo::getOrderId, id).eq(DeliveryInfo::getDelFlag, 1));
if (ObjectUtil.isNull(deliveryInfo)) {
deliveryInfo = new DeliveryInfo();
}
BeanUtils.copyProperties(deliveryInfo, deliveryInfoPO);
salesOrderDetailsPO.setDeliveryInfoPO(deliveryInfoPO);
ReceiptInfoPO receiptInfoPO = new ReceiptInfoPO();
ReceiptInfo receiptInfo = receiptInfoMapper.selectOne(new LambdaQueryWrapper<ReceiptInfo>()
.eq(ReceiptInfo::getOrderId, id).eq(ReceiptInfo::getDelFlag, 1));
if (ObjectUtil.isNull(receiptInfo)) {
receiptInfo = new ReceiptInfo();
}
BeanUtils.copyProperties(receiptInfo, receiptInfoPO);
salesOrderDetailsPO.setReceiptInfoPO(receiptInfoPO);
LogisticsPO logisticsPO = new LogisticsPO();
Logistics logistics = logisticsMapper.selectOne(new LambdaQueryWrapper<Logistics>()
.eq(Logistics::getOrderId, id).eq(Logistics::getDelFlag, 1));
if (ObjectUtil.isNull(logistics)) {
logistics = new Logistics();
}
BeanUtils.copyProperties(logistics, logisticsPO);
salesOrderDetailsPO.setLogisticsPO(logisticsPO);
List<Goods> goodsList = goodsMapper.selectList(new LambdaQueryWrapper<Goods>()
.eq(Goods::getOrderId, id).eq(Goods::getDelFlag, 1));
List<GoodsPO> goodsPOList = goodsList.stream().map(goods -> {
GoodsPO goodsPO = new GoodsPO();
BeanUtils.copyProperties(goods, goodsPO);
return goodsPO;
}).collect(Collectors.toList());
salesOrderDetailsPO.setGoodsPOList(goodsPOList);
return salesOrderDetailsPO;
}
}
@@ -0,0 +1,47 @@
package com.mhd.oms.domain.salesOrder.repository.po;
import com.mhd.oms.domain.deliveryInfo.repository.po.DeliveryInfoPO;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.logistics.repository.po.LogisticsPO;
import com.mhd.oms.domain.receiptInfo.repository.po.ReceiptInfoPO;
import com.mhd.oms.domain.settlement.repository.po.SettlementPO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 销售订单对象 oms_sales_order
*
* @author gen
* @date 2024-06-08
*/
@Data
@ApiModel(value = "销售订单详情对象", description = "销售订单详情对象")
public class SalesOrderDetailsPO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("基本信息")
private SalesOrderPO salesOrderPO;
@ApiModelProperty("结算信息")
private SettlementPO settlementPO;
@ApiModelProperty("发货信息")
private DeliveryInfoPO deliveryInfoPO;
@ApiModelProperty("收货信息")
private ReceiptInfoPO receiptInfoPO;
@ApiModelProperty("物流信息")
private LogisticsPO logisticsPO;
@ApiModelProperty("物料信息")
private List<GoodsPO> goodsPOList;
}
@@ -0,0 +1,197 @@
package com.mhd.oms.domain.salesOrder.repository.po;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 销售订单对象 oms_sales_order
*
* @author gen
* @date 2024-06-08
*/
@Data
@ApiModel(value = "销售订单对象", description = "销售订单响应对象")
public class SalesOrderPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("审核人")
@Excel(name = "审核人")
private String auditBy;
@ApiModelProperty("审核时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date auditTime;
@ApiModelProperty("审核状态;0待审核1通过2拒绝")
@Excel(name = "审核状态;0待审核1通过2拒绝")
private Integer auditState;
@ApiModelProperty("审核结果")
@Excel(name = "审核结果")
private String auditResult;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("销售单号")
@Excel(name = "销售单号")
private String orderNo;
@ApiModelProperty("订单状态;1待审核2已审核3已拒绝4已生成5部分销售6完成7已取消8已拦截")
@Excel(name = "订单状态;1待审核2已审核3已拒绝4已生成5部分销售6完成7已取消8已拦截")
private Integer orderState;
@ApiModelProperty("供应链订单号;生产供应链订单回填此字段,取消供应链置空此字段")
@Excel(name = "供应链订单号;生产供应链订单回填此字段,取消供应链置空此字段")
private String scoNo;
@ApiModelProperty("客户ID")
@Excel(name = "客户ID")
private Long customerId;
@ApiModelProperty("客户姓名")
@Excel(name = "客户姓名")
private String customer;
@ApiModelProperty("合计金额")
@Excel(name = "合计金额")
private BigDecimal totalAmount;
@ApiModelProperty("含税金额")
@Excel(name = "含税金额")
private BigDecimal taxAmount;
@ApiModelProperty("出库数量")
@Excel(name = "出库数量")
private Long inStorageNum;
@ApiModelProperty("订单类型ID")
@Excel(name = "订单类型ID")
private Long orderTypeId;
@ApiModelProperty("订单类型")
@Excel(name = "订单类型")
private String orderType;
@ApiModelProperty("货主ID")
@Excel(name = "货主ID")
private Long shipperId;
@ApiModelProperty("货主")
@Excel(name = "货主")
private String shipper;
@ApiModelProperty("合同号")
@Excel(name = "合同号")
private String contractNo;
@ApiModelProperty("项目ID")
@Excel(name = "项目ID")
private String projectId;
@ApiModelProperty("项目")
@Excel(name = "项目")
private String project;
@ApiModelProperty("拦截状态;0未拦截1拦截成功2拦截失败")
@Excel(name = "拦截状态;0未拦截1拦截成功2拦截失败")
private Integer tacklState;
@ApiModelProperty("拦截时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "拦截时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date tacklTime;
@ApiModelProperty("来源;0-内部1-外部")
@Excel(name = "来源;0-内部1-外部")
private Integer source;
@ApiModelProperty("组织ID")
@Excel(name = "组织ID")
private Long orgId;
@ApiModelProperty("组织")
@Excel(name = "组织")
private String org;
@ApiModelProperty("订单时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "订单时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date orderTime;
@ApiModelProperty("发货仓库ID")
@Excel(name = "发货仓库ID")
private Long deliveryWarehouseId;
@ApiModelProperty("发货仓库")
@Excel(name = "发货仓库")
private String deliveryWarehouse;
@ApiModelProperty("发货日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "发货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date deliveryDate;
@ApiModelProperty("客户订单号")
@Excel(name = "客户订单号")
private String customerOrders;
@ApiModelProperty("校验库存是否充足;0-不校验1-校验")
@Excel(name = "校验库存是否充足;0-不校验1-校验")
private Long checkInventory;
@ApiModelProperty("优惠率")
@Excel(name = "优惠率")
private BigDecimal rateConcession;
@ApiModelProperty("优惠金额")
@Excel(name = "优惠金额")
private BigDecimal discountAmount;
@ApiModelProperty("成交价税合计")
@Excel(name = "成交价税合计")
private BigDecimal totalPriceTax;
@ApiModelProperty("附件名称")
@Excel(name = "附件名称")
private String fileName;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileUrl;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty("作业任务类型ID")
@Excel(name = "作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
}
@@ -0,0 +1,44 @@
package com.mhd.oms.domain.salesOrder.repository.todo;
import com.mhd.oms.domain.deliveryInfo.repository.todo.DeliveryInfoDO;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import com.mhd.oms.domain.logistics.repository.todo.LogisticsDO;
import com.mhd.oms.domain.receiptInfo.repository.todo.ReceiptInfoDO;
import com.mhd.oms.domain.settlement.repository.todo.SettlementDO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 销售订单对象 oms_sales_order
*
* @author gen
* @date 2024-06-08
*/
@Data
public class SalesOrderAddDO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("基本信息")
private SalesOrderDO salesOrderDO;
@ApiModelProperty("结算信息")
private SettlementDO settlementDO;
@ApiModelProperty("发货信息")
private DeliveryInfoDO deliveryInfoDO;
@ApiModelProperty("收货信息")
private ReceiptInfoDO receiptInfoDO;
@ApiModelProperty("物流信息")
private LogisticsDO logisticsDO;
@ApiModelProperty("物料信息")
private List<GoodsDO> goodsDOS;
}
@@ -0,0 +1,43 @@
package com.mhd.oms.domain.salesOrder.repository.todo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 销售订单对象 oms_sales_order
*
* @author gen
* @date 2024-06-08
*/
@Data
public class SalesOrderAuditDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("采购订单ID集合")
private String ids;
@ApiModelProperty("审核人")
@Excel(name = "审核人")
private Long auditBy;
@ApiModelProperty("审核时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date auditTime;
@ApiModelProperty("审核状态;1待审核2通过3拒绝")
@Excel(name = "审核状态;1待审核2通过3拒绝")
private Integer auditState;
@ApiModelProperty("审核结果")
@Excel(name = "审核结果")
private String auditResult;
}
@@ -0,0 +1,205 @@
package com.mhd.oms.domain.salesOrder.repository.todo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 销售订单对象 oms_sales_order
*
* @author gen
* @date 2024-06-08
*/
@Data
public class SalesOrderDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("审核人")
@Excel(name = "审核人")
private String auditBy;
@ApiModelProperty("审核时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date auditTime;
@ApiModelProperty("审核状态;0待审核1通过2拒绝")
@Excel(name = "审核状态;0待审核1通过2拒绝")
private Integer auditState;
@ApiModelProperty("审核结果")
@Excel(name = "审核结果")
private String auditResult;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("销售单号")
@Excel(name = "销售单号")
private String orderNo;
@ApiModelProperty("订单状态;1待审核2已审核3已拒绝4已生成5部分销售6完成7已取消8已拦截")
@Excel(name = "订单状态;1待审核2已审核3已拒绝4已生成5部分销售6完成7已取消8已拦截")
private Integer orderState;
@ApiModelProperty("供应链订单号;生产供应链订单回填此字段,取消供应链置空此字段")
@Excel(name = "供应链订单号;生产供应链订单回填此字段,取消供应链置空此字段")
private String scoNo;
@ApiModelProperty("客户ID")
@Excel(name = "客户ID")
private Long customerId;
@ApiModelProperty("客户姓名")
@Excel(name = "客户姓名")
private String customer;
@ApiModelProperty("合计金额")
@Excel(name = "合计金额")
private BigDecimal totalAmount;
@ApiModelProperty("含税金额")
@Excel(name = "含税金额")
private BigDecimal taxAmount;
@ApiModelProperty("出库数量")
@Excel(name = "出库数量")
private Long inStorageNum;
@ApiModelProperty("订单类型ID")
@Excel(name = "订单类型ID")
private Long orderTypeId;
@ApiModelProperty("订单类型")
@Excel(name = "订单类型")
private String orderType;
@ApiModelProperty("作业任务类型ID")
@Excel(name = "作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型")
@Excel(name = "作业任务类型")
private String jobTaskType;
@ApiModelProperty("下发系统")
@Excel(name = "下发系统")
private String deliverySystem;
@ApiModelProperty("货主ID")
@Excel(name = "货主ID")
private Long shipperId;
@ApiModelProperty("货主")
@Excel(name = "货主")
private String shipper;
@ApiModelProperty("合同号")
@Excel(name = "合同号")
private String contractNo;
@ApiModelProperty("项目ID")
@Excel(name = "项目ID")
private String projectId;
@ApiModelProperty("项目")
@Excel(name = "项目")
private String project;
@ApiModelProperty("拦截状态;0未拦截1拦截成功2拦截失败")
@Excel(name = "拦截状态;0未拦截1拦截成功2拦截失败")
private Integer tacklState;
@ApiModelProperty("拦截时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "拦截时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date tacklTime;
@ApiModelProperty("来源;0-内部1-外部")
@Excel(name = "来源;0-内部1-外部")
private Integer source;
@ApiModelProperty("组织ID")
@Excel(name = "组织ID")
private Long orgId;
@ApiModelProperty("组织")
@Excel(name = "组织")
private String org;
@ApiModelProperty("订单时间")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "订单时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date orderTime;
@ApiModelProperty("发货仓库ID")
@Excel(name = "发货仓库ID")
private Long deliveryWarehouseId;
@ApiModelProperty("发货仓库")
@Excel(name = "发货仓库")
private String deliveryWarehouse;
@ApiModelProperty("发货日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "发货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date deliveryDate;
@ApiModelProperty("客户订单号")
@Excel(name = "客户订单号")
private String customerOrders;
@ApiModelProperty("校验库存是否充足;0-不校验1-校验")
@Excel(name = "校验库存是否充足;0-不校验1-校验")
private Long checkInventory;
@ApiModelProperty("优惠率")
@Excel(name = "优惠率")
private BigDecimal rateConcession;
@ApiModelProperty("优惠金额")
@Excel(name = "优惠金额")
private BigDecimal discountAmount;
@ApiModelProperty("成交价税合计")
@Excel(name = "成交价税合计")
private BigDecimal totalPriceTax;
@ApiModelProperty("附件名称")
@Excel(name = "附件名称")
private String fileName;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileUrl;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
}
@@ -0,0 +1,130 @@
package com.mhd.oms.domain.salesOrder.service;
import cn.hutool.core.util.ObjectUtil;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.salesOrder.entity.SalesOrder;
import com.mhd.oms.domain.salesOrder.repository.facade.ISalesOrderService;
import com.mhd.oms.domain.salesOrder.repository.po.SalesOrderDetailsPO;
import com.mhd.oms.domain.salesOrder.repository.po.SalesOrderPO;
import com.mhd.oms.domain.salesOrder.repository.todo.SalesOrderAuditDO;
import com.mhd.oms.domain.salesOrder.repository.todo.SalesOrderDO;
import com.mhd.oms.interfaces.dto.salesOrder.SalesOrderExcelDTO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 销售订单
*
* @author gen
* @date 2024-06-08
*/
@Service
@Slf4j
public class SalesOrderDomainService {
@Autowired
private ISalesOrderService salesOrderService;
/**
* 分页查询销售订单列表
*/
public List<SalesOrderPO> queryList(SalesOrderDO salesOrderDO) {
return salesOrderService.queryList(salesOrderDO);
}
/**
* 新增销售订单
*/
public Boolean insert(SalesOrderDO salesOrderDO) {
return salesOrderService.insert(salesOrderDO);
}
/**
* 修改销售订单
*/
public Boolean update(SalesOrderDO salesOrderDO) {
return salesOrderService.update(salesOrderDO);
}
/**
* 批量删除销售订单
*/
public Boolean delete(Long[] ids) {
return salesOrderService.delete(ids);
}
/**
* 获取销售订单详细信息
*/
public SalesOrderPO getInfo(Long id)
{
return salesOrderService.getInfo(id);
}
public List<SalesOrderPO> getInfos(List<Long> ids) {
return salesOrderService.getInfos(ids);
}
public Boolean batchUpdate(List<SalesOrderDO> salesOrderDOS) {
return salesOrderService.batchUpdate(salesOrderDOS);
}
public Boolean audit(SalesOrderAuditDO salesOrderAuditDO) {
return salesOrderService.audit(salesOrderAuditDO);
}
public Boolean cancelAudit(SalesOrderAuditDO salesOrderAuditDO) {
return salesOrderService.cancelAudit(salesOrderAuditDO);
}
public Long insertReturnId(SalesOrderDO salesOrderDO) {
return salesOrderService.insertReturnId(salesOrderDO);
}
public void updateStateById(Long id, Integer state) {
salesOrderService.updateStateById(id, state);
}
public SalesOrderDetailsPO getetails(Long id) {
return salesOrderService.getetails(id);
}
/**
* 销售订单导入-保存销售订单信息
* @param salesOrderExcelDTO - 导入信息
* @return 保存的销售订单信息
*/
public SalesOrder saveFromImportSalesOrder(SalesOrderExcelDTO salesOrderExcelDTO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
SalesOrderDO salesOrderDO = new SalesOrderDO();
BeanUtils.copyProperties(salesOrderExcelDTO, salesOrderDO, IgnoreNullUtil.getNullPropertyNames(salesOrderExcelDTO));
salesOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
salesOrderDO.setCreateBy(loginUser.getUserPo().getUserId());
salesOrderDO.setCreateByName(loginUser.getUserPo().getUserName());
salesOrderDO.setCreateTime(new Date());
// 成交价税合计物料价税合计 - 优惠金额
if(ObjectUtil.isNotNull(salesOrderExcelDTO.getTaxAmount()) && ObjectUtil.isNotNull(salesOrderExcelDTO.getDiscountAmount())){
BigDecimal reachTotalAmount = salesOrderExcelDTO.getTaxAmount().subtract(salesOrderExcelDTO.getDiscountAmount());
if(BigDecimal.ZERO.compareTo(reachTotalAmount) >= 0){
throw new ServiceException("订单成交价税合计<=0,请检查物料价税合计与优惠金额数据!");
}
salesOrderDO.setTotalAmount(reachTotalAmount);
}
return salesOrderService.insertReturnEntity(salesOrderDO);
}
}
@@ -0,0 +1,73 @@
package com.mhd.oms.domain.scmOrder.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 供应链订单对象 oms_scm_order
*
* @author gen
* @date 2024-05-21
*/
@Data
@TableName("oms_scm_order")
public class ScmOrder extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("供应链订单来源;1采购订单2销售订单3运输订单")
@Excel(name = "供应链订单来源;1采购订单2销售订单3运输订单")
private Integer scmSource;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("供应链订单号")
@Excel(name = "供应链订单号")
private String scmNo;
@ApiModelProperty("订单状态;1未审核2已审核3部分生成4全部生成5部分完成6已完成7已取消8已拦截")
@Excel(name = "订单状态;1未审核2已审核3部分生成4全部生成5部分完成6已完成7已取消8已拦截")
private Integer orderState;
@ApiModelProperty("任务数量")
@Excel(name = "任务数量")
private Long taskNum;
@ApiModelProperty("有效数量")
@Excel(name = "有效数量")
private Long activeTaskNum;
@ApiModelProperty("完成数量")
@Excel(name = "完成数量")
private Long finishTaskNum;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
}
@@ -0,0 +1,71 @@
package com.mhd.oms.domain.scmOrder.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.scmOrder.entity.ScmOrder;
import com.mhd.oms.domain.scmOrder.repository.po.ScmOrderPO;
import com.mhd.oms.domain.scmOrder.repository.todo.ScmOrderDO;
import java.util.List;
import java.util.Map;
/**
* 供应链订单Service接口
*
* @author gen
* @date 2024-05-21
*/
public interface IScmOrderService extends IService<ScmOrder>
{
/**
* 分页查询供应链订单列表
*/
public List<ScmOrderPO> queryList(ScmOrderDO scmOrderDO);
/**
* 新增供应链订单
*/
public Boolean insert(ScmOrderDO scmOrderDO);
/**
* 修改供应链订单
*/
public Boolean update(ScmOrderDO scmOrderDO);
/**
* 批量删除供应链订单
*/
public Boolean delete(Long[] ids);
/**
* 查询供应链订单
*/
public ScmOrderPO getInfo(Long id);
/**
* 审核|取消审核批量
*
* @param exeState - 操作状态1-审核2-取消审核
* @param idList - 供应链订单ID列表
* @return 审核结果
*/
Boolean batchAuditOrCancelAudit(Integer exeState, List<String> idList);
/**
* 根据orderID拦截订单
*/
void interceptByOrderId(Long orderId);
Boolean batchInsert(List<ScmOrderDO> scmOrderDOS);
List<ScmOrderPO> getInfosByOrderId(List<Long> ids);
Boolean batchUpdate(List<ScmOrderDO> scmOrderDOS);
/**
* 获取传入ID列表的全部物料信息列表按传入的ID分组
* @param idList - 供应链订单ID列表
* @return k-供应链idv-对应物料列表
*/
Map<Long, List<ScmOrderPO>> getGoodsAndTaskInfoList(List<Long> idList);
}
@@ -0,0 +1,45 @@
package com.mhd.oms.domain.scmOrder.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.common.core.domain.po.UserPo;
import com.mhd.oms.domain.scmOrder.entity.ScmOrder;
import com.mhd.oms.domain.scmOrder.repository.po.ScmOrderPO;
import com.mhd.oms.domain.scmOrder.repository.todo.ScmOrderDO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 供应链订单Mapper接口
*
* @author gen
* @date 2024-05-21
*/
public interface ScmOrderMapper extends BaseMapper<ScmOrder>
{
/**
* 查询供应链订单列表
*/
public List<ScmOrderPO> queryList(ScmOrderDO scmOrderDO);
/**
* 批量修改供应链订单状态
*
* @param idList - 供应链订单ID列表
* @param orderState - 订单状态
* @param userPo - 审核人信息当前登录人
*/
Boolean batchUpdateOrderState(@Param("idList") List<String> idList, @Param("orderState") Integer orderState, @Param("userPo") UserPo userPo);
/**
* 获取传入ID列表中对应的全部物料信息列表
* @param idList - 供应链订单ID列表
* @return - 物料信息列表
*/
List<ScmOrderPO> getGoodsAndTaskInfoList(@Param("idList") List<Long> idList);
@Select("select scm_no from oms_scm_order where order_id = #{orderId} and del_flag = 1 and order_state not in (7,8)")
String selectScmOrderNoByOrderId(@Param("orderId") Long orderId);
}
@@ -0,0 +1,220 @@
package com.mhd.oms.domain.scmOrder.repository.persistence;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
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.OrderConstant;
import com.mhd.oms.domain.OrderInfoPO;
import com.mhd.oms.domain.purchaseOrder.repository.mapper.PurchaseOrderMapper;
import com.mhd.oms.domain.salesOrder.repository.mapper.SalesOrderMapper;
import com.mhd.oms.domain.scmOrder.entity.ScmOrder;
import com.mhd.oms.domain.scmOrder.repository.facade.IScmOrderService;
import com.mhd.oms.domain.scmOrder.repository.mapper.ScmOrderMapper;
import com.mhd.oms.domain.scmOrder.repository.po.ScmOrderPO;
import com.mhd.oms.domain.scmOrder.repository.todo.ScmOrderDO;
import com.mhd.system.api.model.LoginUser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* 供应链订单Service业务层处理
*
* @author gen
* @date 2024-05-21
*/
@Service
public class ScmOrderImpl extends ServiceImpl<ScmOrderMapper, ScmOrder> implements IScmOrderService{
@Autowired
private ScmOrderMapper scmOrderMapper;
@Resource
private PurchaseOrderMapper purchaseOrderMapper;
@Resource
private SalesOrderMapper salesOrderMapper;
/**
* 查询供应链订单列表
*/
@Override
public List<ScmOrderPO> queryList(ScmOrderDO scmOrderDO)
{
List<ScmOrderPO> scmOrderPOS = scmOrderMapper.queryList(scmOrderDO);
OrderInfoPO orderInfoPO = new OrderInfoPO();
for (ScmOrderPO scmOrderPO : scmOrderPOS) {
switch (scmOrderPO.getScmSource()) {
case 1://采购订单
orderInfoPO = purchaseOrderMapper.selectOrderInfoByOrderId(scmOrderPO.getOrderId());
break;
case 2://销售订单
orderInfoPO = salesOrderMapper.selectOrderInfoByOrderId(scmOrderPO.getOrderId());
break;
case 3://运输订单
break;
}
scmOrderPO.setOrderNo(orderInfoPO.getOrderNo());
scmOrderPO.setShipper(orderInfoPO.getShipper());
scmOrderPO.setOrderType(orderInfoPO.getOrderType());
scmOrderPO.setCustomerOrders(orderInfoPO.getCustomerOrders());
scmOrderPO.setTacklState(orderInfoPO.getTacklState());
scmOrderPO.setJobTaskType(orderInfoPO.getJobTaskType());
}
return scmOrderPOS;
}
/**
* 新增供应链订单
*/
@Override
public Boolean insert(ScmOrderDO scmOrderDO) {
ScmOrder scmOrder = new ScmOrder();
BeanUtils.copyProperties(scmOrderDO,scmOrder);
return this.save(scmOrder);
}
/**
* 修改供应链订单
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean update(ScmOrderDO scmOrderDO) {
ScmOrder scmOrder = new ScmOrder();
BeanUtils.copyProperties(scmOrderDO,scmOrder);
return this.updateById(scmOrder);
}
/**
* 批量删除供应链订单
*/
@Override
public Boolean delete(Long[] ids ) {
// 根据ID集合查询所有的供应链订单信息
List<ScmOrder> scmOrders = this.listByIds(Arrays.asList(ids));
// 供应链订单状态只有是已取消已拦截状态下的订单才可以删除
List<ScmOrder> scmOrderList = scmOrders.stream().filter(scmOrder -> scmOrder.getOrderState() != 7
&& scmOrder.getOrderState() != 8).collect(Collectors.toList());
if (!scmOrderList.isEmpty()) {
throw new ServiceException("已取消/已拦截的订单状态才可以删除");
}
for (ScmOrder scmOrder : scmOrders) {
scmOrder.setDelFlag(2);
}
return this.updateBatchById(scmOrders);
}
/**
* 修改供应链订单
*/
@Override
public ScmOrderPO getInfo(Long id) {
ScmOrder scmOrder = this.getById(id);
ScmOrderPO scmOrderPO = new ScmOrderPO();
if(ObjectUtils.isNull(scmOrder)){
return null;
}
BeanUtils.copyProperties(scmOrder,scmOrderPO);
return scmOrderPO;
}
/**
* 审核|取消审核批量
*
* @param exeState - 操作状态1-审核2-取消审核
* @param idList - 供应链订单ID列表
* @return 审核结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean batchAuditOrCancelAudit(Integer exeState, List<String> idList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if(idList.size() == 0){
throw new ServiceException("供应链订单ID列表不能为空");
}
// 查询列表中符合对应当前操作状态的数据审核-未审核状态的订单取消审核-审核通过的订单
ScmOrderDO scmOrderDO = new ScmOrderDO(idList, exeState);
List<ScmOrderPO> scmOrderList = scmOrderMapper.queryList(scmOrderDO);
if(scmOrderList.size() != idList.size()){
throw new ServiceException("存在非【"+ (exeState == 1 ? "未审核" : "审核通过") +"】状态订单!");
}
return scmOrderMapper.batchUpdateOrderState(idList,
exeState == 1 ? OrderConstant.SCM_STATUS_2 : OrderConstant.SCM_STATUS_1,
loginUser.getUserPo());
}
@Override
public void interceptByOrderId(Long orderId) {
LoginUser loginUser = SecurityUtils.getLoginUser();
scmOrderMapper.update(new ScmOrder(), new LambdaUpdateWrapper<ScmOrder>()
.set(ScmOrder::getOrderState, OrderConstant.SCM_STATUS_8)
.set(ScmOrder::getUpdateBy, loginUser.getUserid())
.set(ScmOrder::getUpdateByName, loginUser.getUsername())
.set(ScmOrder::getUpdateTime, new Date())
.eq(ScmOrder::getOrderId, orderId)
.eq(ScmOrder::getDelFlag, 1)
.ne(ScmOrder::getOrderState, OrderConstant.SCM_STATUS_7));
}
@Transactional
@Override
public Boolean batchInsert(List<ScmOrderDO> scmOrderDOS) {
List<ScmOrder> scmOrders = new ArrayList<>();
for (ScmOrderDO scmOrderDO : scmOrderDOS) {
ScmOrder scmOrder = new ScmOrder();
BeanUtils.copyProperties(scmOrderDO,scmOrder);
scmOrders.add(scmOrder);
}
return this.saveBatch(scmOrders);
}
@Override
public List<ScmOrderPO> getInfosByOrderId(List<Long> ids) {
List<ScmOrder> scmOrders = this.scmOrderMapper.selectList(new LambdaQueryWrapper<ScmOrder>().in(ScmOrder::getOrderId, ids)
.eq(ScmOrder::getDelFlag, 1));
return scmOrders.stream().map(scmOrder -> {
ScmOrderPO scmOrderPO = new ScmOrderPO();
BeanUtils.copyProperties(scmOrder,scmOrderPO);
return scmOrderPO;
}).collect(Collectors.toList());
}
@Override
public Boolean batchUpdate(List<ScmOrderDO> scmOrderDOS) {
List<ScmOrder> scmOrders = new ArrayList<>();
for (ScmOrderDO scmOrderDO : scmOrderDOS) {
ScmOrder scmOrder = new ScmOrder();
BeanUtils.copyProperties(scmOrderDO,scmOrder);
scmOrders.add(scmOrder);
}
return this.updateBatchById(scmOrders);
}
@Override
public Map<Long, List<ScmOrderPO>> getGoodsAndTaskInfoList(List<Long> idList) {
if(idList.size() == 0){
throw new ServiceException("供应链订单ID不能为空");
}
List<ScmOrderPO> goodsAndTaskInfoList = scmOrderMapper.getGoodsAndTaskInfoList(idList);
return goodsAndTaskInfoList.stream().collect(Collectors.groupingBy(ScmOrderPO::getId));
}
}
@@ -0,0 +1,100 @@
package com.mhd.oms.domain.scmOrder.repository.po;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 供应链订单对象 oms_scm_order
*
* @author gen
* @date 2024-05-21
*/
@Data
@ApiModel(value = "供应链订单对象", description = "供应链订单响应对象")
public class ScmOrderPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("供应链订单来源:1-采购订单、2-销售订单、3-运输订单")
@Excel(name = "供应链订单来源;1采购订单2销售订单3运输订单")
private Integer scmSource;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("供应链订单号")
@Excel(name = "供应链订单号")
private String scmNo;
@ApiModelProperty("订单状态;1-未审核、2-已审核、3-部分生成、4-全部生成、5-部分完成、6-已完成、7-已取消、8-已拦截")
@Excel(name = "订单状态;1未审核2已审核3部分生成4全部生成5部分完成6已完成7已取消8已拦截")
private Integer orderState;
@ApiModelProperty("任务数量")
@Excel(name = "任务数量")
private Long taskNum;
@ApiModelProperty("有效数量")
@Excel(name = "有效数量")
private Long activeTaskNum;
@ApiModelProperty("完成数量")
@Excel(name = "完成数量")
private Long finishTaskNum;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty("物料ID")
private Long goodsId;
@ApiModelProperty("总物料数量")
private BigDecimal totalGoodsNum;
@ApiModelProperty("已生成物料数量")
private BigDecimal existedGoodsNum;
@ApiModelProperty("仓库ID")
private Long warehouseId;
@ApiModelProperty("仓库名称")
private String warehouseName;
@ApiModelProperty("作业任务类型ID")
private Integer jobTaskTypeId;
@ApiModelProperty("作业任务类型名称")
private String jobTaskType;
@ApiModelProperty("订单号/商流订单号")
private String orderNo;
@ApiModelProperty("货主")
private String shipper;
@ApiModelProperty("业务订单类型")
private String orderType;
@ApiModelProperty("客户订单号")
private String customerOrders;
@ApiModelProperty("拦截状态;0未拦截1拦截成功2拦截失败")
private Integer tacklState;
}
@@ -0,0 +1,85 @@
package com.mhd.oms.domain.scmOrder.repository.todo;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 供应链订单对象 oms_scm_order
*
* @author gen
* @date 2024-05-21
*/
@Data
public class ScmOrderDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
private List<String> idList;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("供应链订单来源;1采购订单2销售订单3运输订单")
@Excel(name = "供应链订单来源;1采购订单2销售订单3运输订单")
private Integer scmSource;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("供应链订单号")
@Excel(name = "供应链订单号")
private String scmNo;
@ApiModelProperty("订单状态;1未审核2已审核3部分生成4全部生成5部分完成6已完成7已取消8已拦截")
@Excel(name = "订单状态;1未审核2已审核3部分生成4全部生成5部分完成6已完成7已取消8已拦截")
private Integer orderState;
@ApiModelProperty("任务数量")
@Excel(name = "任务数量")
private Long taskNum;
@ApiModelProperty("有效数量")
@Excel(name = "有效数量")
private Long activeTaskNum;
@ApiModelProperty("完成数量")
@Excel(name = "完成数量")
private Long finishTaskNum;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
public ScmOrderDO(){
}
public ScmOrderDO(List<String> idList, Integer orderState){
this.idList = idList;
this.orderState = orderState;
}
}
@@ -0,0 +1,217 @@
package com.mhd.oms.domain.scmOrder.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ArrayUtil;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.constant.OrderConstant;
import com.mhd.oms.domain.scmOrder.repository.facade.IScmOrderService;
import com.mhd.oms.domain.scmOrder.repository.po.ScmOrderPO;
import com.mhd.oms.domain.scmOrder.repository.todo.ScmOrderDO;
import com.mhd.oms.domain.taskOrder.repository.facade.ITaskOrderService;
import com.mhd.oms.domain.taskOrder.repository.po.TaskOrderPO;
import com.mhd.oms.domain.taskOrder.repository.todo.TaskOrderDO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 供应链订单
*
* @author gen
* @date 2024-05-21
*/
@Service
@Slf4j
public class ScmOrderDomainService {
@Autowired
private IScmOrderService scmOrderService;
@Resource
private ITaskOrderService taskOrderService;
/**
* 分页查询供应链订单列表
*/
public List<ScmOrderPO> queryList(ScmOrderDO scmOrderDO) {
return scmOrderService.queryList(scmOrderDO);
}
/**
* 新增供应链订单
*/
public Boolean insert(ScmOrderDO scmOrderDO) {
return scmOrderService.insert(scmOrderDO);
}
/**
* 修改供应链订单
*/
public Boolean update(ScmOrderDO scmOrderDO) {
return scmOrderService.update(scmOrderDO);
}
/**
* 批量删除供应链订单
*/
public Boolean delete(Long[] ids) {
return scmOrderService.delete(ids);
}
/**
* 获取供应链订单详细信息
*/
public ScmOrderPO getInfo(Long id)
{
return scmOrderService.getInfo(id);
}
/**
* 审核|取消审核批量
*
* @param exeState - 操作状态1-审核2-取消审核
* @param idList - 供应链订单ID列表
*/
public Boolean batchAuditOrCancelAudit(Integer exeState, List<String> idList) {
return scmOrderService.batchAuditOrCancelAudit(exeState, idList);
}
/**
* 更新供应链订单任务数量状态
* 下游作业任务取消后供应链订单需要进行更新对应的任务数量及状态
* @param ableCancelledScmIdList - 取消的作业任务列表ScmId不能为空
*/
public void updateFromCancelTask(List<TaskOrderPO> ableCancelledScmIdList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
// <供应链订单, List<对应可取消的作业任务列表>>
Map<Long, List<TaskOrderPO>> taskOrderMapGroupByScmId = ableCancelledScmIdList.stream().collect(Collectors.groupingBy(TaskOrderPO::getScmId));
taskOrderMapGroupByScmId.forEach((k,v) -> {
ScmOrderPO scmOrderPo = scmOrderService.getInfo(k);
// 查询供应链订单K下所有作业任务
TaskOrderDO taskOrderDO = new TaskOrderDO();
taskOrderDO.setScmId(k);
List<TaskOrderPO> taskOrderPoList = taskOrderService.queryList(taskOrderDO);
// 作业任务状态分组
Map<Integer, List<TaskOrderPO>> statusMap = taskOrderPoList.stream().collect(Collectors.groupingBy(TaskOrderPO::getTaskStatus));
// 更新供应链订单信息
ScmOrderDO scmOrderDo = new ScmOrderDO();
BeanUtil.copyProperties(scmOrderPo, scmOrderDo);
scmOrderDo.setActiveTaskNum(scmOrderDo.getActiveTaskNum() - v.size());
if(!statusMap.containsKey(OrderConstant.TASK_STATUS_0)
&& !statusMap.containsKey(OrderConstant.TASK_STATUS_1)
&& !statusMap.containsKey(OrderConstant.TASK_STATUS_2)){
scmOrderDo.setOrderState(OrderConstant.SCM_STATUS_2);
}
scmOrderDo.setUpdateBy(loginUser.getUserid());
scmOrderDo.setUpdateByName(loginUser.getUsername());
scmOrderDo.setUpdateTime(new Date());
scmOrderService.update(scmOrderDo);
});
}
/**
* 根据订单ORDER_ID修改供应链订单为拦截状态
* @param orderId - 订单ID
*/
public void interceptByOrderId(Long orderId) {
scmOrderService.interceptByOrderId(orderId);
}
public Boolean batchInsert(List<ScmOrderDO> scmOrderDOS) {
return scmOrderService.batchInsert(scmOrderDOS);
}
public List<ScmOrderPO> getInfosByOrderId(List<Long> ids) {
return scmOrderService.getInfosByOrderId(ids);
}
public Boolean batchUpdate(List<ScmOrderDO> scmOrderDOS) {
return scmOrderService.batchUpdate(scmOrderDOS);
}
/**
* 获取传入列表中对应的物料信息列表按传入的ID分组
* @param idList 供应链订单ID列表
* @return k-供应链idv-对应物料列表
*/
public Map<Long, List<ScmOrderPO>> getGoodsAndTaskInfoList(List<Long> idList) {
Map<Long, List<ScmOrderPO>> scmGoodsMap = scmOrderService.getGoodsAndTaskInfoList(idList);
if(scmGoodsMap.size() != idList.size()){
List<Long> ableCreateId = new ArrayList<>(scmGoodsMap.keySet());
idList.removeAll(ableCreateId);
throw new ServiceException("供应链订单ID"+ idList + "异常,不可生成任务");
}
return scmGoodsMap;
}
/**
* 更新key中的供应链订单组装传入的物料列表为作业任务并返回
* @param scmGoodsMap - 供应链订单对应的所有物料的信息列表
* @return - 应新增的作业任务列表
*/
public List<TaskOrderDO> handlerbatchCreateTaskOrder(Map<Long, List<ScmOrderPO>> scmGoodsMap) {
LoginUser loginUser = SecurityUtils.getLoginUser();
List<TaskOrderDO> taskOrderList = new ArrayList<>();
List<ScmOrderDO> scmOrderList = new ArrayList<>();
scmGoodsMap.forEach((k,v) -> {
// 供应链订单状态应处于可生成任务状态 任务列表中的订单状态为供应链订单的状态只判断1次就行
if(!ArrayUtil.contains(OrderConstant.SCM_STATUS_GROUP_CAN_GENERATE_TASK, v.get(0).getOrderState())){
throw new ServiceException("请检查供应链订单" + v.get(0).getScmNo() + "状态");
}
// ================== 处理应生成的作业任务新增到作业任务列表 =================
// 可创建任务的物料列表: 物料总数量 - 已生成作业任务数量 > 0
List<ScmOrderPO> ableCreateGoodsList = v.stream().filter(x -> BigDecimal.ZERO.compareTo(x.getTotalGoodsNum().subtract(x.getExistedGoodsNum())) < 0)
.collect(Collectors.toList());
ableCreateGoodsList.forEach(x -> {
TaskOrderDO taskOrderDO = new TaskOrderDO();
taskOrderDO.setCreateBy(loginUser.getUserid());
taskOrderDO.setCreateByName(loginUser.getUsername());
taskOrderDO.setCreateTime(new Date());
taskOrderDO.setScmId(k);
taskOrderDO.setWarehouseId(x.getWarehouseId());
taskOrderDO.setWarehouseName(x.getWarehouseName());
taskOrderDO.setPlanNum(x.getTotalGoodsNum().subtract(x.getExistedGoodsNum()));
taskOrderDO.setTaskTypeId(x.getJobTaskTypeId());
taskOrderDO.setTaskTypeName(x.getJobTaskType());
taskOrderDO.setGoodsId(x.getGoodsId());
taskOrderDO.setOrderId(x.getOrderId());
taskOrderDO.setScmSource(x.getScmSource());
taskOrderList.add(taskOrderDO);
});
// ============= 增加供应链订单的任务数量有效数量 =============
ScmOrderPO scmOrder = scmOrderService.getInfo(k);
ScmOrderDO scmOrderDO = new ScmOrderDO();
BeanUtils.copyProperties(scmOrder, scmOrderDO, IgnoreNullUtil.getNullPropertyNames(scmOrder));
scmOrderDO.setOrderState(OrderConstant.SCM_STATUS_4);
scmOrderDO.setTaskNum(scmOrderDO.getTaskNum() + ableCreateGoodsList.size());
scmOrderDO.setActiveTaskNum(scmOrderDO.getActiveTaskNum() + ableCreateGoodsList.size());
scmOrderList.add(scmOrderDO);
});
scmOrderService.batchUpdate(scmOrderList);
return taskOrderList;
}
}
@@ -0,0 +1,107 @@
package com.mhd.oms.domain.settlement.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 结算信息对象 oms_settlement
*
* @author gen
* @date 2024-05-16
*/
@Data
@TableName(value = "oms_settlement")
public class Settlement extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("结算对象ID")
@Excel(name = "结算对象ID")
private Long settlementObjId;
@ApiModelProperty("结算对象")
@Excel(name = "结算对象")
private String settlementObj;
@ApiModelProperty("结算方式ID")
@Excel(name = "结算方式ID")
private String settlementWayId;
@ApiModelProperty("结算方式")
@Excel(name = "结算方式")
private String settlementWay;
@ApiModelProperty("支付方式")
@Excel(name = "支付方式")
private String payMethod;
@ApiModelProperty("支付状态ID")
@Excel(name = "支付状态ID")
private String payStatusId;
@ApiModelProperty("支付状态")
@Excel(name = "支付状态")
private String payStatus;
@ApiModelProperty("预付金额")
@Excel(name = "预付金额")
private BigDecimal prepaidAmount;
@ApiModelProperty("实付金额;采购订单:本次付款")
@Excel(name = "实付金额;采购订单:本次付款")
private BigDecimal paidAmount;
@ApiModelProperty("欠款金额;采购订单:本次欠款")
@Excel(name = "欠款金额;采购订单:本次欠款")
private BigDecimal debtAmount;
@ApiModelProperty("付款账号")
@Excel(name = "付款账号")
private String paymentAccNo;
@ApiModelProperty("付款单号")
@Excel(name = "付款单号")
private String paymentOrderNo;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileName;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileUrl;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
}
@@ -0,0 +1,48 @@
package com.mhd.oms.domain.settlement.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.settlement.entity.Settlement;
import com.mhd.oms.domain.settlement.repository.po.SettlementPO;
import com.mhd.oms.domain.settlement.repository.todo.SettlementDO;
import java.util.List;
/**
* 结算信息Service接口
*
* @author gen
* @date 2024-05-16
*/
public interface ISettlementService extends IService<Settlement>
{
/**
* 分页查询结算信息列表
*/
public List<SettlementPO> queryList(SettlementDO settlementDO);
/**
* 新增结算信息
*/
public Boolean insert(SettlementDO settlementDO);
/**
* 修改结算信息
*/
public Boolean update(SettlementDO settlementDO);
/**
* 批量删除结算信息
*/
public Boolean delete(Long[] ids);
/**
* 查询结算信息
*/
public SettlementPO getInfo(Long id);
/**
* 批量新增
*/
Boolean batchInsert(List<SettlementDO> settlementDOList);
}
@@ -0,0 +1,23 @@
package com.mhd.oms.domain.settlement.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.settlement.entity.Settlement;
import com.mhd.oms.domain.settlement.repository.po.SettlementPO;
import com.mhd.oms.domain.settlement.repository.todo.SettlementDO;
import java.util.List;
/**
* 结算信息Mapper接口
*
* @author gen
* @date 2024-05-16
*/
public interface SettlementMapper extends BaseMapper<Settlement>
{
/**
* 查询结算信息列表
*/
public List<SettlementPO> queryList(SettlementDO settlementDO);
}
@@ -0,0 +1,98 @@
package com.mhd.oms.domain.settlement.repository.persistence;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.oms.domain.settlement.entity.Settlement;
import com.mhd.oms.domain.settlement.repository.facade.ISettlementService;
import com.mhd.oms.domain.settlement.repository.mapper.SettlementMapper;
import com.mhd.oms.domain.settlement.repository.po.SettlementPO;
import com.mhd.oms.domain.settlement.repository.todo.SettlementDO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 结算信息Service业务层处理
*
* @author gen
* @date 2024-05-16
*/
@Service
public class SettlementImpl extends ServiceImpl<SettlementMapper, Settlement> implements ISettlementService{
@Autowired
private SettlementMapper settlementMapper;
/**
* 查询结算信息列表
*/
@Override
public List<SettlementPO> queryList(SettlementDO settlementDO)
{
return settlementMapper.queryList(settlementDO);
}
/**
* 新增结算信息
*/
@Override
public Boolean insert(SettlementDO settlementDO) {
Settlement settlement = new Settlement();
BeanUtils.copyProperties(settlementDO,settlement);
return this.save(settlement);
}
/**
* 修改结算信息
*/
@Override
public Boolean update(SettlementDO settlementDO) {
Settlement settlement = new Settlement();
BeanUtils.copyProperties(settlementDO,settlement);
return this.updateById(settlement);
}
/**
* 批量删除结算信息
*/
@Override
public Boolean delete(Long[] ids ) {
List<Settlement> list = new ArrayList<>();
for (Long id : ids) {
Settlement settlement = new Settlement();
settlement.setId(id);
settlement.setDelFlag(2);
list.add(settlement);
}
return this.updateBatchById(list);
}
/**
* 修改结算信息
*/
@Override
public SettlementPO getInfo(Long id) {
Settlement settlement = this.getById(id);
SettlementPO settlementPO = new SettlementPO();
BeanUtils.copyProperties(settlement,settlementPO);
return settlementPO;
}
/**
* 批量新增
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean batchInsert(List<SettlementDO> settlementDOList) {
List<Settlement> settlementList = settlementDOList.stream().map(settlementDO -> {
Settlement settlement = new Settlement();
BeanUtils.copyProperties(settlementDO, settlement);
return settlement;
}).collect(Collectors.toList());
return this.saveBatch(settlementList);
}
}
@@ -0,0 +1,105 @@
package com.mhd.oms.domain.settlement.repository.po;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 结算信息对象 oms_settlement
*
* @author gen
* @date 2024-05-16
*/
@Data
@ApiModel(value = "结算信息对象", description = "结算信息响应对象")
public class SettlementPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("结算对象ID")
@Excel(name = "结算对象ID")
private Long settlementObjId;
@ApiModelProperty("结算对象")
@Excel(name = "结算对象")
private String settlementObj;
@ApiModelProperty("结算方式ID")
@Excel(name = "结算方式ID")
private String settlementWayId;
@ApiModelProperty("结算方式")
@Excel(name = "结算方式")
private String settlementWay;
@ApiModelProperty("支付方式")
@Excel(name = "支付方式")
private String payMethod;
@ApiModelProperty("支付状态ID")
@Excel(name = "支付状态ID")
private String payStatusId;
@ApiModelProperty("支付状态")
@Excel(name = "支付状态")
private String payStatus;
@ApiModelProperty("预付金额")
@Excel(name = "预付金额")
private BigDecimal prepaidAmount;
@ApiModelProperty("实付金额(采购订单本次付款)")
@Excel(name = "实付金额;采购订单:本次付款")
private BigDecimal paidAmount;
@ApiModelProperty("欠款金额(采购订单本次欠款)")
@Excel(name = "欠款金额;采购订单:本次欠款")
private BigDecimal debtAmount;
@ApiModelProperty("付款账号")
@Excel(name = "付款账号")
private String paymentAccNo;
@ApiModelProperty("付款单号")
@Excel(name = "付款单号")
private String paymentOrderNo;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileName;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileUrl;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
}
@@ -0,0 +1,110 @@
package com.mhd.oms.domain.settlement.repository.todo;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 结算信息对象 oms_settlement
*
* @author gen
* @date 2024-05-16
*/
@Data
public class SettlementDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
@Excel(name = "组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
@Excel(name = "组织名称")
private String organizationName;
@ApiModelProperty("订单管理表ID")
@Excel(name = "订单管理表ID")
private Long orderId;
@ApiModelProperty("结算对象ID")
@Excel(name = "结算对象ID")
private Long settlementObjId;
@ApiModelProperty("结算对象")
@Excel(name = "结算对象")
private String settlementObj;
@ApiModelProperty("结算方式ID")
@Excel(name = "结算方式ID")
private String settlementWayId;
@ApiModelProperty("结算方式")
@Excel(name = "结算方式")
private String settlementWay;
@ApiModelProperty("支付方式")
@Excel(name = "支付方式")
private String payMethod;
@ApiModelProperty("支付状态ID")
@Excel(name = "支付状态ID")
private String payStatusId;
@ApiModelProperty("支付状态")
@Excel(name = "支付状态")
private String payStatus;
@ApiModelProperty("预付金额")
@Excel(name = "预付金额")
private BigDecimal prepaidAmount;
@ApiModelProperty("实付金额;采购订单:本次付款")
@Excel(name = "实付金额;采购订单:本次付款")
private BigDecimal paidAmount;
@ApiModelProperty("欠款金额;采购订单:本次欠款")
@Excel(name = "欠款金额;采购订单:本次欠款")
private BigDecimal debtAmount;
@ApiModelProperty("付款账号")
@Excel(name = "付款账号")
private String paymentAccNo;
@ApiModelProperty("付款单号")
@Excel(name = "付款单号")
private String paymentOrderNo;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileName;
@ApiModelProperty("附件地址")
@Excel(name = "附件地址")
private String fileUrl;
@ApiModelProperty("备注")
@Excel(name = "备注")
private String remark;
@ApiModelProperty("合计金额")
private BigDecimal totalAmount;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
}
@@ -0,0 +1,125 @@
package com.mhd.oms.domain.settlement.service;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.purchaseOrder.entity.PurchaseOrder;
import com.mhd.oms.domain.salesOrder.entity.SalesOrder;
import com.mhd.oms.domain.settlement.repository.facade.ISettlementService;
import com.mhd.oms.domain.settlement.repository.po.SettlementPO;
import com.mhd.oms.domain.settlement.repository.todo.SettlementDO;
import com.mhd.oms.interfaces.dto.purchaseOrder.PurchaseOrderExcelDTO;
import com.mhd.oms.interfaces.dto.salesOrder.SalesOrderExcelDTO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 结算信息
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class SettlementDomainService {
@Autowired
private ISettlementService settlementService;
/**
* 分页查询结算信息列表
*/
public List<SettlementPO> queryList(SettlementDO settlementDO) {
return settlementService.queryList(settlementDO);
}
/**
* 新增结算信息
*/
public Boolean insert(SettlementDO settlementDO) {
return settlementService.insert(settlementDO);
}
/**
* 修改结算信息
*/
public Boolean update(SettlementDO settlementDO) {
return settlementService.update(settlementDO);
}
/**
* 批量删除结算信息
*/
public Boolean delete(Long[] ids) {
return settlementService.delete(ids);
}
/**
* 获取结算信息详细信息
*/
public SettlementPO getInfo(Long id)
{
return settlementService.getInfo(id);
}
/**
* 批量新增
*/
public Boolean batchInsert(List<SettlementDO> settlementDOList) {
return settlementService.batchInsert(settlementDOList);
}
/**
* 导入销售订单 - 为传入的结算列表添加一条结算信息
*
* @param settlementDOList - 添加数据的列表
* @param salesOrderExcelDTO -导入的数据
* @param salesOrder - 导入数据中的销售订单信息
*/
public void listAddFromImportSalesOrder(List<SettlementDO> settlementDOList, SalesOrderExcelDTO salesOrderExcelDTO, SalesOrder salesOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
SettlementDO settlementDo = new SettlementDO();
BeanUtils.copyProperties(salesOrderExcelDTO, settlementDo, IgnoreNullUtil.getNullPropertyNames(salesOrderExcelDTO));
settlementDo.setOrderId(salesOrder.getId());
settlementDo.setRemark(salesOrderExcelDTO.getSettlementRemark());
settlementDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
settlementDo.setCreateBy(loginUser.getUserPo().getUserId());
settlementDo.setCreateByName(loginUser.getUserPo().getUserName());
settlementDo.setCreateTime(new Date());
settlementDo.setTotalAmount(salesOrder.getTotalAmount());
settlementDo.setDebtAmount(salesOrder.getTotalAmount());
settlementDOList.add(settlementDo);
}
/**
* 导入采购订单 - 为传入的结算列表添加一条结算信息
*
* @param settlementDOList - 添加数据的列表
* @param purOrderExcelDTO -导入的数据
* @param purOrder - 导入的采购订单信息
*/
public void listAddFromImportPurOrder(List<SettlementDO> settlementDOList, PurchaseOrderExcelDTO purOrderExcelDTO, PurchaseOrder purOrder) {
LoginUser loginUser = SecurityUtils.getLoginUser();
SettlementDO settlementDo = new SettlementDO();
BeanUtils.copyProperties(purOrderExcelDTO, settlementDo, IgnoreNullUtil.getNullPropertyNames(purOrderExcelDTO));
settlementDo.setOrderId(purOrder.getId());
settlementDo.setRemark(purOrderExcelDTO.getSettlementRemark());
settlementDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
settlementDo.setCreateBy(loginUser.getUserPo().getUserId());
settlementDo.setCreateByName(loginUser.getUserPo().getUserName());
settlementDo.setCreateTime(new Date());
settlementDo.setTotalAmount(purOrder.getTotalAmount());
settlementDo.setDebtAmount(purOrder.getTotalAmount());
settlementDOList.add(settlementDo);
}
}
@@ -0,0 +1,90 @@
package com.mhd.oms.domain.taskOrder.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_task_order
*
* @author gen
* @date 2024-05-24
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("oms_task_order")
public class TaskOrder extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
private Long organizationName;
@ApiModelProperty("供应链订单ID")
private Long scmId;
@ApiModelProperty("订单ID")
private Long orderId;
@ApiModelProperty("物料ID")
private Long goodsId;
@ApiModelProperty("作业任务号")
private String taskNo;
@ApiModelProperty("任务状态:0-未下发、1-已下发、2-已完成、3-已拦截、4-已取消")
private Integer taskStatus;
@ApiModelProperty("作业任务类型ID")
private Integer taskTypeId;
@ApiModelProperty("作业任务类型名称")
private String taskTypeName;
@ApiModelProperty("仓库ID")
private Long warehouseId;
@ApiModelProperty("仓库名称")
private String warehouseName;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("计划数量")
private BigDecimal planNum;
@ApiModelProperty("合并单号")
private String mergeTaskNo;
@ApiModelProperty("合并状态(0未合并1已合并)")
private Integer mergeState;
@ApiModelProperty("通知单号")
private String noticeCode;
@ApiModelProperty("入库单号")
private String enterWarehouseCode;
@ApiModelProperty("供应链订单来源:0-默认、1-采购订单、2-销售订单、3-运输订单")
private Integer scmSource;
public TaskOrder(){
}
public TaskOrder(String taskNo){
this.taskNo = taskNo;
}
}
@@ -0,0 +1,105 @@
package com.mhd.oms.domain.taskOrder.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.OrderInfoPO;
import com.mhd.oms.domain.taskOrder.entity.TaskOrder;
import com.mhd.oms.domain.taskOrder.repository.po.PoTaskDetailPO;
import com.mhd.oms.domain.taskOrder.repository.po.TaskOrderPO;
import com.mhd.oms.domain.taskOrder.repository.todo.TaskOrderDO;
import java.math.BigDecimal;
import java.util.List;
/**
* 作业任务Service接口
*
* @author gen
* @date 2024-05-24
*/
public interface ITaskOrderService extends IService<TaskOrder>
{
/**
* 分页查询作业任务列表
*/
List<TaskOrderPO> queryList(TaskOrderDO taskOrderDO);
/**
* 新增作业任务
*/
Boolean insert(TaskOrderDO taskOrderDO);
/**
* 修改作业任务
*/
Boolean update(TaskOrderDO taskOrderDO);
/**
* 批量删除作业任务
*/
Boolean delete(Long[] ids);
/**
* 查询作业任务
*/
TaskOrderPO getInfo(Long id);
/**
* 批量新增
* @param taskOrderDOList 批量新增列表
* @return 新增结果
*/
Boolean batchInsert(List<TaskOrderDO> taskOrderDOList);
/**
* 根据供应链订单ID获取作业任务中有效未下发已下发已完成物料数量
* @param scmId - 供应链订单ID
* @param goodsId - 物料ID
* @return 有效物料数量
*/
BigDecimal queryEffectiveNumByScmId(Long scmId, Long goodsId);
Boolean batchUpdate(List<TaskOrderDO> taskOrderDOS);
List<PoTaskDetailPO> getPoTaskDetail(List<Long> ids);
Integer getQuantityDeliver(List<Long> ids);
TaskOrderPO getInfoByTaskNo(String taskNo);
/**
* 获取给定ID列表中可取消的作业任务
* @param idList - 作业任务ID列表
* @return - 可取消的作业任务
*/
List<TaskOrderPO> getAbleCancelledTaskList(List<Long> idList);
/**
* 取消作业任务
*
* @param idList - 取消的作业任务ID
*/
void cancelTaskOrder(List<Long> idList);
/**
* 根据订单ORDER_ID修改作业任务为拦截状态
* @param orderId - 订单ID
*/
void interceptByOrderId(Long orderId);
List<TaskOrderPO> getInfos(List<Long> ids);
List<TaskOrderPO> getInfoByIds(List<Long> ids);
List<TaskOrderPO> getInfosByOrderId(List<Long> ids);
/**
* 根据orderId获取任务列表
* @param idList - 采购|销售|运输订单ID列表
* @param sourceType - 调用方来源类型1-采购订单2-销售订单
*/
List<TaskOrderPO> queryListByOrderId(List<Long> idList, Integer sourceType);
OrderInfoPO getOrderInfo(TaskOrderDO taskOrderDO);
}
@@ -0,0 +1,55 @@
package com.mhd.oms.domain.taskOrder.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.taskOrder.entity.TaskOrder;
import com.mhd.oms.domain.taskOrder.repository.po.PoTaskDetailPO;
import com.mhd.oms.domain.taskOrder.repository.po.TaskOrderPO;
import com.mhd.oms.domain.taskOrder.repository.todo.TaskOrderDO;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
* 作业任务Mapper接口
*
* @author gen
* @date 2024-05-24
*/
public interface TaskOrderMapper extends BaseMapper<TaskOrder>
{
/**
* 查询作业任务列表
*/
public List<TaskOrderPO> queryList(TaskOrderDO taskOrderDO);
/**
* 根据供应链订单ID获取作业任务中有效未下发已下发已完成物料数量
* @param scmId - 供应链订单ID
* @param goodsId - 物料ID
* @return 作业任务重有效物料数量
*/
BigDecimal queryEffectiveNumByScmId(@Param("scmId") Long scmId, @Param("goodsId") Long goodsId);
/**
* 获取采购订单的任务详情信息
* @param ids
* @return
*/
List<PoTaskDetailPO> getPoTaskDetail(@Param("ids") List<Long> ids);
/**
* 取消作业任务
*
* @param idList - 取消的作业任务ID
* @return - 可取消的作业任务
*/
List<TaskOrderPO> getAbleCancelledTaskList(@Param("idList") List<Long> idList);
List<TaskOrderPO> getInfoByIds(@Param("ids") List<Long> ids);
List<TaskOrderPO> queryPurListByOrderId(@Param("orderIdList") List<Long> orderIdList);
List<TaskOrderPO> querySalesListByOrderId(@Param("orderIdList") List<Long> orderIdList);
}
@@ -0,0 +1,277 @@
package com.mhd.oms.domain.taskOrder.repository.persistence;
import cn.hutool.core.util.ObjectUtil;
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.core.utils.OrderSequence;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.constant.OrderConstant;
import com.mhd.oms.domain.OrderInfoPO;
import com.mhd.oms.domain.orderType.entity.OrderType;
import com.mhd.oms.domain.orderType.repository.mapper.OrderTypeMapper;
import com.mhd.oms.domain.purchaseOrder.repository.mapper.PurchaseOrderMapper;
import com.mhd.oms.domain.salesOrder.repository.mapper.SalesOrderMapper;
import com.mhd.oms.domain.taskOrder.entity.TaskOrder;
import com.mhd.oms.domain.taskOrder.repository.facade.ITaskOrderService;
import com.mhd.oms.domain.taskOrder.repository.mapper.TaskOrderMapper;
import com.mhd.oms.domain.taskOrder.repository.po.PoTaskDetailPO;
import com.mhd.oms.domain.taskOrder.repository.po.TaskOrderPO;
import com.mhd.oms.domain.taskOrder.repository.todo.TaskOrderDO;
import com.mhd.system.api.model.LoginUser;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 作业任务Service业务层处理
*
* @author gen
* @date 2024-05-24
*/
@Service
public class TaskOrderImpl extends ServiceImpl<TaskOrderMapper, TaskOrder> implements ITaskOrderService{
@Resource
private TaskOrderMapper taskOrderMapper;
@Resource
private PurchaseOrderMapper purchaseOrderMapper;
@Resource
private SalesOrderMapper salesOrderMapper;
@Resource
private OrderTypeMapper orderTypeMapper;
/**
* 查询作业任务列表
*/
@Override
public List<TaskOrderPO> queryList(TaskOrderDO taskOrderDO)
{
return taskOrderMapper.queryList(taskOrderDO);
}
/**
* 新增作业任务
*/
@Override
public Boolean insert(TaskOrderDO taskOrderDO) {
TaskOrder taskOrder = new TaskOrder();
BeanUtils.copyProperties(taskOrderDO,taskOrder);
return this.save(taskOrder);
}
/**
* 修改作业任务
*/
@Override
public Boolean update(TaskOrderDO taskOrderDO) {
TaskOrder taskOrder = new TaskOrder();
BeanUtils.copyProperties(taskOrderDO,taskOrder);
return this.updateById(taskOrder);
}
/**
* 批量删除作业任务
*/
@Override
public Boolean delete(Long[] ids ) {
//根据ID集合查询所有的作业任务信息
List<TaskOrder> taskOrders = this.listByIds(Arrays.asList(ids));
//作业任务只有已拦截已取消的作业任务才可以删除作业任务
List<TaskOrder> taskOrderList = taskOrders.stream().filter(taskOrder -> taskOrder.getTaskStatus() != 3 && taskOrder.getTaskStatus() != 4)
.collect(Collectors.toList());
if (!taskOrderList.isEmpty()) {
throw new ServiceException("已拦截/已取消的任务状态,方可进行删除操作");
}
for (TaskOrder taskOrder : taskOrders) {
taskOrder.setDelFlag(2);
}
return this.updateBatchById(taskOrders);
}
/**
* 修改作业任务
*/
@Override
public TaskOrderPO getInfo(Long id) {
TaskOrder taskOrder = this.getOne(new LambdaQueryWrapper<TaskOrder>()
.eq(TaskOrder::getId, id).eq(TaskOrder::getDelFlag, 1));
TaskOrderPO taskOrderPO = new TaskOrderPO();
BeanUtils.copyProperties(taskOrder,taskOrderPO);
return taskOrderPO;
}
/**
* 批量新增
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean batchInsert(List<TaskOrderDO> taskOrderDOList) {
List<TaskOrder> taskOrderList = taskOrderDOList.stream().map(taskOrderDO -> {
TaskOrder taskOrder = new TaskOrder(OrderSequence.getOrderCode(OrderConstant.TASK_NO_PREFIX));
BeanUtils.copyProperties(taskOrderDO, taskOrder);
return taskOrder;
}).collect(Collectors.toList());
return this.saveBatch(taskOrderList);
}
/**
* 根据供应链订单ID获取作业任务中有效未下发已下发已完成物料数量
* @param scmId - 供应链订单ID
* @param goodsId - 物料ID
* @return 作业任务重有效物料数量
*/
@Override
public BigDecimal queryEffectiveNumByScmId(Long scmId, Long goodsId) {
return taskOrderMapper.queryEffectiveNumByScmId(scmId, goodsId);
}
@Override
public Boolean batchUpdate(List<TaskOrderDO> taskOrderDOS) {
List<TaskOrder> taskOrders = taskOrderDOS.stream().map(taskOrderDO -> {
TaskOrder taskOrder = new TaskOrder();
BeanUtils.copyProperties(taskOrderDO, taskOrder);
return taskOrder;
}).collect(Collectors.toList());
return this.updateBatchById(taskOrders);
}
@Override
public List<PoTaskDetailPO> getPoTaskDetail(List<Long> ids) {
return taskOrderMapper.getPoTaskDetail(ids);
}
@Override
public Integer getQuantityDeliver(List<Long> ids) {
return taskOrderMapper.selectCount(new LambdaQueryWrapper<TaskOrder>()
.eq(TaskOrder::getDelFlag, 1)
.in(TaskOrder::getId,ids)
.ne(TaskOrder::getTaskStatus,0).or().eq(TaskOrder::getMergeState,1));
}
@Override
public TaskOrderPO getInfoByTaskNo(String taskNo) {
TaskOrderPO taskOrderPO = new TaskOrderPO();
TaskOrder taskOrder = taskOrderMapper.selectOne(new LambdaQueryWrapper<TaskOrder>()
.eq(TaskOrder::getTaskNo, taskNo).eq(TaskOrder::getDelFlag,1));
if (ObjectUtil.isNull(taskOrder)) {
taskOrder = new TaskOrder();
}
BeanUtils.copyProperties(taskOrder,taskOrderPO);
return taskOrderPO;
}
@Override
public List<TaskOrderPO> getAbleCancelledTaskList(List<Long> idList) {
return taskOrderMapper.getAbleCancelledTaskList(idList);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void cancelTaskOrder(List<Long> idList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
taskOrderMapper.update(new TaskOrder(), new LambdaUpdateWrapper<TaskOrder>()
.in(TaskOrder::getId, idList)
.eq(TaskOrder::getDelFlag, 1)
.set(TaskOrder::getTaskStatus, OrderConstant.TASK_STATUS_4)
.set(TaskOrder::getUpdateBy, loginUser.getUserid())
.set(TaskOrder::getUpdateByName, loginUser.getUsername())
.set(TaskOrder::getUpdateTime, new Date()));
}
@Override
public List<TaskOrderPO> getInfos(List<Long> ids) {
List<TaskOrder> taskOrders = this.listByIds(ids);
return taskOrders.stream().map(taskOrder -> {
TaskOrderPO taskOrderPO = new TaskOrderPO();
BeanUtils.copyProperties(taskOrder, taskOrderPO);
return taskOrderPO;
}).collect(Collectors.toList());
}
@Override
public List<TaskOrderPO> getInfoByIds(List<Long> ids) {
return taskOrderMapper.getInfoByIds(ids);
}
@Override
public List<TaskOrderPO> getInfosByOrderId(List<Long> ids) {
List<TaskOrder> taskOrders = this.taskOrderMapper.selectList(new LambdaQueryWrapper<TaskOrder>()
.in(TaskOrder::getOrderId, ids).eq(TaskOrder::getDelFlag, 1));
return taskOrders.stream().map(taskOrder -> {
TaskOrderPO taskOrderPO = new TaskOrderPO();
BeanUtils.copyProperties(taskOrder, taskOrderPO);
return taskOrderPO;
}).collect(Collectors.toList());
}
@Override
public void interceptByOrderId(Long orderId) {
LoginUser loginUser = SecurityUtils.getLoginUser();
taskOrderMapper.update(new TaskOrder(), new LambdaUpdateWrapper<TaskOrder>()
.set(TaskOrder::getTaskStatus, OrderConstant.TASK_STATUS_3)
.set(TaskOrder::getUpdateBy, loginUser.getUserid())
.set(TaskOrder::getUpdateByName, loginUser.getUsername())
.set(TaskOrder::getUpdateTime, new Date())
.eq(TaskOrder::getOrderId, orderId)
.eq(TaskOrder::getDelFlag, 1)
.ne(TaskOrder::getTaskStatus, OrderConstant.TASK_STATUS_4));
}
@Override
public List<TaskOrderPO> queryListByOrderId(List<Long> idList, Integer sourceType)
{
List<TaskOrderPO> taskOrderPOList = new ArrayList<>();
if(OrderConstant.SCM_SOURCE_1.equals(sourceType)){
taskOrderPOList = taskOrderMapper.queryPurListByOrderId(idList);
}
else if(OrderConstant.SCM_SOURCE_2.equals(sourceType)){
taskOrderPOList = taskOrderMapper.querySalesListByOrderId(idList);
}
else if(OrderConstant.SCM_SOURCE_3.equals(sourceType)){
}
else{
throw new ServiceException("内部错误");
}
return taskOrderPOList;
}
@Override
public OrderInfoPO getOrderInfo(TaskOrderDO taskOrderDO) {
OrderInfoPO orderInfoPO = new OrderInfoPO();
switch (taskOrderDO.getScmSource()) {
case 1://采购订单
orderInfoPO = purchaseOrderMapper.selectOrderInfoByOrderId(taskOrderDO.getOrderId());
break;
case 2://销售订单
orderInfoPO = salesOrderMapper.selectOrderInfoByOrderId(taskOrderDO.getOrderId());
break;
case 3://运输订单
break;
}
//查询订单类型
OrderType orderType = orderTypeMapper.selectById(orderInfoPO.getOrderTypeId());
orderInfoPO.setOrderTypeCode(orderType.getOrderTypeId());
return orderInfoPO;
}
}
@@ -0,0 +1,39 @@
package com.mhd.oms.domain.taskOrder.repository.po;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class PoTaskDetailPO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("作业任务号")
private String taskNo;
@ApiModelProperty("下发仓库ID")
private Long warehouseId;
@ApiModelProperty("下发仓库名称")
private String warehouseName;
@ApiModelProperty("货主ID")
private Long shipperId;
@ApiModelProperty("货主")
private String shipper;
@ApiModelProperty("任务数量")
private Integer taskNum;
@ApiModelProperty("作业任务号")
private String mergeTaskNo;
}
@@ -0,0 +1,115 @@
package com.mhd.oms.domain.taskOrder.repository.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
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_task_order
*
* @author gen
* @date 2024-05-24
*/
@Data
@ApiModel(value = "作业任务对象", description = "作业任务响应对象")
public class TaskOrderPO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("最高组织id")
private Long topOrganizationId;
@ApiModelProperty("组织表id")
private Long organizationId;
@ApiModelProperty("组织名称")
private Long organizationName;
@ApiModelProperty("供应链订单ID")
private Long scmId;
@ApiModelProperty("物料ID")
private Long goodsId;
@ApiModelProperty("订单ID")
private Long orderId;
@ApiModelProperty("作业任务号")
private String taskNo;
@ApiModelProperty("任务状态:0-未下发、1-已下发、2-已完成、3-已拦截、4-已取消")
private Integer taskStatus;
@ApiModelProperty("任务状态")
private String taskStatusStr;
@ApiModelProperty("作业任务类型ID")
private Integer taskTypeId;
@ApiModelProperty("作业任务类型名称")
private String taskTypeName;
@ApiModelProperty("仓库ID")
private Long warehouseId;
@ApiModelProperty("仓库名称")
private String warehouseName;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("计划数量")
private BigDecimal planNum;
@ApiModelProperty("合并单号")
private String mergeTaskNo;
@ApiModelProperty("合并状态:0-未合并、1-已合并")
private Integer mergeState;
@ApiModelProperty("合并状态")
private String mergeStateStr;
@ApiModelProperty("通知单号")
private String noticeCode;
@ApiModelProperty("入库单号")
private String enterWarehouseCode;
@ApiModelProperty("采购订单号")
private String orderNo;
@ApiModelProperty("客户订单号")
private String customerOrders;
@ApiModelProperty("货主ID")
private String shipperId;
@ApiModelProperty("货主名称")
private String shipper;
@ApiModelProperty("供应商ID")
private String supplierId;
@ApiModelProperty("供应商名称")
private String supplier;
@ApiModelProperty("下发订单类型ID")
private String orderTypeId;
@ApiModelProperty("下发订单类型名称")
private String orderType;
@ApiModelProperty("下发系统")
private String deliverySystem;
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("预计到货时间")
private Date estimatedReceivingTime;
@ApiModelProperty("订单任务来源:0-默认、1-采购订单、2-销售订单、3-运输订单")
private Integer scmSource;
}
@@ -0,0 +1,33 @@
package com.mhd.oms.domain.taskOrder.repository.po;
import com.mhd.common.core.web.domain.BaseVOEntity;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderPO;
import com.mhd.oms.domain.salesOrder.repository.po.SalesOrderPO;
import com.mhd.oms.domain.scmOrder.repository.po.ScmOrderPO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 作业任务上层数据集
*
* @author gen
* @date 2024-05-24
*/
@Data
@ApiModel(value = "作业任务上层数据集", description = "作业任务上层数据集")
public class TaskUpperDataPO extends BaseVOEntity {
@ApiModelProperty("上层采购订单")
private PurchaseOrderPO purOrderPo;
@ApiModelProperty("上层销售订单")
private SalesOrderPO salesOrderPo;
@ApiModelProperty("上层供应链订单")
private ScmOrderPO scmOrder;
}
@@ -0,0 +1,52 @@
package com.mhd.oms.domain.taskOrder.repository.todo;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import com.mhd.oms.interfaces.dto.taskOrder.CreateTaskOrderGoodsInfoDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 作业任务对象 oms_task_order
*
* @author gen
* @date 2024-05-24
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class CreateTaskOrderDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("供应链订单ID")
private Long scmId;
@ApiModelProperty("仓库ID")
private Long warehouseId;
@ApiModelProperty("商品")
private List<CreateTaskOrderGoodsInfoDTO> goodsInfoList;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("生成作业方式:0-根据所填数量生成、1-全部生成")
private Integer createType;
}
@@ -0,0 +1,28 @@
package com.mhd.oms.domain.taskOrder.repository.todo;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 作业任务对象 oms_task_order
*
* @author gen
* @date 2024-05-24
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class CreateTaskOrderGoodsInfoDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
@ApiModelProperty("计划任务数量")
private BigDecimal planNum;
}
@@ -0,0 +1,90 @@
package com.mhd.oms.domain.taskOrder.repository.todo;
import com.mhd.common.core.annotation.Excel;
import com.mhd.common.core.web.domain.BaseVOEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 作业任务对象 oms_task_order
*
* @author gen
* @date 2024-05-24
*/
@Data
public class TaskOrderDO extends BaseVOEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("编号")
private Long id;
private List<Long> idList;
@ApiModelProperty(name = "组织ID集合")
private List<Long> organizationIdList;
@ApiModelProperty(name = "权限菜单ID")
private Long permissionMenuId;
@ApiModelProperty("最高组织id")
@Excel(name = "最高组织id")
private Long topOrganizationId;
@ApiModelProperty("供应链订单ID")
private Long scmId;
private List<Long> scmIdList;
@ApiModelProperty("物料ID")
private Long goodsId;
@ApiModelProperty("订单ID")
private Long orderId;
private List<Long> orderIdList;
@ApiModelProperty("任务状态:0-未下发、1-已下发、2-已完成、3-已拦截、4-已取消")
private Integer taskStatus;
private List<Integer> taskStatusList;
@ApiModelProperty("作业任务类型ID")
private Integer taskTypeId;
@ApiModelProperty("作业任务类型名称")
private String taskTypeName;
@ApiModelProperty("仓库ID")
private Long warehouseId;
@ApiModelProperty("仓库名称")
private String warehouseName;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("计划数量")
private BigDecimal planNum;
@ApiModelProperty("合并单号")
private String mergeTaskNo;
@ApiModelProperty("合并状态(0未合并1已合并)")
private Integer mergeState;
@ApiModelProperty("通知单号")
private String noticeCode;
@ApiModelProperty("入库单号")
private String enterWarehouseCode;
@ApiModelProperty("供应链订单来源:1-采购订单、2-销售订单、3-运输订单")
private Integer scmSource;
public TaskOrderDO(){
}
public TaskOrderDO(List<Long> idList){
this.idList = idList;
}
}
@@ -0,0 +1,164 @@
package com.mhd.oms.domain.taskOrder.service;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.oms.domain.OrderInfoPO;
import com.mhd.oms.domain.taskOrder.repository.facade.ITaskOrderService;
import com.mhd.oms.domain.taskOrder.repository.po.PoTaskDetailPO;
import com.mhd.oms.domain.taskOrder.repository.po.TaskOrderPO;
import com.mhd.oms.domain.taskOrder.repository.todo.TaskOrderDO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 作业任务
*
* @author gen
* @date 2024-05-24
*/
@Service
@Slf4j
public class TaskOrderDomainService {
@Autowired
private ITaskOrderService taskOrderService;
/**
* 分页查询作业任务列表
*/
public List<TaskOrderPO> queryList(TaskOrderDO taskOrderDO) {
return taskOrderService.queryList(taskOrderDO);
}
/**
* 新增作业任务
*/
public Boolean insert(TaskOrderDO taskOrderDO) {
return taskOrderService.insert(taskOrderDO);
}
/**
* 修改作业任务
*/
public Boolean update(TaskOrderDO taskOrderDO) {
return taskOrderService.update(taskOrderDO);
}
/**
* 批量删除作业任务
*/
public Boolean delete(Long[] ids) {
return taskOrderService.delete(ids);
}
/**
* 获取作业任务详细信息
*/
public TaskOrderPO getInfo(Long id)
{
return taskOrderService.getInfo(id);
}
/**
* 批量新增
*/
public Boolean batchInsert(List<TaskOrderDO> taskOrderDOList) {
return taskOrderService.batchInsert(taskOrderDOList);
}
/**
* 根据供应链订单ID获取作业任务中有效未下发已下发已完成物料数量
* @param scmId - 供应链订单ID
* @param goodsId - 物料ID
* @return 作业任务重有效物料数量
*/
public BigDecimal queryEffectiveNumByScmId(Long scmId, Long goodsId) {
return taskOrderService.queryEffectiveNumByScmId(scmId, goodsId);
}
public Boolean batchUpdate(List<TaskOrderDO> taskOrderDOS) {
return taskOrderService.batchUpdate(taskOrderDOS);
}
public List<PoTaskDetailPO> getPoTaskDetail(List<Long> ids) {
return taskOrderService.getPoTaskDetail(ids);
}
public Integer getQuantityDeliver(List<Long> ids) {
return taskOrderService.getQuantityDeliver(ids);
}
public TaskOrderPO getInfoByTaskNo(String taskNo) {
return taskOrderService.getInfoByTaskNo(taskNo);
}
/**
* 取消作业任务
*
* @param idList - 取消的作业任务ID
* @return - 可取消的作业任务
*/
public List<TaskOrderPO> cancelTaskOrder(List<Long> idList) {
List<TaskOrderPO> ableCancelledScmIdList = taskOrderService.getAbleCancelledTaskList(idList);
if(ableCancelledScmIdList.size() != idList.size()){
throw new ServiceException("请检查是否存在不可取消任务!");
}
taskOrderService.cancelTaskOrder(idList);
return ableCancelledScmIdList;
}
public List<TaskOrderPO> getInfos(List<Long> ids) {
return taskOrderService.getInfos(ids);
}
/**
* 根据ids集合查询所有的任务信息包括已合并的任务信息
* @param ids
* @return
*/
public List<TaskOrderPO> getInfoByIds(List<Long> ids) {
return taskOrderService.getInfoByIds(ids);
}
/**
* 根据订单ID查询所有的任务信息
* @param ids
* @return
*/
public List<TaskOrderPO> getInfosByOrderId(List<Long> ids) {
return taskOrderService.getInfosByOrderId(ids);
}
/**
* 根据orderId获取任务列表并分组
* @param idList - 订单ID列表
* @param sourceType - 调用方来源类型1-采购订单2-销售订单
* @return - k-订单IDv-对应任务列表
*/
public Map<Long, List<TaskOrderPO>> getMapByOrderIdList(List<Long> idList, Integer sourceType) {
List<TaskOrderPO> taskOrderList = taskOrderService.queryListByOrderId(idList, sourceType);
return taskOrderList.stream().collect(Collectors.groupingBy(TaskOrderPO::getOrderId));
}
/**
* 根据订单ORDER_ID修改作业任务为拦截状态
* @param orderId - 订单ID
*/
public void interceptByOrderId(Long orderId) {
taskOrderService.interceptByOrderId(orderId);
}
public OrderInfoPO getOrderInfo(TaskOrderDO taskOrderDO) {
return taskOrderService.getOrderInfo(taskOrderDO);
}
}