集成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
+17
View File
@@ -0,0 +1,17 @@
# 基础镜像
FROM arm64v8/openjdk:8
# author
MAINTAINER manhuoda
#指定东八区时区
ENV TZ Asia/Shanghai
#指定utf-8编码格
ENV JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
#将当前mhd_special_logistics.jar 复制到容器根目录下
ADD mhd_oms.jar mhd_oms.jar
#暴露容器端口 Docker镜像告知Docker宿主机应用监听了端口
EXPOSE 8017
# 运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xms1000m", "-Xmx1500m","-jar","/mhd_oms.jar"]
+169
View File
@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mhd</groupId>
<artifactId>mhd</artifactId>
<version>3.6.0</version>
</parent>
<artifactId>mhd_oms</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--添加feign依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!--nacos 服务注册客户端依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- Sentinel⽀持采⽤ Nacos 作为规则配置数据源,引⼊该适配依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<!--sentinel 核⼼环境 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- Alibaba Fastjson -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
</dependency>
<!-- Mhd Common Core-->
<dependency>
<groupId>com.mhd</groupId>
<artifactId>mhd-common-core</artifactId>
</dependency>
<!-- Mhd Common Redis-->
<dependency>
<groupId>com.mhd</groupId>
<artifactId>mhd-common-redis</artifactId>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.1.193</version>
</dependency>
<!--添加druid连接池 依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.11</version>
</dependency>
<!--lombok工具-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
<!--链路追踪-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
<!-- Mhd Common Security-->
<dependency>
<groupId>com.mhd</groupId>
<artifactId>mhd-common-security</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.mhd</groupId>
<artifactId>mhd_common_db</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>com.mhd</groupId>
<artifactId>mhd-common-log</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<profiles>
<profile>
<id>mhd_oms</id>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
@@ -0,0 +1,20 @@
package com.mhd.oms;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication(scanBasePackages = {"com.mhd"},
exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.mhd",})
@MapperScan("com.mhd.oms.domain.**.mapper")
public class OMSApplication {
public static void main(String[] args) {
SpringApplication.run(OMSApplication.class, args);
}
}
@@ -0,0 +1,74 @@
package com.mhd.oms.application.service.deliveryInfo;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.deliveryInfo.repository.po.DeliveryInfoPO;
import com.mhd.oms.domain.deliveryInfo.repository.todo.DeliveryInfoDO;
import com.mhd.oms.domain.deliveryInfo.service.DeliveryInfoDomainService;
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.List;
/**
* 发货信息ApplicationService
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class DeliveryInfoApplicationService {
@Autowired
private DeliveryInfoDomainService deliveryInfoDomainService;
/**
* 分页查询发货信息列表
*/
public List<DeliveryInfoPO> queryList(DeliveryInfoDO deliveryInfoDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
deliveryInfoDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
return deliveryInfoDomainService.queryList(deliveryInfoDO);
}
/**
* 新增发货信息
*/
public Boolean insert(DeliveryInfoDO deliveryInfoDO) {
return deliveryInfoDomainService.insert(deliveryInfoDO);
}
/**
* 修改发货信息
*/
public Boolean update(DeliveryInfoDO deliveryInfoDO) {
return deliveryInfoDomainService.update(deliveryInfoDO);
}
/**
* 批量删除发货信息
*/
public boolean delete(Long[] ids) {
return deliveryInfoDomainService.delete(ids);
}
/**
* 获取发货信息详细信息
*/
public DeliveryInfoPO getInfo(Long id)
{
return deliveryInfoDomainService.getInfo(id);
}
}
@@ -0,0 +1,74 @@
package com.mhd.oms.application.service.goods;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import com.mhd.oms.domain.goods.service.GoodsDomainService;
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.List;
/**
* 商品信息ApplicationService
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class GoodsApplicationService {
@Autowired
private GoodsDomainService goodsDomainService;
/**
* 分页查询商品信息列表
*/
public List<GoodsPO> queryList(GoodsDO goodsDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
goodsDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
return goodsDomainService.queryList(goodsDO);
}
/**
* 新增商品信息
*/
public Boolean insert(GoodsDO goodsDO) {
return goodsDomainService.insert(goodsDO);
}
/**
* 修改商品信息
*/
public Boolean update(GoodsDO goodsDO) {
return goodsDomainService.update(goodsDO);
}
/**
* 批量删除商品信息
*/
public boolean delete(Long[] ids) {
return goodsDomainService.delete(ids);
}
/**
* 获取商品信息详细信息
*/
public GoodsPO getInfo(Long id)
{
return goodsDomainService.getInfo(id);
}
}
@@ -0,0 +1,74 @@
package com.mhd.oms.application.service.interceptOrder;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.interceptOrder.repository.po.InterceptOrderPO;
import com.mhd.oms.domain.interceptOrder.repository.todo.InterceptOrderDO;
import com.mhd.oms.domain.interceptOrder.service.InterceptOrderDomainService;
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.List;
/**
* 拦截订单ApplicationService
*
* @author gen
* @date 2024-05-30
*/
@Service
@Slf4j
public class InterceptOrderApplicationService {
@Autowired
private InterceptOrderDomainService interceptOrderDomainService;
/**
* 分页查询拦截订单列表
*/
public List<InterceptOrderPO> queryList(InterceptOrderDO interceptOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
interceptOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
return interceptOrderDomainService.queryList(interceptOrderDO);
}
/**
* 新增拦截订单
*/
public Boolean insert(InterceptOrderDO interceptOrderDO) {
return interceptOrderDomainService.insert(interceptOrderDO);
}
/**
* 修改拦截订单
*/
public Boolean update(InterceptOrderDO interceptOrderDO) {
return interceptOrderDomainService.update(interceptOrderDO);
}
/**
* 批量删除拦截订单
*/
public boolean delete(Long[] ids) {
return interceptOrderDomainService.delete(ids);
}
/**
* 获取拦截订单详细信息
*/
public InterceptOrderPO getInfo(Long id)
{
return interceptOrderDomainService.getInfo(id);
}
}
@@ -0,0 +1,74 @@
package com.mhd.oms.application.service.logistics;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.logistics.repository.po.LogisticsPO;
import com.mhd.oms.domain.logistics.repository.todo.LogisticsDO;
import com.mhd.oms.domain.logistics.service.LogisticsDomainService;
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.List;
/**
* 物流信息ApplicationService
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class LogisticsApplicationService {
@Autowired
private LogisticsDomainService logisticsDomainService;
/**
* 分页查询物流信息列表
*/
public List<LogisticsPO> queryList(LogisticsDO logisticsDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
logisticsDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
return logisticsDomainService.queryList(logisticsDO);
}
/**
* 新增物流信息
*/
public Boolean insert(LogisticsDO logisticsDO) {
return logisticsDomainService.insert(logisticsDO);
}
/**
* 修改物流信息
*/
public Boolean update(LogisticsDO logisticsDO) {
return logisticsDomainService.update(logisticsDO);
}
/**
* 批量删除物流信息
*/
public boolean delete(Long[] ids) {
return logisticsDomainService.delete(ids);
}
/**
* 获取物流信息详细信息
*/
public LogisticsPO getInfo(Long id)
{
return logisticsDomainService.getInfo(id);
}
}
@@ -0,0 +1,80 @@
package com.mhd.oms.application.service.orderType;
import com.mhd.common.security.utils.SecurityUtils;
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 com.mhd.oms.domain.orderType.service.OrderTypeDomainService;
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.List;
/**
* 订单类型关系ApplicationService
*
* @author gen
* @date 2024-05-15
*/
@Service
@Slf4j
public class OrderTypeApplicationService {
@Autowired
private OrderTypeDomainService orderTypeDomainService;
/**
* 分页查询订单类型关系列表
*/
public List<OrderTypePO> queryList(OrderTypeDO orderTypeDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
orderTypeDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
return orderTypeDomainService.queryList(orderTypeDO);
}
/**
* 新增订单类型关系
*/
public Boolean insert(OrderTypeDO orderTypeDO) {
//获取当前登录人,获取当前登录人的租户
LoginUser loginUser = SecurityUtils.getLoginUser();
orderTypeDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
return orderTypeDomainService.insert(orderTypeDO);
}
/**
* 修改订单类型关系
*/
public Boolean update(OrderTypeDO orderTypeDO) {
return orderTypeDomainService.update(orderTypeDO);
}
/**
* 批量删除订单类型关系
*/
public boolean delete(Long[] ids) {
return orderTypeDomainService.delete(ids);
}
/**
* 获取订单类型关系详细信息
*/
public OrderTypePO getInfo(Long id)
{
return orderTypeDomainService.getInfo(id);
}
public List<OrderTypeDictPO> listDict() {
return orderTypeDomainService.listDict();
}
}
@@ -0,0 +1,549 @@
package com.mhd.oms.application.service.purchaseOrder;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.mhd.common.core.enums.DictCode;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
import com.mhd.common.core.exception.digitalLogisticsException.UserError;
import com.mhd.common.core.utils.OrderSequence;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.constant.OrderConstant;
import com.mhd.oms.domain.deliveryInfo.repository.todo.DeliveryInfoDO;
import com.mhd.oms.domain.deliveryInfo.service.DeliveryInfoDomainService;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import com.mhd.oms.domain.goods.service.GoodsDomainService;
import com.mhd.oms.domain.interceptOrder.repository.todo.InterceptOrderDO;
import com.mhd.oms.domain.interceptOrder.service.InterceptOrderDomainService;
import com.mhd.oms.domain.logistics.repository.todo.LogisticsDO;
import com.mhd.oms.domain.logistics.service.LogisticsDomainService;
import com.mhd.oms.domain.orderType.repository.po.OrderTypePO;
import com.mhd.oms.domain.orderType.service.OrderTypeDomainService;
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.PurchaseOrderAddDO;
import com.mhd.oms.domain.purchaseOrder.repository.todo.PurchaseOrderAuditDO;
import com.mhd.oms.domain.purchaseOrder.repository.todo.PurchaseOrderDO;
import com.mhd.oms.domain.purchaseOrder.service.PurchaseOrderDomainService;
import com.mhd.oms.domain.receiptInfo.repository.todo.ReceiptInfoDO;
import com.mhd.oms.domain.receiptInfo.service.ReceiptInfoDomainService;
import com.mhd.oms.domain.scmOrder.repository.po.ScmOrderPO;
import com.mhd.oms.domain.scmOrder.repository.todo.ScmOrderDO;
import com.mhd.oms.domain.scmOrder.service.ScmOrderDomainService;
import com.mhd.oms.domain.settlement.repository.todo.SettlementDO;
import com.mhd.oms.domain.settlement.service.SettlementDomainService;
import com.mhd.oms.domain.taskOrder.repository.po.TaskOrderPO;
import com.mhd.oms.domain.taskOrder.service.TaskOrderDomainService;
import com.mhd.oms.infrastructure.feign.vo.SysDictDataVo;
import com.mhd.oms.interfaces.dto.purchaseOrder.PurchaseOrderExcelDTO;
import com.mhd.system.api.SystemServiceFeign;
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 org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 采购订单管理ApplicationService
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class PurchaseOrderApplicationService {
@Resource
private PurchaseOrderDomainService purchaseOrderDomainService;//采购订单基本信息
@Resource
private SettlementDomainService settlementDomainService;//采购结算信息
@Resource
private DeliveryInfoDomainService deliveryInfoDomainService;//采购发货信息
@Resource
private ReceiptInfoDomainService receiptInfoDomainService;//采购订单收货信息
@Resource
private LogisticsDomainService logisticsDomainService;//采购订单物流信息
@Resource
private GoodsDomainService goodsDomainService;//采购订单物料信息
@Resource
private OrderTypeDomainService orderTypeDomainService;//订单类型关系
@Resource
private TaskOrderDomainService taskOrderDomainService;
@Resource
private InterceptOrderDomainService interceptOrderDomainService;
@Resource
private ScmOrderDomainService scmOrderDomainService;
@Autowired
private SystemServiceFeign systemServiceFeign;
/**
* 分页查询采购订单管理列表
*/
public List<PurchaseOrderPO> queryList(PurchaseOrderDO purchaseOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
purchaseOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
purchaseOrderDO.setSource(0);
return purchaseOrderDomainService.queryList(purchaseOrderDO);
}
/**
* 新增采购订单管理
*/
@Transactional
public Boolean insert(PurchaseOrderAddDO purchaseOrderAddDO) {
//获取当前登录人,获取当前登录人的租户
LoginUser loginUser = SecurityUtils.getLoginUser();
List<GoodsDO> goodsDOList = purchaseOrderAddDO.getGoodsDOList();
//1、采购订单基本信息保存
PurchaseOrderDO purchaseOrderDo = purchaseOrderAddDO.getPurchaseOrderDo();
//查询订单关系表信息
OrderTypePO orderTypePO = orderTypeDomainService.getInfo(purchaseOrderDo.getOrderTypeId());
purchaseOrderDo.setJobTaskTypeId(orderTypePO.getJobTaskTypeId());
purchaseOrderDo.setJobTaskType(orderTypePO.getJobTaskType());
purchaseOrderDo.setOrderType(orderTypePO.getOrderType());
purchaseOrderDo.setDeliverySystem(orderTypePO.getDeliverySystem());
purchaseOrderDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
//物料信息
String goodNames = goodsDOList.stream().map(GoodsDO::getGoodsName).collect(Collectors.joining(","));
//物料数量
Integer goodSum = goodsDOList.stream().mapToInt(GoodsDO::getMaterialUnitEaQuantity).sum();
purchaseOrderDo.setMaterialInfo(goodNames);
purchaseOrderDo.setMaterialNum(goodSum);
Long orderId = purchaseOrderDomainService.insertReturnId(purchaseOrderDo);
//2、采购订单结算信息保存
SettlementDO settlementDo = purchaseOrderAddDO.getSettlementDo();
//数据字典信息获取:结算方式、支付状态
AjaxResult settlementDict = systemServiceFeign.selectListByDictType(DictCode.OMS_SETTLE_WAY.getCode());
if (!"200".equals(String.valueOf(settlementDict.get("code")))) {
throw new ServiceException("字典信息(结算方式-OMS)获取失败");
}
List<SysDictDataVo> settlementDictList = JSONUtil.toList(JSONUtil.toJsonStr(settlementDict.get("data")), SysDictDataVo.class);
Map<String, String> settlementDictListDictMap = settlementDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!settlementDictListDictMap.containsKey(settlementDo.getSettlementWayId())) {
throw new ServiceException("结算方式未找到");
}
AjaxResult payStateDict = systemServiceFeign.selectListByDictType(DictCode.OMS_PYA_STATE.getCode());
if (!"200".equals(String.valueOf(payStateDict.get("code")))) {
throw new ServiceException("字典信息(支付状态-OMS)获取失败");
}
List<SysDictDataVo> payStateDictList = JSONUtil.toList(JSONUtil.toJsonStr(payStateDict.get("data")), SysDictDataVo.class);
Map<String, String> payStateDictMap = payStateDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!payStateDictMap.containsKey(settlementDo.getPayStatusId())) {
throw new ServiceException("支付状态未找到");
}
settlementDo.setOrderId(orderId);
settlementDo.setSettlementWay(settlementDictListDictMap.get(settlementDo.getSettlementWayId()));
settlementDo.setPayStatus(payStateDictMap.get(settlementDo.getPayStatusId()));
settlementDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
settlementDomainService.insert(settlementDo);
//3、采购订单发货信息保存
DeliveryInfoDO deliveryInfoDo = purchaseOrderAddDO.getDeliveryInfoDo();
deliveryInfoDo.setOrderId(orderId);
deliveryInfoDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
deliveryInfoDomainService.insert(deliveryInfoDo);
//4、采购订单收货信息保存
ReceiptInfoDO receiptInfoDo = purchaseOrderAddDO.getReceiptInfoDo();
receiptInfoDo.setOrderId(orderId);
receiptInfoDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
receiptInfoDomainService.insert(receiptInfoDo);
//5、采购订单物流信息保存
LogisticsDO logisticsDo = purchaseOrderAddDO.getLogisticsDo();
AjaxResult transportTypeDict = systemServiceFeign.selectListByDictType(DictCode.OMS_TRANSPORT_TYPE.getCode());
if (!"200".equals(String.valueOf(transportTypeDict.get("code")))) {
throw new ServiceException("字典信息(运输方式-OMS)获取失败");
}
List<SysDictDataVo> transportTypeDictList = JSONUtil.toList(JSONUtil.toJsonStr(transportTypeDict.get("data")), SysDictDataVo.class);
Map<String, String> transportTypeDictMap = transportTypeDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
// if (!transportTypeDictMap.containsKey(logisticsDo.getShippingTypeId())) {
// throw new ServiceException("运输方式未找到");
// }
logisticsDo.setShippingType(transportTypeDictMap.get(logisticsDo.getShippingTypeId()));
logisticsDo.setOrderId(orderId);
logisticsDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
logisticsDomainService.insert(logisticsDo);
//6、采购订单物料信息保存
//6.1、物料信息删除
goodsDomainService.deleteByOrderId(orderId);
//6.1、物料信息保存
goodsDOList.forEach(goodsDO -> {
goodsDO.setOrderId(orderId);
goodsDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
});
goodsDomainService.batchInsert(goodsDOList);
return true;
}
/**
* 修改采购订单管理
*/
@Transactional
public Boolean update(PurchaseOrderAddDO purchaseOrderAddDO) {
//1、采购订单基本信息保存
PurchaseOrderDO purchaseOrderDo = purchaseOrderAddDO.getPurchaseOrderDo();
List<GoodsDO> goodsDOList = purchaseOrderAddDO.getGoodsDOList();
//查询订单类型信息
OrderTypePO orderTypePO = orderTypeDomainService.getInfo(purchaseOrderDo.getOrderTypeId());
purchaseOrderDo.setJobTaskTypeId(orderTypePO.getJobTaskTypeId());
purchaseOrderDo.setJobTaskType(orderTypePO.getJobTaskType());
purchaseOrderDo.setOrderType(orderTypePO.getOrderType());
purchaseOrderDo.setDeliverySystem(orderTypePO.getDeliverySystem());
//物料信息
String goodNames = goodsDOList.stream().map(GoodsDO::getGoodsName).collect(Collectors.joining(","));
//物料数量
Integer goodSum = goodsDOList.stream().mapToInt(GoodsDO::getMaterialUnitEaQuantity).sum();
purchaseOrderDo.setMaterialInfo(goodNames);
purchaseOrderDo.setMaterialNum(goodSum);
purchaseOrderDomainService.update(purchaseOrderDo);
//2、采购订单结算信息保存
SettlementDO settlementDo = purchaseOrderAddDO.getSettlementDo();
//数据字典信息获取:结算方式、支付状态
AjaxResult settlementDict = systemServiceFeign.selectListByDictType(DictCode.OMS_SETTLE_WAY.getCode());
if (!"200".equals(String.valueOf(settlementDict.get("code")))) {
throw new ServiceException("字典信息(结算方式-OMS)获取失败");
}
List<SysDictDataVo> settlementDictList = JSONUtil.toList(JSONUtil.toJsonStr(settlementDict.get("data")), SysDictDataVo.class);
Map<String, String> settlementDictListDictMap = settlementDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!settlementDictListDictMap.containsKey(settlementDo.getSettlementWayId())) {
throw new ServiceException("结算方式未找到");
}
AjaxResult payStateDict = systemServiceFeign.selectListByDictType(DictCode.OMS_PYA_STATE.getCode());
if (!"200".equals(String.valueOf(payStateDict.get("code")))) {
throw new ServiceException("字典信息(支付状态-OMS)获取失败");
}
List<SysDictDataVo> payStateDictList = JSONUtil.toList(JSONUtil.toJsonStr(payStateDict.get("data")), SysDictDataVo.class);
Map<String, String> payStateDictMap = payStateDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!payStateDictMap.containsKey(settlementDo.getPayStatusId())) {
throw new ServiceException("支付状态未找到");
}
settlementDo.setOrderId(purchaseOrderDo.getId());
settlementDo.setSettlementWay(settlementDictListDictMap.get(settlementDo.getSettlementWayId()));
settlementDo.setPayStatus(payStateDictMap.get(settlementDo.getPayStatusId()));
if(settlementDo.getId() != null){//如果ID不为空则走修改方法
settlementDomainService.update(settlementDo);
} else {
settlementDomainService.insert(settlementDo);
}
//3、采购订单发货信息保存
DeliveryInfoDO deliveryInfoDo = purchaseOrderAddDO.getDeliveryInfoDo();
deliveryInfoDo.setOrderId(purchaseOrderDo.getId());
if (deliveryInfoDo.getId() != null) {
deliveryInfoDomainService.update(deliveryInfoDo);
} else {
deliveryInfoDomainService.insert(deliveryInfoDo);
}
//4、采购订单收货信息保存
ReceiptInfoDO receiptInfoDo = purchaseOrderAddDO.getReceiptInfoDo();
receiptInfoDo.setOrderId(purchaseOrderDo.getId());
if (receiptInfoDo.getOrderId() != null) {
receiptInfoDomainService.update(receiptInfoDo);
} else {
receiptInfoDomainService.insert(receiptInfoDo);
}
//5、采购订单物流信息保存
LogisticsDO logisticsDo = purchaseOrderAddDO.getLogisticsDo();
AjaxResult transportTypeDict = systemServiceFeign.selectListByDictType(DictCode.OMS_TRANSPORT_TYPE.getCode());
if (!"200".equals(String.valueOf(transportTypeDict.get("code")))) {
throw new ServiceException("字典信息(运输方式-OMS)获取失败");
}
List<SysDictDataVo> transportTypeDictList = JSONUtil.toList(JSONUtil.toJsonStr(transportTypeDict.get("data")), SysDictDataVo.class);
Map<String, String> transportTypeDictMap = transportTypeDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!transportTypeDictMap.containsKey(logisticsDo.getShippingTypeId())) {
throw new ServiceException("运输方式未找到");
}
logisticsDo.setOrderId(purchaseOrderDo.getId());
logisticsDo.setShippingType(transportTypeDictMap.get(logisticsDo.getShippingTypeId()));
if (logisticsDo.getId() != null) {
logisticsDomainService.update(logisticsDo);
} else {
logisticsDomainService.insert(logisticsDo);
}
//6、采购订单物料信息保存
//6.1、物料信息删除
goodsDomainService.deleteByOrderId(purchaseOrderDo.getId());
//6.1、物料信息保存
goodsDOList.forEach(goodsDO -> goodsDO.setOrderId(purchaseOrderDo.getId()));
goodsDomainService.batchInsert(goodsDOList);
return true;
}
/**
* 批量删除采购订单管理
*/
public boolean delete(Long[] ids) {
return purchaseOrderDomainService.delete(ids);
}
/**
* 获取采购订单管理详细信息
*/
public PurchaseOrderDetailsPO getInfo(Long id)
{
return purchaseOrderDomainService.getInfo(id);
}
/**
* 采购订单审核
* @param purchaseOrderAuditDO
* @return
*/
public Boolean audit(PurchaseOrderAuditDO purchaseOrderAuditDO) {
return purchaseOrderDomainService.audit(purchaseOrderAuditDO);
}
public Boolean cancelAudit(PurchaseOrderAuditDO purchaseOrderAuditDO) {
return purchaseOrderDomainService.cancelAudit(purchaseOrderAuditDO);
}
@Transactional(rollbackFor = Exception.class)
public void importPurOrderExcel(List<PurchaseOrderExcelDTO> purchaseOrderExcelDtoList) {
// TODO:缺少对ID字段的相关处理
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
if (CollUtil.isEmpty(purchaseOrderExcelDtoList)) {
throw new ServiceException("导入信息为空");
}
List<SettlementDO> settlementDOList = new ArrayList<>();
List<DeliveryInfoDO> deliveryInfoDOList = new ArrayList<>();
List<ReceiptInfoDO> receiptInfoDOList = new ArrayList<>();
List<LogisticsDO> logisticsDOList = new ArrayList<>();
List<GoodsDO> goodsDOList = new ArrayList<>();
// =================== 遍历导入数据,保存销售订单并将其余表数据处理为可批量插入的数据 =========================
purchaseOrderExcelDtoList.forEach( x -> {
// 采购订单信息
PurchaseOrder purOrder = purchaseOrderDomainService.saveFromImportSalesOrder(x);
// 结算信息保存到列表中进行批量保存
settlementDomainService.listAddFromImportPurOrder(settlementDOList, x, purOrder);
// 发货信息保存到列表中进行批量保存
deliveryInfoDomainService.listAddFromImportPurOrder(deliveryInfoDOList, x, purOrder);
// 收货信息保存到列表中进行批量保存
receiptInfoDomainService.listAddFromImportPurOrder(receiptInfoDOList, x, purOrder);
// 物流信息保存到列表中进行批量保存
logisticsDomainService.listAddFromImportPurOrder(logisticsDOList, x, purOrder);
// 物料信息保存到列表中进行批量保存(导入的每个订单只能有一条明细)
goodsDomainService.listAddFromImportPurOrder(goodsDOList, x, purOrder);
});
// ================== 列表存在数据则保存 ==================
if(settlementDOList.size() > 0){
settlementDomainService.batchInsert(settlementDOList);
}
if(deliveryInfoDOList.size() > 0){
deliveryInfoDomainService.batchInsert(deliveryInfoDOList);
}
if(receiptInfoDOList.size() > 0){
receiptInfoDomainService.batchInsert(receiptInfoDOList);
}
if(logisticsDOList.size() > 0){
logisticsDomainService.batchInsert(logisticsDOList);
}
if(goodsDOList.size() > 0){
goodsDomainService.batchInsert(goodsDOList);
}
}
public List<PurchaseOrderPO> orderPoolList(PurchaseOrderDO purchaseOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
purchaseOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
purchaseOrderDO.setSource(1);
return purchaseOrderDomainService.queryList(purchaseOrderDO);
}
/**
* 拦截采购订单
*
* 传入多个订单ID,获取订单下全部任务并分组MAP <订单m,List<m下的所有任务n>>,
* 遍历分组,处理每组对应的采购订单及任务列表
* 不管拦截成功或失败,都会新增一条记录到拦截表中,拦截成功后会同步修改下游数据表中的状态
*
* @param idList
*/
@Transactional(rollbackFor = Exception.class)
public void interceptOrder(List<Long> idList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
// 查询采购订单列表下所有的任务组 <订单m,List<m下的所有任务n>>,
Map<Long, List<TaskOrderPO>> taskMapGroupByOrderId = taskOrderDomainService.getMapByOrderIdList(idList, OrderConstant.SCM_SOURCE_1);
taskMapGroupByOrderId.forEach((k,v) -> {
// 校验订单
PurchaseOrderDetailsPO purOrder = purchaseOrderDomainService.getInfo(k);
if(ArrayUtil.contains(OrderConstant.PUR_STATUS_GROUP_UNABLE_INTERCEPT, purOrder.getPurchaseOrderPO().getOrderState())){
throw new ServiceException(String.format("【%s】当前订单状态无需进行拦截!",purOrder.getPurchaseOrderPO().getOrderNo()));
//break;
}
// 保存订单拦截表
InterceptOrderDO interceptOrderDO = interceptOrderDomainService.saveInterceptOrder(k, v);
// 拦截成功修改其他表数据
if(OrderConstant.INTERCEPT_STATUS_1.equals(interceptOrderDO.getInterceptState())){
// 采购订单修改为已拦截
purchaseOrderDomainService.updateStateById(k, OrderConstant.PUR_STATUS_8);
// 供应链订单修改为已拦截
scmOrderDomainService.interceptByOrderId(k);
// 作业任务修改为已拦截(排除已取消状态的)
taskOrderDomainService.interceptByOrderId(k);
}
});
}
@Transactional
public Boolean createSco(List<Long> ids) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
String userName = loginUser.getUsername();
// 获取登录人id
Long userId = loginUser.getUserid();
//1、先查询采购订单的基本信息
List<PurchaseOrderPO> purchaseOrderPOS = purchaseOrderDomainService.getInfo(ids);
//1、1 采购订单只有在已审核状态下才可以生成供应链订单
List<PurchaseOrderPO> stateCount = purchaseOrderPOS.stream().filter(e -> e.getOrderState() != 2).collect(Collectors.toList());
if (!stateCount.isEmpty()) {
throw new ServiceException("已审核状态下才可以生成供应链订单");
}
//1.2 更新采购订单的状态
List<PurchaseOrderDO> purchaseOrderDOS = purchaseOrderPOS.stream().map(purchaseOrderPO -> {
PurchaseOrderDO purchaseOrderDO = new PurchaseOrderDO();
BeanUtils.copyProperties(purchaseOrderPO, purchaseOrderDO);
purchaseOrderDO.setOrderState(4);
return purchaseOrderDO;
}).collect(Collectors.toList());
Boolean updateBoolean = purchaseOrderDomainService.batchUpdate(purchaseOrderDOS);
//2、数据处理,采购订单处理成供应链订单
List<ScmOrderDO> scmOrderDOS = purchaseOrderPOS.stream().map(purchaseOrderPO -> {
ScmOrderDO scmOrderDO = new ScmOrderDO();
scmOrderDO.setCreateBy(ObjectUtil.defaultIfNull(userId, new Long("0")));
scmOrderDO.setCreateByName(userName);
scmOrderDO.setCreateTime(new Date());
scmOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
scmOrderDO.setScmSource(1);
scmOrderDO.setOrderId(purchaseOrderPO.getId());
scmOrderDO.setScmNo(OrderSequence.getOrderCode(OrderConstant.SCM_NO_PREFIX));
return scmOrderDO;
}).collect(Collectors.toList());
Boolean insertBoolean = false;
if (Boolean.TRUE.equals(updateBoolean)) {
insertBoolean = scmOrderDomainService.batchInsert(scmOrderDOS);
}
return insertBoolean;
}
@Transactional
public Boolean cancelSco(List<Long> ids) {
LoginUser loginUser = SecurityUtils.getLoginUser();
//查询所有的采购订单信息
List<PurchaseOrderPO> purchaseOrderPOS = purchaseOrderDomainService.getInfo(ids);
//判断一下是否生成供应链订单,未生成则不需要取消
List<PurchaseOrderPO> purchaseCollect = purchaseOrderPOS.stream().filter(purchaseOrderPO -> purchaseOrderPO.getOrderState() < 4)
.collect(Collectors.toList());
if (!purchaseCollect.isEmpty()) {
throw new ServiceException("供应链订单尚未生成,无需进行取消");
}
//根据采购订单查询作业任务
List<TaskOrderPO> taskOrderPOS = taskOrderDomainService.getInfosByOrderId(ids);
//过滤作业任务(如果作业任务包含未下发/已下发/已完成 的,则不允许取消作业任务)
List<TaskOrderPO> collect = taskOrderPOS.stream().filter(taskOrderPO -> taskOrderPO.getTaskStatus() == 0 ||
taskOrderPO.getTaskStatus() == 1 || taskOrderPO.getTaskStatus() == 2).collect(Collectors.toList());
if (!collect.isEmpty()) {
throw new ServiceException("该订单已生成作业任务,当前无法进行供应链订单的取消操作");
}
//查询所有的供应链订单信息,根据采购单ID
List<ScmOrderPO> scmOrderPOS = scmOrderDomainService.getInfosByOrderId(ids);
//修改供应链订单状态,修改未已取消状态
List<ScmOrderDO> scmOrderDOS = scmOrderPOS.stream().map(scmOrderPO -> {
ScmOrderDO scmOrderDO = new ScmOrderDO();
scmOrderDO.setId(scmOrderPO.getId());
scmOrderDO.setOrderState(7);
scmOrderDO.setUpdateTime(new Date());
scmOrderDO.setUpdateBy(loginUser.getUserid());
scmOrderDO.setUpdateByName(loginUser.getUsername());
return scmOrderDO;
}).collect(Collectors.toList());
if (scmOrderDOS.isEmpty()) {
throw new ServiceException("未查询到供应链订单");
}
Boolean scm = scmOrderDomainService.batchUpdate(scmOrderDOS);
// 修改采购订单,采购订单修改为已审核状态下
List<PurchaseOrderDO> purchaseOrderDOS = purchaseOrderPOS.stream().map(purchaseOrderPO -> {
PurchaseOrderDO purchaseOrderDO = new PurchaseOrderDO();
purchaseOrderDO.setId(purchaseOrderPO.getId());
purchaseOrderDO.setOrderState(2);
purchaseOrderDO.setUpdateTime(new Date());
purchaseOrderDO.setUpdateBy(loginUser.getUserid());
purchaseOrderDO.setUpdateByName(loginUser.getUsername());
return purchaseOrderDO;
}).collect(Collectors.toList());
if (Boolean.TRUE.equals(scm)) {
return purchaseOrderDomainService.batchUpdate(purchaseOrderDOS);
}
return false;
}
}
@@ -0,0 +1,74 @@
package com.mhd.oms.application.service.receiptInfo;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.receiptInfo.repository.po.ReceiptInfoPO;
import com.mhd.oms.domain.receiptInfo.repository.todo.ReceiptInfoDO;
import com.mhd.oms.domain.receiptInfo.service.ReceiptInfoDomainService;
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.List;
/**
* 收货信息ApplicationService
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class ReceiptInfoApplicationService {
@Autowired
private ReceiptInfoDomainService receiptInfoDomainService;
/**
* 分页查询收货信息列表
*/
public List<ReceiptInfoPO> queryList(ReceiptInfoDO receiptInfoDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
receiptInfoDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
return receiptInfoDomainService.queryList(receiptInfoDO);
}
/**
* 新增收货信息
*/
public Boolean insert(ReceiptInfoDO receiptInfoDO) {
return receiptInfoDomainService.insert(receiptInfoDO);
}
/**
* 修改收货信息
*/
public Boolean update(ReceiptInfoDO receiptInfoDO) {
return receiptInfoDomainService.update(receiptInfoDO);
}
/**
* 批量删除收货信息
*/
public boolean delete(Long[] ids) {
return receiptInfoDomainService.delete(ids);
}
/**
* 获取收货信息详细信息
*/
public ReceiptInfoPO getInfo(Long id)
{
return receiptInfoDomainService.getInfo(id);
}
}
@@ -0,0 +1,537 @@
package com.mhd.oms.application.service.salesOrder;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.github.pagehelper.util.StringUtil;
import com.mhd.common.core.enums.DictCode;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
import com.mhd.common.core.exception.digitalLogisticsException.UserError;
import com.mhd.common.core.utils.OrderSequence;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.constant.OrderConstant;
import com.mhd.oms.domain.deliveryInfo.repository.todo.DeliveryInfoDO;
import com.mhd.oms.domain.deliveryInfo.service.DeliveryInfoDomainService;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import com.mhd.oms.domain.goods.service.GoodsDomainService;
import com.mhd.oms.domain.interceptOrder.repository.todo.InterceptOrderDO;
import com.mhd.oms.domain.interceptOrder.service.InterceptOrderDomainService;
import com.mhd.oms.domain.logistics.repository.todo.LogisticsDO;
import com.mhd.oms.domain.logistics.service.LogisticsDomainService;
import com.mhd.oms.domain.orderType.repository.po.OrderTypePO;
import com.mhd.oms.domain.orderType.service.OrderTypeDomainService;
import com.mhd.oms.domain.receiptInfo.repository.todo.ReceiptInfoDO;
import com.mhd.oms.domain.receiptInfo.service.ReceiptInfoDomainService;
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.SalesOrderAddDO;
import com.mhd.oms.domain.salesOrder.repository.todo.SalesOrderAuditDO;
import com.mhd.oms.domain.salesOrder.repository.todo.SalesOrderDO;
import com.mhd.oms.domain.salesOrder.service.SalesOrderDomainService;
import com.mhd.oms.domain.scmOrder.repository.po.ScmOrderPO;
import com.mhd.oms.domain.scmOrder.repository.todo.ScmOrderDO;
import com.mhd.oms.domain.scmOrder.service.ScmOrderDomainService;
import com.mhd.oms.domain.settlement.repository.todo.SettlementDO;
import com.mhd.oms.domain.settlement.service.SettlementDomainService;
import com.mhd.oms.domain.taskOrder.repository.po.TaskOrderPO;
import com.mhd.oms.domain.taskOrder.service.TaskOrderDomainService;
import com.mhd.oms.infrastructure.feign.vo.SysDictDataVo;
import com.mhd.oms.interfaces.dto.salesOrder.SalesOrderExcelDTO;
import com.mhd.system.api.SystemServiceFeign;
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 org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 销售订单ApplicationService
*
* @author gen
* @date 2024-06-08
*/
@Service
@Slf4j
public class SalesOrderApplicationService {
@Autowired
private SalesOrderDomainService salesOrderDomainService;
@Resource
private ScmOrderDomainService scmOrderDomainService;
@Resource
private TaskOrderDomainService taskOrderDomainService;
@Resource
private OrderTypeDomainService orderTypeDomainService;//订单类型关系
@Resource
private SystemServiceFeign systemServiceFeign;
@Resource
private SettlementDomainService settlementDomainService;
@Resource
private DeliveryInfoDomainService deliveryInfoDomainService;
@Resource
private ReceiptInfoDomainService receiptInfoDomainService;
@Resource
private LogisticsDomainService logisticsDomainService;
@Resource
private GoodsDomainService goodsDomainService;
@Resource
private InterceptOrderDomainService interceptOrderDomainService;
/**
* 分页查询销售订单列表
*/
public List<SalesOrderPO> queryList(SalesOrderDO salesOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
salesOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
salesOrderDO.setSource(0);
return salesOrderDomainService.queryList(salesOrderDO);
}
/**
* 订单池,查询source 等于 1
* @param salesOrderDO
* @return
*/
public List<SalesOrderPO> listPool(SalesOrderDO salesOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
salesOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
salesOrderDO.setSource(1);
return salesOrderDomainService.queryList(salesOrderDO);
}
/**
* 新增销售订单
*/
@Transactional(rollbackFor = Exception.class)
public Boolean insert(SalesOrderAddDO salesOrderAddDO) {
//获取当前登录人,获取当前登录人的租户
LoginUser loginUser = SecurityUtils.getLoginUser();
//1、销售订单基本信息保存
SalesOrderDO salesOrderDO = salesOrderAddDO.getSalesOrderDO();
//查询订单关系表信息
OrderTypePO orderTypePO = orderTypeDomainService.getInfo(salesOrderDO.getOrderTypeId());
salesOrderDO.setJobTaskTypeId(orderTypePO.getJobTaskTypeId());
salesOrderDO.setJobTaskType(orderTypePO.getJobTaskType());
salesOrderDO.setOrderType(orderTypePO.getOrderType());
salesOrderDO.setDeliverySystem(orderTypePO.getDeliverySystem());
salesOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
Long orderId = salesOrderDomainService.insertReturnId(salesOrderDO);
//2、销售订单结算信息保存
SettlementDO settlementDo = salesOrderAddDO.getSettlementDO();
//数据字典信息获取:结算方式、支付状态
AjaxResult settlementDict = systemServiceFeign.selectListByDictType(DictCode.OMS_SETTLE_WAY.getCode());
if (!"200".equals(String.valueOf(settlementDict.get("code")))) {
throw new ServiceException("字典信息(结算方式-OMS)获取失败");
}
List<SysDictDataVo> settlementDictList = JSONUtil.toList(JSONUtil.toJsonStr(settlementDict.get("data")), SysDictDataVo.class);
Map<String, String> settlementDictListDictMap = settlementDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!settlementDictListDictMap.containsKey(settlementDo.getSettlementWayId())) {
throw new ServiceException("结算方式未找到");
}
AjaxResult payStateDict = systemServiceFeign.selectListByDictType(DictCode.OMS_PYA_STATE.getCode());
if (!"200".equals(String.valueOf(payStateDict.get("code")))) {
throw new ServiceException("字典信息(支付状态-OMS)获取失败");
}
List<SysDictDataVo> payStateDictList = JSONUtil.toList(JSONUtil.toJsonStr(payStateDict.get("data")), SysDictDataVo.class);
Map<String, String> payStateDictMap = payStateDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!payStateDictMap.containsKey(settlementDo.getPayStatusId())) {
throw new ServiceException("支付状态未找到");
}
settlementDo.setOrderId(orderId);
settlementDo.setSettlementWay(settlementDictListDictMap.get(settlementDo.getSettlementWayId()));
settlementDo.setPayStatus(payStateDictMap.get(settlementDo.getPayStatusId()));
settlementDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
settlementDomainService.insert(settlementDo);
//3、销售订单发货信息保存
DeliveryInfoDO deliveryInfoDo = salesOrderAddDO.getDeliveryInfoDO();
deliveryInfoDo.setOrderId(orderId);
deliveryInfoDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
deliveryInfoDomainService.insert(deliveryInfoDo);
//4、销售订单收货信息保存
ReceiptInfoDO receiptInfoDo = salesOrderAddDO.getReceiptInfoDO();
receiptInfoDo.setOrderId(orderId);
receiptInfoDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
receiptInfoDomainService.insert(receiptInfoDo);
//5、销售订单物流信息保存
LogisticsDO logisticsDo = salesOrderAddDO.getLogisticsDO();
logisticsDo.setOrderId(orderId);
logisticsDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
if(StringUtil.isNotEmpty(logisticsDo.getShippingTypeId())){
AjaxResult transportTypeDict = systemServiceFeign.selectListByDictType(DictCode.OMS_TRANSPORT_TYPE.getCode());
if (!"200".equals(String.valueOf(transportTypeDict.get("code")))) {
throw new ServiceException("字典信息(运输方式-OMS)获取失败");
}
List<SysDictDataVo> transportTypeDictList = JSONUtil.toList(JSONUtil.toJsonStr(transportTypeDict.get("data")), SysDictDataVo.class);
Map<String, String> transportTypeDictMap = transportTypeDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!transportTypeDictMap.containsKey(logisticsDo.getShippingTypeId())) {
throw new ServiceException("运输方式未找到");
}
logisticsDo.setShippingType(transportTypeDictMap.get(logisticsDo.getShippingTypeId()));
}
logisticsDomainService.insert(logisticsDo);
//6、销售订单物料信息保存
List<GoodsDO> goodsDOList = salesOrderAddDO.getGoodsDOS();
//6.1、物料信息删除
goodsDomainService.deleteByOrderId(orderId);
//6.1、物料信息保存
goodsDOList.forEach(goodsDO -> {
goodsDO.setOrderId(orderId);
goodsDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
});
goodsDomainService.batchInsert(goodsDOList);
return true;
}
/**
* 修改销售订单
*/
public Boolean update(SalesOrderAddDO salesOrderAddDO) {
//1、采购订单基本信息保存
SalesOrderDO salesOrderDO = salesOrderAddDO.getSalesOrderDO();
List<GoodsDO> goodsDOList = salesOrderAddDO.getGoodsDOS();
//查询订单类型信息
OrderTypePO orderTypePO = orderTypeDomainService.getInfo(salesOrderDO.getOrderTypeId());
salesOrderDO.setJobTaskTypeId(orderTypePO.getJobTaskTypeId());
salesOrderDO.setJobTaskType(orderTypePO.getJobTaskType());
salesOrderDO.setOrderType(orderTypePO.getOrderType());
salesOrderDO.setDeliverySystem(orderTypePO.getDeliverySystem());
//物料信息
//String goodNames = goodsDOList.stream().map(GoodsDO::getGoodsName).collect(Collectors.joining(","));
//物料数量
//Integer goodSum = goodsDOList.stream().mapToInt(GoodsDO::getMaterialUnitEaQuantity).sum();
//salesOrderDO.setMaterialInfo(goodNames);
//salesOrderDO.setMaterialNum(goodSum);
salesOrderDomainService.update(salesOrderDO);
//2、采购订单结算信息保存
SettlementDO settlementDo = salesOrderAddDO.getSettlementDO();
//数据字典信息获取:结算方式、支付状态
AjaxResult settlementDict = systemServiceFeign.selectListByDictType(DictCode.OMS_SETTLE_WAY.getCode());
if (!"200".equals(String.valueOf(settlementDict.get("code")))) {
throw new ServiceException("字典信息(结算方式-OMS)获取失败");
}
List<SysDictDataVo> settlementDictList = JSONUtil.toList(JSONUtil.toJsonStr(settlementDict.get("data")), SysDictDataVo.class);
Map<String, String> settlementDictListDictMap = settlementDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!settlementDictListDictMap.containsKey(settlementDo.getSettlementWayId())) {
throw new ServiceException("结算方式未找到");
}
AjaxResult payStateDict = systemServiceFeign.selectListByDictType(DictCode.OMS_PYA_STATE.getCode());
if (!"200".equals(String.valueOf(payStateDict.get("code")))) {
throw new ServiceException("字典信息(支付状态-OMS)获取失败");
}
List<SysDictDataVo> payStateDictList = JSONUtil.toList(JSONUtil.toJsonStr(payStateDict.get("data")), SysDictDataVo.class);
Map<String, String> payStateDictMap = payStateDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!payStateDictMap.containsKey(settlementDo.getPayStatusId())) {
throw new ServiceException("支付状态未找到");
}
settlementDo.setOrderId(salesOrderDO.getId());
settlementDo.setSettlementWay(settlementDictListDictMap.get(settlementDo.getSettlementWayId()));
settlementDo.setPayStatus(payStateDictMap.get(settlementDo.getPayStatusId()));
if(settlementDo.getId() != null){//如果ID不为空则走修改方法
settlementDomainService.update(settlementDo);
} else {
settlementDomainService.insert(settlementDo);
}
//3、销售订单发货信息保存
DeliveryInfoDO deliveryInfoDo = salesOrderAddDO.getDeliveryInfoDO();
deliveryInfoDo.setOrderId(salesOrderDO.getId());
if (deliveryInfoDo.getId() != null) {
deliveryInfoDomainService.update(deliveryInfoDo);
} else {
deliveryInfoDomainService.insert(deliveryInfoDo);
}
//4、销售订单收货信息保存
ReceiptInfoDO receiptInfoDo = salesOrderAddDO.getReceiptInfoDO();
receiptInfoDo.setOrderId(salesOrderDO.getId());
if (receiptInfoDo.getOrderId() != null) {
receiptInfoDomainService.update(receiptInfoDo);
} else {
receiptInfoDomainService.insert(receiptInfoDo);
}
//5、销售订单物流信息保存
LogisticsDO logisticsDo = salesOrderAddDO.getLogisticsDO();
AjaxResult transportTypeDict = systemServiceFeign.selectListByDictType(DictCode.OMS_TRANSPORT_TYPE.getCode());
if (!"200".equals(String.valueOf(transportTypeDict.get("code")))) {
throw new ServiceException("字典信息(运输方式-OMS)获取失败");
}
List<SysDictDataVo> transportTypeDictList = JSONUtil.toList(JSONUtil.toJsonStr(transportTypeDict.get("data")), SysDictDataVo.class);
Map<String, String> transportTypeDictMap = transportTypeDictList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
if (!transportTypeDictMap.containsKey(logisticsDo.getShippingTypeId())) {
throw new ServiceException("运输方式未找到");
}
logisticsDo.setOrderId(salesOrderDO.getId());
logisticsDo.setShippingType(transportTypeDictMap.get(logisticsDo.getShippingTypeId()));
if (logisticsDo.getId() != null) {
logisticsDomainService.update(logisticsDo);
} else {
logisticsDomainService.insert(logisticsDo);
}
//6、销售订单物料信息保存
//6.1、物料信息删除
goodsDomainService.deleteByOrderId(salesOrderDO.getId());
//6.1、物料信息保存
goodsDOList.forEach(goodsDO -> goodsDO.setOrderId(salesOrderDO.getId()));
goodsDomainService.batchInsert(goodsDOList);
return true;
}
/**
* 批量删除销售订单
*/
public boolean delete(Long[] ids) {
return salesOrderDomainService.delete(ids);
}
/**
* 获取销售订单详细信息
*/
public SalesOrderPO getInfo(Long id)
{
return salesOrderDomainService.getInfo(id);
}
public Boolean createSco(List<Long> ids) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
//供应链订单号
String scmNo = OrderSequence.getOrderCode(OrderConstant.SCM_NO_PREFIX);
String userName = loginUser.getUsername();
// 获取登录人id
Long userId = loginUser.getUserid();
//1、先查询销售订单的基本信息
List<SalesOrderPO> salesOrderPOS = salesOrderDomainService.getInfos(ids);
if (salesOrderPOS.isEmpty()) {
throw new ServiceException("未查询到匹配的销售订单信息");
}
//2、销售订单只有在已审核状态下才可以生成供应链订单
List<SalesOrderPO> stateCount = salesOrderPOS.stream().filter(e -> e.getOrderState() != 2).collect(Collectors.toList());
if (!stateCount.isEmpty()) {
throw new ServiceException("已审核状态下才可以生成供应链订单");
}
//3、更新销售订单的状态
List<SalesOrderDO> salesOrderDOS = salesOrderPOS.stream().map(salesOrderPO -> {
SalesOrderDO salesOrderDO = new SalesOrderDO();
BeanUtils.copyProperties(salesOrderPO, salesOrderDO);
salesOrderDO.setOrderState(4);
salesOrderDO.setScoNo(scmNo);//回填供应链订单号
return salesOrderDO;
}).collect(Collectors.toList());
//4、批量更新销售订单
Boolean updateBoolean = salesOrderDomainService.batchUpdate(salesOrderDOS);
//5、数据处理,销售订单处理成供应链订单
List<ScmOrderDO> scmOrderDOS = salesOrderPOS.stream().map(salesOrderPO -> {
ScmOrderDO scmOrderDO = new ScmOrderDO();
scmOrderDO.setCreateBy(ObjectUtil.defaultIfNull(userId, new Long("0")));
scmOrderDO.setCreateByName(userName);
scmOrderDO.setCreateTime(new Date());
scmOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
scmOrderDO.setScmSource(2);
scmOrderDO.setOrderId(salesOrderPO.getId());
scmOrderDO.setScmNo(scmNo);
return scmOrderDO;
}).collect(Collectors.toList());
Boolean insertBoolean = false;
if (Boolean.TRUE.equals(updateBoolean)) {
insertBoolean = scmOrderDomainService.batchInsert(scmOrderDOS);
}
return insertBoolean;
}
public Boolean audit(SalesOrderAuditDO salesOrderAuditDO) {
return salesOrderDomainService.audit(salesOrderAuditDO);
}
public Boolean cancelAudit(SalesOrderAuditDO salesOrderAuditDO) {
return salesOrderDomainService.cancelAudit(salesOrderAuditDO);
}
public Boolean cancelSco(List<Long> ids) {
LoginUser loginUser = SecurityUtils.getLoginUser();
//查询所有的销售订单信息
List<SalesOrderPO> salesOrderPOS = salesOrderDomainService.getInfos(ids);
//判断一下是否生成供应链订单,未生成则不需要取消
List<SalesOrderPO> salesCollect = salesOrderPOS.stream().filter(salesOrderPO -> salesOrderPO.getOrderState() < 4)
.collect(Collectors.toList());
if (!salesCollect.isEmpty()) {
throw new ServiceException("供应链订单尚未生成,无需进行取消");
}
//根据采购订单查询作业任务
List<TaskOrderPO> taskOrderPOS = taskOrderDomainService.getInfosByOrderId(ids);
//过滤作业任务(如果作业任务包含未下发/已下发/已完成 的,则不允许取消作业任务)
List<TaskOrderPO> collect = taskOrderPOS.stream().filter(taskOrderPO -> taskOrderPO.getTaskStatus() == 0 ||
taskOrderPO.getTaskStatus() == 1 || taskOrderPO.getTaskStatus() == 2).collect(Collectors.toList());
if (!collect.isEmpty()) {
throw new ServiceException("订单已生成作业任务,当前无法进行供应链订单的取消操作");
}
//查询所有的供应链订单信息,根据采购单ID
List<ScmOrderPO> scmOrderPOS = scmOrderDomainService.getInfosByOrderId(ids);
//修改供应链订单状态,修改未已取消状态
List<ScmOrderDO> scmOrderDOS = scmOrderPOS.stream().map(scmOrderPO -> {
ScmOrderDO scmOrderDO = new ScmOrderDO();
scmOrderDO.setId(scmOrderPO.getId());
scmOrderDO.setOrderState(7);
scmOrderDO.setUpdateTime(new Date());
scmOrderDO.setUpdateBy(loginUser.getUserid());
scmOrderDO.setUpdateByName(loginUser.getUsername());
return scmOrderDO;
}).collect(Collectors.toList());
if (scmOrderDOS.isEmpty()) {
throw new ServiceException("未查询到供应链订单");
}
Boolean scm = scmOrderDomainService.batchUpdate(scmOrderDOS);
// 修改销售订单,销售订单修改为已审核状态下
List<SalesOrderDO> salesOrderDOS = salesOrderPOS.stream().map(salesOrderPO -> {
SalesOrderDO salesOrderDO = new SalesOrderDO();
salesOrderDO.setId(salesOrderPO.getId());
salesOrderDO.setOrderState(2);
salesOrderDO.setScoNo("");
salesOrderDO.setUpdateTime(new Date());
salesOrderDO.setUpdateBy(loginUser.getUserid());
salesOrderDO.setUpdateByName(loginUser.getUsername());
return salesOrderDO;
}).collect(Collectors.toList());
if (Boolean.TRUE.equals(scm)) {
return salesOrderDomainService.batchUpdate(salesOrderDOS);
}
return false;
}
@Transactional
public Boolean interceptOrder(List<Long> idList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
// 查询销售订单列表下所有的任务组
Map<Long, List<TaskOrderPO>> taskMapGroupByOrderId = taskOrderDomainService.getMapByOrderIdList(idList, OrderConstant.SCM_SOURCE_2);
// 遍历采购订单下的任务信息,有已下发、已完成、未下发已合并的保存到拦截表【失败】,否则更改为任务(排除已取消)、供应链订单、采购订单状态为已拦截
taskMapGroupByOrderId.forEach((k,v) -> {
SalesOrderPO salesOrderPO = salesOrderDomainService.getInfo(k);
if(ArrayUtil.contains(OrderConstant.PUR_STATUS_GROUP_UNABLE_INTERCEPT, salesOrderPO.getOrderState())){
throw new ServiceException(String.format("【%s】当前订单状态无需进行拦截!",salesOrderPO.getOrderNo()));
//break;
}
// 保存订单拦截表
InterceptOrderDO interceptOrderDO = interceptOrderDomainService.saveInterceptOrder(k, v);
// 拦截成功修改其他表数据
if(OrderConstant.INTERCEPT_STATUS_1.equals(interceptOrderDO.getInterceptState())){
// 采购订单修改为已拦截
salesOrderDomainService.updateStateById(k, OrderConstant.PUR_STATUS_8);
// 供应链订单修改为已拦截
scmOrderDomainService.interceptByOrderId(k);
// 作业任务修改为已拦截
taskOrderDomainService.interceptByOrderId(k);
}
});
return true;
}
public SalesOrderDetailsPO getetails(Long id) {
return salesOrderDomainService.getetails(id);
}
@Transactional(rollbackFor = Exception.class)
public void importSalesOrder(List<SalesOrderExcelDTO> salesExcelList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
if (CollUtil.isEmpty(salesExcelList)) {
throw new ServiceException("导入信息为空");
}
List<SettlementDO> settlementDOList = new ArrayList<>();
List<DeliveryInfoDO> deliveryInfoDOList = new ArrayList<>();
List<ReceiptInfoDO> receiptInfoDOList = new ArrayList<>();
List<LogisticsDO> logisticsDOList = new ArrayList<>();
List<GoodsDO> goodsDOList = new ArrayList<>();
// =================== 遍历导入数据,保存销售订单并将其余表数据处理为可批量插入的数据 =========================
salesExcelList.forEach( x -> {
// 保存销售订单
SalesOrder salesOrder = salesOrderDomainService.saveFromImportSalesOrder(x);
// 结算信息保存到 【settlementDOList】 列表中进行批量保存
settlementDomainService.listAddFromImportSalesOrder(settlementDOList, x, salesOrder);
// 发货信息保存到 【deliveryInfoDOList】 列表中进行批量保存
deliveryInfoDomainService.listAddFromImportSalesOrder(deliveryInfoDOList, x, salesOrder);
// 收货信息保存到 【receiptInfoDOList】 列表中进行批量保存
receiptInfoDomainService.listAddFromImportSalesOrder(receiptInfoDOList, x, salesOrder);
// 物流信息保存到 【logisticsDOList】 列表中进行批量保存
logisticsDomainService.listAddFromImportSalesOrder(logisticsDOList, x, salesOrder);
// 物料信息保存到 【goodsDOList】列表中进行批量保存(导入的每个订单只能有一条明细)
goodsDomainService.listAddFromImportSalesOrder(goodsDOList, x, salesOrder);
});
// ================== 列表存在数据则保存 ==================
if(settlementDOList.size() > 0){
settlementDomainService.batchInsert(settlementDOList);
}
if(deliveryInfoDOList.size() > 0){
deliveryInfoDomainService.batchInsert(deliveryInfoDOList);
}
if(receiptInfoDOList.size() > 0){
receiptInfoDomainService.batchInsert(receiptInfoDOList);
}
if(logisticsDOList.size() > 0){
logisticsDomainService.batchInsert(logisticsDOList);
}
if(goodsDOList.size() > 0){
goodsDomainService.batchInsert(goodsDOList);
}
}
}
@@ -0,0 +1,330 @@
package com.mhd.oms.application.service.scmOrder;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
import com.mhd.common.core.exception.digitalLogisticsException.UserError;
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.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.goods.repository.todo.GoodsDO;
import com.mhd.oms.domain.goods.service.GoodsDomainService;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderDetailsPO;
import com.mhd.oms.domain.purchaseOrder.service.PurchaseOrderDomainService;
import com.mhd.oms.domain.salesOrder.repository.po.SalesOrderPO;
import com.mhd.oms.domain.salesOrder.service.SalesOrderDomainService;
import com.mhd.oms.domain.scmOrder.repository.po.ScmOrderPO;
import com.mhd.oms.domain.scmOrder.repository.todo.ScmOrderDO;
import com.mhd.oms.domain.scmOrder.service.ScmOrderDomainService;
import com.mhd.oms.domain.taskOrder.repository.po.TaskUpperDataPO;
import com.mhd.oms.domain.taskOrder.repository.todo.CreateTaskOrderDO;
import com.mhd.oms.domain.taskOrder.repository.todo.TaskOrderDO;
import com.mhd.oms.domain.taskOrder.service.TaskOrderDomainService;
import com.mhd.oms.interfaces.dto.taskOrder.CreateTaskOrderGoodsInfoDTO;
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 org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* 供应链订单ApplicationService
*
* @author gen
* @date 2024-05-21
*/
@Service
@Slf4j
public class ScmOrderApplicationService {
@Autowired
private ScmOrderDomainService scmOrderDomainService;
@Resource
private GoodsDomainService goodsDomainService;
@Resource
private PurchaseOrderDomainService purchaseOrderDomainService;
@Resource
private SalesOrderDomainService salesOrderDomainService;
@Resource
private TaskOrderDomainService taskOrderDomainService;
/**
* 分页查询供应链订单列表
*/
public List<ScmOrderPO> queryList(ScmOrderDO scmOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
scmOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
return scmOrderDomainService.queryList(scmOrderDO);
}
/**
* 新增供应链订单
*/
public Boolean insert(ScmOrderDO scmOrderDO) {
return scmOrderDomainService.insert(scmOrderDO);
}
/**
* 修改供应链订单
*/
public Boolean update(ScmOrderDO scmOrderDO) {
return scmOrderDomainService.update(scmOrderDO);
}
/**
* 批量删除供应链订单
*/
public boolean delete(Long[] ids) {
return scmOrderDomainService.delete(ids);
}
/**
* 获取供应链订单详细信息
*/
public ScmOrderPO getInfo(Long id)
{
return scmOrderDomainService.getInfo(id);
}
/**
* 生成作业任务
*/
@Transactional(rollbackFor = Exception.class)
public void createTaskOrder(CreateTaskOrderDO createTaskOrderDO) {
// ============== 供应链订单及任务上层数据 ===========
ScmOrderPO scmOrder = scmOrderDomainService.getInfo(createTaskOrderDO.getScmId());
TaskUpperDataPO upperData = new TaskUpperDataPO();
// =================== 校验+数据获取 ==================
if(ObjectUtil.isNull(scmOrder)){
throw new ServiceException("未获取到供应链订单信息!");
}
if(!ArrayUtil.contains(OrderConstant.SCM_STATUS_GROUP_CAN_GENERATE_TASK, scmOrder.getOrderState())) {
throw new ServiceException("当前供应链订单状态不可生成作业任务!");
}
// 获取任务上层数据:采购订单、销售订单等
getTaskUpperData(upperData, scmOrder);
// =================== 作业任务处理 ===================
ArrayList<TaskOrderDO> taskOrderList = new ArrayList<>();
createTaskOrderDO.getGoodsInfoList().forEach(
x -> handleTaskOrderFromCreateTaskOrder(taskOrderList, x, createTaskOrderDO, upperData)
);
// ================= 作业任务数据持久化 ================
taskOrderDomainService.batchInsert(taskOrderList);
// ================== 供应链订单状态修改 ==============
updateScmOrderFromCreateTaskOrder(createTaskOrderDO, upperData, taskOrderList.size());
}
/**
* 获取任务的上层数据,根据供应链订单的来源判断获取采购订单|销售订单
*/
private void getTaskUpperData(TaskUpperDataPO upperData, ScmOrderPO scmOrder) {
upperData.setScmOrder(scmOrder);
if(OrderConstant.SCM_SOURCE_1.equals(scmOrder.getScmSource())){
PurchaseOrderDetailsPO purchaseOrderDetails = purchaseOrderDomainService.getInfo(scmOrder.getOrderId());
if(ObjectUtil.isNull(purchaseOrderDetails) || ObjectUtil.isNull(purchaseOrderDetails.getPurchaseOrderPO())){
throw new ServiceException("未获取到采购订单信息!");
}
upperData.setPurOrderPo(purchaseOrderDetails.getPurchaseOrderPO());
}
else if(OrderConstant.SCM_SOURCE_2.equals(scmOrder.getScmSource())){
SalesOrderPO salesOrderPo = salesOrderDomainService.getInfo(scmOrder.getOrderId());
if(ObjectUtil.isNull(salesOrderPo)){
throw new ServiceException("未获取到采购订单信息!");
}
upperData.setSalesOrderPo(salesOrderPo);
}
else{
throw new ServiceException("错误的供应链订单来源!");
}
}
/**
* 生成作业任务 - 判断并更新上游供应链订单对应数据状态(部分生成作业任务|全部生成作业任务)
*
* @param createTaskOrderDO - 生成作业任务DO
* @param upperData - 采购订单数据
* @param taskNum - 本次生成的作业任务数量
*/
private void updateScmOrderFromCreateTaskOrder(CreateTaskOrderDO createTaskOrderDO, TaskUpperDataPO upperData, Integer taskNum) {
// =============== 数据初始化 =============
ScmOrderPO scmOrder = upperData.getScmOrder();
// 供应链订单全部完成生成标志
AtomicBoolean completeFlag = new AtomicBoolean(true);
// ========= 查询订单下货物列表 ============
GoodsDO goodsDO = new GoodsDO();
if(OrderConstant.SCM_SOURCE_1.equals(scmOrder.getScmSource())){
goodsDO.setOrderId(upperData.getPurOrderPo().getId());
}
else if(OrderConstant.SCM_SOURCE_2.equals(scmOrder.getScmSource())){
goodsDO.setOrderId(upperData.getSalesOrderPo().getId());
}
List<GoodsPO> goodsList = goodsDomainService.queryList(goodsDO);
// ============== 遍历货物列表,货物对应货物在任务重的数量,存在不相等的则说明供应链订单未全部生成 =================
goodsList.forEach(x -> {
BigDecimal totalEffectiveNum = taskOrderDomainService.queryEffectiveNumByScmId(createTaskOrderDO.getScmId(), x.getId());
if(BigDecimal.valueOf(x.getMaterialUnitEaQuantity()).compareTo(totalEffectiveNum) != 0){
completeFlag.set(false);
}
});
// ==================== 更新供应链订单数据 ======================
ScmOrderDO scmOrderDO = new ScmOrderDO();
BeanUtils.copyProperties(scmOrder, scmOrderDO, IgnoreNullUtil.getNullPropertyNames(scmOrder));
scmOrderDO.setOrderState(completeFlag.get() ? OrderConstant.SCM_STATUS_4 : OrderConstant.SCM_STATUS_3);
scmOrderDO.setTaskNum(scmOrderDO.getTaskNum() + taskNum);
scmOrderDO.setActiveTaskNum(scmOrderDO.getActiveTaskNum() + taskNum);
scmOrderDomainService.update(scmOrderDO);
}
/**
* 生成作业任务 - 根据已有数据处理为要生成的作业任务DO
* @param taskOrderList - 要执行批量新增任务
* @param x - 要生成的作业任务的商品信息
* @param createTaskOrderDO - 后端接收对象
* @param upperData - 上层数据集
*/
private void handleTaskOrderFromCreateTaskOrder(ArrayList<TaskOrderDO> taskOrderList, CreateTaskOrderGoodsInfoDTO x, CreateTaskOrderDO createTaskOrderDO, TaskUpperDataPO upperData) {
if(ObjectUtil.isNull(x.getId())){
throw new ServiceException("物料ID不能为空!");
}
TaskOrderDO taskOrderDO = new TaskOrderDO();
GoodsPO goodsInfo = goodsDomainService.getInfo(x.getId());
// 作业任务中有效物料数量
BigDecimal effectiveNum = taskOrderDomainService.queryEffectiveNumByScmId(createTaskOrderDO.getScmId(), x.getId());
// 剩余物料数量
BigDecimal surplusNum = BigDecimal.valueOf(goodsInfo.getMaterialUnitEaQuantity()).subtract(effectiveNum);
if(OrderConstant.SCM_SOURCE_1.equals(upperData.getScmOrder().getScmSource())){
if(!upperData.getPurOrderPo().getId().equals(goodsInfo.getOrderId())){
throw new ServiceException("采购订单中无ID为"+ goodsInfo.getId() + "的物料信息");
}
}
else if(OrderConstant.SCM_SOURCE_2.equals(upperData.getScmOrder().getScmSource())){
if(!upperData.getSalesOrderPo().getId().equals(goodsInfo.getOrderId())){
throw new ServiceException("销售订单中无ID为"+ goodsInfo.getId() + "的物料信息");
}
}
// 生成方式为部分生成,则计划作业数量必填,计划数量必须小于等于剩余数量(物料表数量-作业任务表已生效任务数量)
if(createTaskOrderDO.getCreateType() == 0){
if(ObjectUtil.isNull(x.getPlanNum())){
throw new ServiceException("物料计划任务数量不能为空!");
}
if(BigDecimal.ZERO.compareTo(x.getPlanNum()) >= 0){
throw new ServiceException("物料计划任务数量不能小于或等于0");
}
if(x.getPlanNum().compareTo(surplusNum) > 0){
throw new ServiceException("计划数量大于剩余待生成作业任务数量!");
}
taskOrderDO.setPlanNum(x.getPlanNum());
}
// 生成方式为全部生成,则将剩余数量全部作为计划数量
else if(createTaskOrderDO.getCreateType() == 1){
taskOrderDO.setPlanNum(surplusNum);
}
// 没有其他的生成方式了
else{
throw new ServiceException("错误的生成作业方式");
}
BeanUtils.copyProperties(createTaskOrderDO, taskOrderDO, IgnoreNullUtil.getNullPropertyNames(createTaskOrderDO));
taskOrderDO.setGoodsId(x.getId());
taskOrderDO.setScmId(createTaskOrderDO.getScmId());
taskOrderDO.setScmSource(upperData.getScmOrder().getScmSource());
// TODO:暂未获取仓库数据 createTaskOrderDO.getWarehouseId()
String warehouseName = "临沂仓库";
taskOrderDO.setWarehouseName(warehouseName);
if(OrderConstant.SCM_SOURCE_1.equals(upperData.getScmOrder().getScmSource())){
taskOrderDO.setOrderId(upperData.getPurOrderPo().getId());
taskOrderDO.setTaskTypeId(upperData.getPurOrderPo().getJobTaskTypeId());
taskOrderDO.setTaskTypeName(upperData.getPurOrderPo().getJobTaskType());
}
else if(OrderConstant.SCM_SOURCE_2.equals(upperData.getScmOrder().getScmSource())){
taskOrderDO.setOrderId(upperData.getSalesOrderPo().getId());
taskOrderDO.setTaskTypeId(upperData.getSalesOrderPo().getJobTaskTypeId());
taskOrderDO.setTaskTypeName(upperData.getSalesOrderPo().getJobTaskType());
}
taskOrderList.add(taskOrderDO);
}
/**
* 订单审核【批量】
* @param idList - 供应链订单ID列表
*/
public Boolean batchAudit(List<String> idList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if(ObjectUtils.isNull(loginUser)){
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
// =============== 订单审核 =================
return scmOrderDomainService.batchAuditOrCancelAudit(1, idList);
}
/**
* 订单取消审核【批量】
* @param idList - 供应链订单ID列表
*/
public Boolean batchCancelAudit(List<String> idList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if(ObjectUtils.isNull(loginUser)){
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
// =============== 订单取消审核 =================
return scmOrderDomainService.batchAuditOrCancelAudit(2, idList);
}
/**
* 一键生成作业任务【批量】
* @param idList - 要生成作业任务的供应链订单ID列表
*/
@Transactional(rollbackFor = Exception.class)
public void batchCreateTaskOrder(List<Long> idList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if(ObjectUtils.isNull(loginUser)){
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
// 供应链订单对应的所有物料的信息列表 <供应链订单,List<全部物料列表(总物料数量、作业任务中已生成物料数量)>>
Map<Long, List<ScmOrderPO>> scmGoodsMap = scmOrderDomainService.getGoodsAndTaskInfoList(idList);
// 更新供应链订单状态为全部生成;应生成的作业任务列表数据处理;供应链订单任务数量、有效数量增加生成的作业任务数量
List<TaskOrderDO> taskOrderList = scmOrderDomainService.handlerbatchCreateTaskOrder(scmGoodsMap);
// 保存作业任务
taskOrderDomainService.batchInsert(taskOrderList);
}
}
@@ -0,0 +1,74 @@
package com.mhd.oms.application.service.settlement;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.settlement.repository.po.SettlementPO;
import com.mhd.oms.domain.settlement.repository.todo.SettlementDO;
import com.mhd.oms.domain.settlement.service.SettlementDomainService;
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.List;
/**
* 结算信息ApplicationService
*
* @author gen
* @date 2024-05-16
*/
@Service
@Slf4j
public class SettlementApplicationService {
@Autowired
private SettlementDomainService settlementDomainService;
/**
* 分页查询结算信息列表
*/
public List<SettlementPO> queryList(SettlementDO settlementDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
settlementDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
return settlementDomainService.queryList(settlementDO);
}
/**
* 新增结算信息
*/
public Boolean insert(SettlementDO settlementDO) {
return settlementDomainService.insert(settlementDO);
}
/**
* 修改结算信息
*/
public Boolean update(SettlementDO settlementDO) {
return settlementDomainService.update(settlementDO);
}
/**
* 批量删除结算信息
*/
public boolean delete(Long[] ids) {
return settlementDomainService.delete(ids);
}
/**
* 获取结算信息详细信息
*/
public SettlementPO getInfo(Long id)
{
return settlementDomainService.getInfo(id);
}
}
@@ -0,0 +1,315 @@
package com.mhd.oms.application.service.taskOrder;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
import com.mhd.common.core.exception.digitalLogisticsException.UserError;
import com.mhd.common.core.utils.OrderSequence;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.constant.OrderConstant;
import com.mhd.oms.domain.OrderInfoPO;
import com.mhd.oms.domain.goods.repository.po.GoodsPO;
import com.mhd.oms.domain.goods.service.GoodsDomainService;
import com.mhd.oms.domain.purchaseOrder.repository.po.PurchaseOrderDetailsPO;
import com.mhd.oms.domain.purchaseOrder.service.PurchaseOrderDomainService;
import com.mhd.oms.domain.scmOrder.repository.po.ScmOrderPO;
import com.mhd.oms.domain.scmOrder.service.ScmOrderDomainService;
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.oms.domain.taskOrder.service.TaskOrderDomainService;
import com.mhd.oms.interfaces.dto.taskOrder.PoMergeTaskDTO;
import com.mhd.oms.util.SetGroupUtil;
import com.mhd.system.api.WmsServiceFeign;
import com.mhd.system.api.domain.NoticeMaterialDetailDTO;
import com.mhd.system.api.domain.NoticeOrderDTO;
import com.mhd.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 作业任务ApplicationService
*
* @author gen
* @date 2024-05-24
*/
@Service
@Slf4j
public class TaskOrderApplicationService {
@Resource
private TaskOrderDomainService taskOrderDomainService;
@Resource
private PurchaseOrderDomainService purchaseOrderDomainService;
@Resource
private ScmOrderDomainService scmOrderDomainService;
@Resource
private WmsServiceFeign wmsServiceFeign;
@Resource
private GoodsDomainService goodsDomainService;
/**
* 分页查询作业任务列表
*/
public List<TaskOrderPO> queryList(TaskOrderDO taskOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
taskOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
}
}
return taskOrderDomainService.queryList(taskOrderDO);
}
/**
* 新增作业任务
*/
public Boolean insert(TaskOrderDO taskOrderDO) {
return taskOrderDomainService.insert(taskOrderDO);
}
/**
* 修改作业任务
*/
public Boolean update(TaskOrderDO taskOrderDO) {
return taskOrderDomainService.update(taskOrderDO);
}
/**
* 批量删除作业任务
*/
public boolean delete(Long[] ids) {
return taskOrderDomainService.delete(ids);
}
/**
* 获取作业任务详细信息
*/
public TaskOrderPO getInfo(Long id)
{
return taskOrderDomainService.getInfo(id);
}
public Boolean deliverTask(List<Long> ids) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ids.isEmpty()) {
throw new ServiceException("传递的ID值缺失或为空");
}
//根据ids集合查询所有的任务信息包括已合并的任务信息
List<TaskOrderPO> taskOrderPOS = taskOrderDomainService.getInfoByIds(ids);
//只有未下发的任务才可以下发
List<TaskOrderPO> stateCollect = taskOrderPOS.stream().filter(taskOrderPO -> taskOrderPO.getTaskStatus() != 0).collect(Collectors.toList());
if (!stateCollect.isEmpty()) {
throw new ServiceException("尚未下发的任务方可进行下发操作");
}
List<TaskOrderDO> taskOrderDOS = new ArrayList<>();
for (TaskOrderPO taskOrderPO : taskOrderPOS) {
TaskOrderDO taskOrderDO = new TaskOrderDO();
BeanUtils.copyProperties(taskOrderPO, taskOrderDO);
//组装信息
NoticeOrderDTO noticeOrderDTO = createStockOutOrInInfo(taskOrderDO);
// 推送给WMS
AjaxResult ajaxResult = wmsServiceFeign.stockOutOrInInsert(noticeOrderDTO);
//TMS/WMS返回成功后,修改任务状态,改为已下发
if ("200".equals(String.valueOf(ajaxResult.get("code")))) {
taskOrderDO.setTaskStatus(1);
taskOrderDO.setUpdateTime(new Date());
if (loginUser != null){
taskOrderDO.setUpdateBy(loginUser.getUserid());
taskOrderDO.setUpdateByName(loginUser.getUsername());
}
taskOrderDOS.add(taskOrderDO);
}else {
throw new ServiceException(ajaxResult.get("msg").toString());
}
}
return taskOrderDomainService.batchUpdate(taskOrderDOS);
}
private NoticeOrderDTO createStockOutOrInInfo(TaskOrderDO taskOrderDO) {
NoticeOrderDTO noticeOrderDTO = new NoticeOrderDTO();
OrderInfoPO orderInfoPO = taskOrderDomainService.getOrderInfo(taskOrderDO);
//查询供应链订单
ScmOrderPO scmOrderPO = scmOrderDomainService.getInfo(taskOrderDO.getScmId());
noticeOrderDTO.setCustomerOrderNumber(orderInfoPO.getCustomerOrders());
noticeOrderDTO.setType(taskOrderDO.getTaskTypeId());
noticeOrderDTO.setWarehouseId(taskOrderDO.getWarehouseId());
noticeOrderDTO.setShipperId(orderInfoPO.getShipperId());
noticeOrderDTO.setOrderTypeCode(orderInfoPO.getOrderTypeCode());
noticeOrderDTO.setSupplierId(orderInfoPO.getSupplierId());
noticeOrderDTO.setCustomerId(orderInfoPO.getCustomerId());
noticeOrderDTO.setExpectTime(new Date());
noticeOrderDTO.setSupplyChainNumber(scmOrderPO.getScmNo());
noticeOrderDTO.setNullify(2);
noticeOrderDTO.setRemark("");
//物料信息赋值
GoodsPO info = goodsDomainService.getInfo(taskOrderDO.getGoodsId());
NoticeMaterialDetailDTO noticeMaterialDetailDTO = new NoticeMaterialDetailDTO();
noticeMaterialDetailDTO.setMaterialBaseInfoId(info.getMaterialBaseInfoId());
noticeMaterialDetailDTO.setQuantity(taskOrderDO.getPlanNum());
List<NoticeMaterialDetailDTO> noticeMaterialDetailDOS = new ArrayList<NoticeMaterialDetailDTO>() {{
add(noticeMaterialDetailDTO);
}};
return noticeOrderDTO;
}
public Boolean finishTask(List<Long> ids) {
//List<Long> ids = Convert.toList(Long.class, deliverTaskDTO.getIds());
List<TaskOrderDO> taskOrderDOS = new ArrayList<>();
for (Long id : ids) {
//查询作业任务信息
TaskOrderPO taskOrderPO = taskOrderDomainService.getInfo(id);
if (ObjectUtil.isNull(taskOrderPO)) {
throw new ServiceException("未查询到作业任务信息");
}
TaskOrderDO taskOrderDO = new TaskOrderDO();
BeanUtils.copyProperties(taskOrderPO, taskOrderDO);
//查询采购订单的信息
PurchaseOrderDetailsPO purchaseOrderDetailsPO = purchaseOrderDomainService.getInfo(taskOrderPO.getOrderId());
// TODO 判断一下所有任务是否都已经完成并且供应链订单已全部生成任务
log.info("组装信息");
//TMS/WMS返回成功后,修改任务状态,改为已下发
taskOrderDO.setTaskStatus(2);
taskOrderDOS.add(taskOrderDO);
}
return taskOrderDomainService.batchUpdate(taskOrderDOS);
}
/**
* 合并任务前置工作,点击合并任务弹出合并后的列表
* @param ids
* @return
*/
public List<PoTaskDetailPO> poPreMergeTask(List<Long> ids) {
//List<Long> ids = Convert.toList(Long.class, deliverTaskDTO.getIds());
if (ids.isEmpty()) {
throw new ServiceException("传递的ID值缺失或为空");
}
//查询是否包含下发/已合并的任务,如果有则无法合并任务
Integer quantityDeliver = taskOrderDomainService.getQuantityDeliver(ids);
if (quantityDeliver > 0) {
throw new ServiceException("数据内包含下发完毕/已合并的任务");
}
//查询作业任务信息
List<PoTaskDetailPO> poTaskDetailPOs = taskOrderDomainService.getPoTaskDetail(ids);
// TODO 查询任务合并规则表,取用户设置的默认规则合并任务
// 目前规则写死,先按照同一货主、同一仓库进行任务合并
Map<String, List<PoTaskDetailPO>> groupMap = SetGroupUtil.groupingBy(poTaskDetailPOs, PoTaskDetailPO::getWarehouseId,
PoTaskDetailPO::getShipperId);
List<PoTaskDetailPO> poTaskDetailPOList = new ArrayList<>();
// Map 处理
groupMap.forEach((k, v) -> {
PoTaskDetailPO poTaskDetailPO = new PoTaskDetailPO();
if (!v.isEmpty()) {
poTaskDetailPO = v.get(0);
poTaskDetailPO.setTaskNum(v.size());
String mergeTaskNo = v.stream().map(PoTaskDetailPO::getTaskNo).collect(Collectors.joining(","));
poTaskDetailPO.setMergeTaskNo(mergeTaskNo);
poTaskDetailPOList.add(poTaskDetailPO);
}
});
return poTaskDetailPOList;
}
/**
* 合并任务
* @param poMergeTaskDTOS
* @return
*/
public Boolean poMergeTask(List<PoMergeTaskDTO> poMergeTaskDTOS) {
List<TaskOrderDO> taskOrderDOS = new ArrayList<>();
for (int i = 0; i < poMergeTaskDTOS.size(); i++) {
List<String> taskNos = Convert.toList(String.class, poMergeTaskDTOS.get(i).getMergeTaskNo());
//生成合并任务单号
String mergeTaskNo = OrderSequence.getOrderCode(OrderConstant.TASK_NO_PREFIX) + "-" + (i + 1);
//根据任务单号查询任务信息
for (String taskNo : taskNos) {
TaskOrderDO taskOrderDO = new TaskOrderDO();
TaskOrderPO taskOrderPO = taskOrderDomainService.getInfoByTaskNo(taskNo);
BeanUtils.copyProperties(taskOrderPO, taskOrderDO);
taskOrderDO.setMergeTaskNo(mergeTaskNo);
taskOrderDO.setMergeState(1);
taskOrderDOS.add(taskOrderDO);
}
}
return taskOrderDomainService.batchUpdate(taskOrderDOS);
}
/**
* 取消作业任务
* @param idList - 要取消的作业任务ID列表
*/
@Transactional(rollbackFor = ExcelAnalysisException.class)
public void cancelTaskOrder(List<Long> idList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if(ObjectUtils.isNull(loginUser)){
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
if(idList.size() == 0){
throw new ServiceException("供应链订单ID列表不能为空");
}
// 取消任务
List<TaskOrderPO> ableCancelledScmIdList = taskOrderDomainService.cancelTaskOrder(idList);
// 更新供应链订单任务数量、状态
scmOrderDomainService.updateFromCancelTask(ableCancelledScmIdList);
}
/**
* 还原合并任务
* @param ids
* @return
*/
public Boolean restoreMergeTask(List<Long> ids) {
//根据集合查询所有任务信息
List<TaskOrderPO> taskOrderPOS = taskOrderDomainService.getInfos(ids);
//只能未下发且有合并作业任务的,允许还原
List<TaskOrderPO> stateCollect = taskOrderPOS.stream().filter(taskOrderPO ->
taskOrderPO.getTaskStatus() != 0 || taskOrderPO.getMergeState() == 0).collect(Collectors.toList());
if (!stateCollect.isEmpty()) {
throw new ServiceException("仅允许将处于未下发且已合并状态的任务进行还原");
}
//处理数据,批量今行数据修改
List<TaskOrderDO> taskOrderDOS = taskOrderPOS.stream().map(taskOrderPO -> {
TaskOrderDO taskOrderDO = new TaskOrderDO();
BeanUtils.copyProperties(taskOrderPO, taskOrderDO);
taskOrderDO.setMergeTaskNo("");
taskOrderDO.setMergeState(0);
return taskOrderDO;
}).collect(Collectors.toList());
return taskOrderDomainService.batchUpdate(taskOrderDOS);
}
}
@@ -0,0 +1,129 @@
package com.mhd.oms.constant;
/**
* 作业任务常量
* @author Administrator
*/
public interface OrderConstant {
/** 作业任务单号前缀 */
String TASK_NO_PREFIX = "PO";
/** 供应链单号前缀 */
String SCM_NO_PREFIX = "SCM";
/** ========================== 采购订单状态 ========================== */
/** 未审核 */
Integer PUR_STATUS_1 = 1;
/** 已审核 */
Integer PUR_STATUS_2 = 2;
/** 已拒绝 */
Integer PUR_STATUS_3 = 3;
/** 已生成 */
Integer PUR_STATUS_4 = 4;
/** 部分采购 */
Integer PUR_STATUS_5 = 5;
/** 完成 */
Integer PUR_STATUS_6 = 6;
/** 已取消 */
Integer PUR_STATUS_7 = 7;
/** 已拦截 */
Integer PUR_STATUS_8 = 8;
/** ========================== 采购订单状态组 ========================== */
/** 无需拦截的状态 */
Integer[] PUR_STATUS_GROUP_UNABLE_INTERCEPT = {PUR_STATUS_6, PUR_STATUS_7, PUR_STATUS_8};
/** 不能被取消审核的状态 */
Integer[] PUR_STATUS_GROUP_UNABLE_CANCEL_AUDIT = {PUR_STATUS_1, PUR_STATUS_4, PUR_STATUS_5,PUR_STATUS_6,PUR_STATUS_7,PUR_STATUS_8};
/** ========================== 销售订单状态 ========================== */
/** 未审核 */
Integer SO_STATUS_1 = 1;
/** 已审核 */
Integer SO_STATUS_2 = 2;
/** 已拒绝 */
Integer SO_STATUS_3 = 3;
/** 已生成 */
Integer SO_STATUS_4 = 4;
/** 部分销售 */
Integer SO_STATUS_5 = 5;
/** 完成 */
Integer SO_STATUS_6 = 6;
/** 已取消 */
Integer SO_STATUS_7 = 7;
/** 已拦截 */
Integer SO_STATUS_8 = 8;
/** ========================== 销售订单状态组 ========================== */
/** 无需拦截的状态 */
Integer[] SO_STATUS_GROUP_UNABLE_INTERCEPT = {PUR_STATUS_6, PUR_STATUS_7, PUR_STATUS_8};
/** 不能被取消审核的状态 */
Integer[] SO_STATUS_GROUP_UNABLE_CANCEL_AUDIT = {PUR_STATUS_1, PUR_STATUS_4, PUR_STATUS_5,PUR_STATUS_6,PUR_STATUS_7,PUR_STATUS_8};
/** ========================== 供应链订单状态 ========================== */
/** 未审核 */
Integer SCM_STATUS_1 = 1;
/** 已审核 */
Integer SCM_STATUS_2 = 2;
/** 部分生成 */
Integer SCM_STATUS_3 = 3;
/** 全部生成 */
Integer SCM_STATUS_4 = 4;
/** 部分完成 */
Integer SCM_STATUS_5 = 5;
/** 已完成 */
Integer SCM_STATUS_6 = 6;
/** 已取消 */
Integer SCM_STATUS_7 = 7;
/** 已拦截 */
Integer SCM_STATUS_8 = 8;
/** ========================== 供应链订单状态组 ========================== */
/** 可生成作业任务的状态 */
Integer[] SCM_STATUS_GROUP_CAN_GENERATE_TASK = {SCM_STATUS_2, SCM_STATUS_3};
/** ========================== 供应链订单来源 ========================== */
/** 采购订单 */
Integer SCM_SOURCE_1 = 1;
/** 销售订单 */
Integer SCM_SOURCE_2 = 2;
/** 运输订单 */
Integer SCM_SOURCE_3 = 3;
/** ========================== 作业任务状态 ========================== */
/** 未下发 */
Integer TASK_STATUS_0 = 0;
/** 已下发 */
Integer TASK_STATUS_1 = 1;
/** 已完成 */
Integer TASK_STATUS_2 = 2;
/** 已拦截 */
Integer TASK_STATUS_3 = 3;
/** 已取消 */
Integer TASK_STATUS_4 = 4;
/** ========================== 作业任务状态组 ========================== */
/** 不可拦截状态组 */
Integer[] TASK_STATUS_GROUP_UNABLE_INTERCEPT = {TASK_STATUS_1, TASK_STATUS_2};
/** ========================== 作业任务类型 ========================== */
/** 入库 */
Integer TASK_TYPE_0 = 0;
/** 出库 */
Integer TASK_TYPE_1 = 1;
/** 运输 */
Integer TASK_TYPE_2 = 2;
/** ========================== 拦截订单状态 ========================== */
/** 无拦截 */
Integer INTERCEPT_STATUS_0 = 0;
/** 拦截成功 */
Integer INTERCEPT_STATUS_1 = 1;
/** 拦截失败 */
Integer INTERCEPT_STATUS_2 = 2;
}
@@ -0,0 +1,30 @@
package com.mhd.oms.constant;
/**
* OMS枚举
*
* @author
*/
public enum OrderEnum {
// ๑乛◡乛๑卡在了奇怪的地方
TEST_1("1", "1");
private final String code;
private final String info;
OrderEnum(String code, String info)
{
this.code = code;
this.info = info;
}
public String getCode()
{
return code;
}
public String getInfo()
{
return info;
}
}
@@ -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;
}

Some files were not shown because too many files have changed in this diff Show More