diff --git a/mhd_oms/Dockerfile b/mhd_oms/Dockerfile
new file mode 100644
index 000000000..7a606f502
--- /dev/null
+++ b/mhd_oms/Dockerfile
@@ -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"]
diff --git a/mhd_oms/pom.xml b/mhd_oms/pom.xml
new file mode 100644
index 000000000..10fd57f01
--- /dev/null
+++ b/mhd_oms/pom.xml
@@ -0,0 +1,169 @@
+
+
+ 4.0.0
+
+ com.mhd
+ mhd
+ 3.6.0
+
+
+ mhd_oms
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+ io.github.openfeign
+ feign-httpclient
+
+
+ org.springframework.cloud
+ spring-cloud-loadbalancer
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+ com.alibaba.csp
+ sentinel-datasource-nacos
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+
+ com.alibaba.fastjson2
+ fastjson2
+
+
+
+ com.mhd
+ mhd-common-core
+
+
+
+ com.mhd
+ mhd-common-redis
+
+
+ com.dameng
+ DmJdbcDriver18
+ 8.1.1.193
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ 1.2.11
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+ provided
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-sleuth
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-zipkin
+ 2.2.8.RELEASE
+
+
+
+
+ com.mhd
+ mhd-common-security
+
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ 3.3.1
+
+
+
+ com.mhd
+ mhd_common_db
+ 3.6.0
+
+
+
+ com.mhd
+ mhd-common-log
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.1.1.RELEASE
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+ mhd_oms
+
+
+
+ com.spotify
+ dockerfile-maven-plugin
+
+
+
+
+
+
diff --git a/mhd_oms/src/main/java/com/mhd/oms/OMSApplication.java b/mhd_oms/src/main/java/com/mhd/oms/OMSApplication.java
new file mode 100644
index 000000000..deacebdd7
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/OMSApplication.java
@@ -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);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/deliveryInfo/DeliveryInfoApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/deliveryInfo/DeliveryInfoApplicationService.java
new file mode 100644
index 000000000..268aa3206
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/deliveryInfo/DeliveryInfoApplicationService.java
@@ -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 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);
+ }
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/goods/GoodsApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/goods/GoodsApplicationService.java
new file mode 100644
index 000000000..d62df3d62
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/goods/GoodsApplicationService.java
@@ -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 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);
+ }
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/interceptOrder/InterceptOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/interceptOrder/InterceptOrderApplicationService.java
new file mode 100644
index 000000000..c880644eb
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/interceptOrder/InterceptOrderApplicationService.java
@@ -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 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);
+ }
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/logistics/LogisticsApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/logistics/LogisticsApplicationService.java
new file mode 100644
index 000000000..644b8d6c3
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/logistics/LogisticsApplicationService.java
@@ -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 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);
+ }
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/orderType/OrderTypeApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/orderType/OrderTypeApplicationService.java
new file mode 100644
index 000000000..bbf5e8846
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/orderType/OrderTypeApplicationService.java
@@ -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 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 listDict() {
+ return orderTypeDomainService.listDict();
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/purchaseOrder/PurchaseOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/purchaseOrder/PurchaseOrderApplicationService.java
new file mode 100644
index 000000000..173dd9d74
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/purchaseOrder/PurchaseOrderApplicationService.java
@@ -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 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 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 settlementDictList = JSONUtil.toList(JSONUtil.toJsonStr(settlementDict.get("data")), SysDictDataVo.class);
+ Map 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 payStateDictList = JSONUtil.toList(JSONUtil.toJsonStr(payStateDict.get("data")), SysDictDataVo.class);
+ Map 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 transportTypeDictList = JSONUtil.toList(JSONUtil.toJsonStr(transportTypeDict.get("data")), SysDictDataVo.class);
+ Map 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 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 settlementDictList = JSONUtil.toList(JSONUtil.toJsonStr(settlementDict.get("data")), SysDictDataVo.class);
+ Map 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 payStateDictList = JSONUtil.toList(JSONUtil.toJsonStr(payStateDict.get("data")), SysDictDataVo.class);
+ Map 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 transportTypeDictList = JSONUtil.toList(JSONUtil.toJsonStr(transportTypeDict.get("data")), SysDictDataVo.class);
+ Map 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 purchaseOrderExcelDtoList) {
+ // TODO:缺少对ID字段的相关处理
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNull(loginUser)) {
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
+ if (CollUtil.isEmpty(purchaseOrderExcelDtoList)) {
+ throw new ServiceException("导入信息为空");
+ }
+ List settlementDOList = new ArrayList<>();
+ List deliveryInfoDOList = new ArrayList<>();
+ List receiptInfoDOList = new ArrayList<>();
+ List logisticsDOList = new ArrayList<>();
+ List 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 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>,
+ * 遍历分组,处理每组对应的采购订单及任务列表
+ * 不管拦截成功或失败,都会新增一条记录到拦截表中,拦截成功后会同步修改下游数据表中的状态
+ *
+ * @param idList
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void interceptOrder(List idList) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNull(loginUser)) {
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
+
+ // 查询采购订单列表下所有的任务组 <订单m,List>,
+ Map> 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 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 purchaseOrderPOS = purchaseOrderDomainService.getInfo(ids);
+ //1、1 采购订单只有在已审核状态下才可以生成供应链订单
+ List stateCount = purchaseOrderPOS.stream().filter(e -> e.getOrderState() != 2).collect(Collectors.toList());
+ if (!stateCount.isEmpty()) {
+ throw new ServiceException("已审核状态下才可以生成供应链订单");
+ }
+ //1.2 更新采购订单的状态
+ List 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 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 ids) {
+
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+
+
+ //查询所有的采购订单信息
+ List purchaseOrderPOS = purchaseOrderDomainService.getInfo(ids);
+ //判断一下是否生成供应链订单,未生成则不需要取消
+ List purchaseCollect = purchaseOrderPOS.stream().filter(purchaseOrderPO -> purchaseOrderPO.getOrderState() < 4)
+ .collect(Collectors.toList());
+ if (!purchaseCollect.isEmpty()) {
+ throw new ServiceException("供应链订单尚未生成,无需进行取消");
+ }
+
+ //根据采购订单查询作业任务
+ List taskOrderPOS = taskOrderDomainService.getInfosByOrderId(ids);
+ //过滤作业任务(如果作业任务包含未下发/已下发/已完成 的,则不允许取消作业任务)
+ List 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 scmOrderPOS = scmOrderDomainService.getInfosByOrderId(ids);
+ //修改供应链订单状态,修改未已取消状态
+ List 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 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;
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/receiptInfo/ReceiptInfoApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/receiptInfo/ReceiptInfoApplicationService.java
new file mode 100644
index 000000000..d1b2b318e
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/receiptInfo/ReceiptInfoApplicationService.java
@@ -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 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);
+ }
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/salesOrder/SalesOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/salesOrder/SalesOrderApplicationService.java
new file mode 100644
index 000000000..2734adf29
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/salesOrder/SalesOrderApplicationService.java
@@ -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 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 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 settlementDictList = JSONUtil.toList(JSONUtil.toJsonStr(settlementDict.get("data")), SysDictDataVo.class);
+ Map 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 payStateDictList = JSONUtil.toList(JSONUtil.toJsonStr(payStateDict.get("data")), SysDictDataVo.class);
+ Map 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 transportTypeDictList = JSONUtil.toList(JSONUtil.toJsonStr(transportTypeDict.get("data")), SysDictDataVo.class);
+ Map 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 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 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 settlementDictList = JSONUtil.toList(JSONUtil.toJsonStr(settlementDict.get("data")), SysDictDataVo.class);
+ Map 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 payStateDictList = JSONUtil.toList(JSONUtil.toJsonStr(payStateDict.get("data")), SysDictDataVo.class);
+ Map 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 transportTypeDictList = JSONUtil.toList(JSONUtil.toJsonStr(transportTypeDict.get("data")), SysDictDataVo.class);
+ Map 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 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 salesOrderPOS = salesOrderDomainService.getInfos(ids);
+ if (salesOrderPOS.isEmpty()) {
+ throw new ServiceException("未查询到匹配的销售订单信息");
+ }
+ //2、销售订单只有在已审核状态下才可以生成供应链订单
+ List stateCount = salesOrderPOS.stream().filter(e -> e.getOrderState() != 2).collect(Collectors.toList());
+ if (!stateCount.isEmpty()) {
+ throw new ServiceException("已审核状态下才可以生成供应链订单");
+ }
+ //3、更新销售订单的状态
+ List 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 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 ids) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ //查询所有的销售订单信息
+ List salesOrderPOS = salesOrderDomainService.getInfos(ids);
+ //判断一下是否生成供应链订单,未生成则不需要取消
+ List salesCollect = salesOrderPOS.stream().filter(salesOrderPO -> salesOrderPO.getOrderState() < 4)
+ .collect(Collectors.toList());
+ if (!salesCollect.isEmpty()) {
+ throw new ServiceException("供应链订单尚未生成,无需进行取消");
+ }
+
+ //根据采购订单查询作业任务
+ List taskOrderPOS = taskOrderDomainService.getInfosByOrderId(ids);
+ //过滤作业任务(如果作业任务包含未下发/已下发/已完成 的,则不允许取消作业任务)
+ List 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 scmOrderPOS = scmOrderDomainService.getInfosByOrderId(ids);
+ //修改供应链订单状态,修改未已取消状态
+ List 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 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 idList) {
+
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNull(loginUser)) {
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
+
+ // 查询销售订单列表下所有的任务组
+ Map> 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 salesExcelList) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNull(loginUser)) {
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
+ if (CollUtil.isEmpty(salesExcelList)) {
+ throw new ServiceException("导入信息为空");
+ }
+
+ List settlementDOList = new ArrayList<>();
+ List deliveryInfoDOList = new ArrayList<>();
+ List receiptInfoDOList = new ArrayList<>();
+ List logisticsDOList = new ArrayList<>();
+ List 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);
+ }
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/scmOrder/ScmOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/scmOrder/ScmOrderApplicationService.java
new file mode 100644
index 000000000..dfbb6bae5
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/scmOrder/ScmOrderApplicationService.java
@@ -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 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 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 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 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 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 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 idList) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if(ObjectUtils.isNull(loginUser)){
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
+
+ // 供应链订单对应的所有物料的信息列表 <供应链订单,List<全部物料列表(总物料数量、作业任务中已生成物料数量)>>
+ Map> scmGoodsMap = scmOrderDomainService.getGoodsAndTaskInfoList(idList);
+
+ // 更新供应链订单状态为全部生成;应生成的作业任务列表数据处理;供应链订单任务数量、有效数量增加生成的作业任务数量
+ List taskOrderList = scmOrderDomainService.handlerbatchCreateTaskOrder(scmGoodsMap);
+
+ // 保存作业任务
+ taskOrderDomainService.batchInsert(taskOrderList);
+
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/settlement/SettlementApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/settlement/SettlementApplicationService.java
new file mode 100644
index 000000000..df2c858a3
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/settlement/SettlementApplicationService.java
@@ -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 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);
+ }
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/taskOrder/TaskOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/taskOrder/TaskOrderApplicationService.java
new file mode 100644
index 000000000..a73457f6b
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/taskOrder/TaskOrderApplicationService.java
@@ -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 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 ids) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ids.isEmpty()) {
+ throw new ServiceException("传递的ID值缺失或为空");
+ }
+ //根据ids集合查询所有的任务信息包括已合并的任务信息
+ List taskOrderPOS = taskOrderDomainService.getInfoByIds(ids);
+ //只有未下发的任务才可以下发
+ List stateCollect = taskOrderPOS.stream().filter(taskOrderPO -> taskOrderPO.getTaskStatus() != 0).collect(Collectors.toList());
+ if (!stateCollect.isEmpty()) {
+ throw new ServiceException("尚未下发的任务方可进行下发操作");
+ }
+
+ List 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 noticeMaterialDetailDOS = new ArrayList() {{
+ add(noticeMaterialDetailDTO);
+ }};
+
+ return noticeOrderDTO;
+ }
+
+ public Boolean finishTask(List ids) {
+ //List ids = Convert.toList(Long.class, deliverTaskDTO.getIds());
+ List 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 poPreMergeTask(List ids) {
+ //List 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 poTaskDetailPOs = taskOrderDomainService.getPoTaskDetail(ids);
+ // TODO 查询任务合并规则表,取用户设置的默认规则合并任务
+ // 目前规则写死,先按照同一货主、同一仓库进行任务合并
+ Map> groupMap = SetGroupUtil.groupingBy(poTaskDetailPOs, PoTaskDetailPO::getWarehouseId,
+ PoTaskDetailPO::getShipperId);
+ List 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 poMergeTaskDTOS) {
+
+ List taskOrderDOS = new ArrayList<>();
+ for (int i = 0; i < poMergeTaskDTOS.size(); i++) {
+
+
+ List 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 idList) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if(ObjectUtils.isNull(loginUser)){
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
+ if(idList.size() == 0){
+ throw new ServiceException("供应链订单ID列表不能为空");
+ }
+
+ // 取消任务
+ List ableCancelledScmIdList = taskOrderDomainService.cancelTaskOrder(idList);
+
+ // 更新供应链订单任务数量、状态
+ scmOrderDomainService.updateFromCancelTask(ableCancelledScmIdList);
+
+ }
+
+ /**
+ * 还原合并任务
+ * @param ids
+ * @return
+ */
+ public Boolean restoreMergeTask(List ids) {
+ //根据集合查询所有任务信息
+ List taskOrderPOS = taskOrderDomainService.getInfos(ids);
+ //只能未下发且有合并作业任务的,允许还原
+ List stateCollect = taskOrderPOS.stream().filter(taskOrderPO ->
+ taskOrderPO.getTaskStatus() != 0 || taskOrderPO.getMergeState() == 0).collect(Collectors.toList());
+ if (!stateCollect.isEmpty()) {
+ throw new ServiceException("仅允许将处于未下发且已合并状态的任务进行还原");
+ }
+ //处理数据,批量今行数据修改
+ List 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);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/constant/OrderConstant.java b/mhd_oms/src/main/java/com/mhd/oms/constant/OrderConstant.java
new file mode 100644
index 000000000..631d6090b
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/constant/OrderConstant.java
@@ -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;
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/constant/OrderEnum.java b/mhd_oms/src/main/java/com/mhd/oms/constant/OrderEnum.java
new file mode 100644
index 000000000..23d3210b0
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/constant/OrderEnum.java
@@ -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;
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/OrderInfoPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/OrderInfoPO.java
new file mode 100644
index 000000000..56ec07b76
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/OrderInfoPO.java
@@ -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;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/entity/DeliveryInfo.java b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/entity/DeliveryInfo.java
new file mode 100644
index 000000000..1aa1c3147
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/entity/DeliveryInfo.java
@@ -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;
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/facade/IDeliveryInfoService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/facade/IDeliveryInfoService.java
new file mode 100644
index 000000000..feb05319a
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/facade/IDeliveryInfoService.java
@@ -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
+{
+ /**
+ * 分页查询发货信息列表
+ */
+ public List 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 deliveryInfoDOList);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/mapper/DeliveryInfoMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/mapper/DeliveryInfoMapper.java
new file mode 100644
index 000000000..7c6905bce
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/mapper/DeliveryInfoMapper.java
@@ -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
+{
+ /**
+ * 查询发货信息列表
+ */
+ public List queryList(DeliveryInfoDO deliveryInfoDO);
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/persistence/DeliveryInfoImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/persistence/DeliveryInfoImpl.java
new file mode 100644
index 000000000..342949bd3
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/persistence/DeliveryInfoImpl.java
@@ -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 implements IDeliveryInfoService {
+ @Autowired
+ private DeliveryInfoMapper deliveryInfoMapper;
+
+ /**
+ * 查询发货信息列表
+ */
+ @Override
+ public List 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 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 deliveryInfoDOList) {
+ List deliveryInfoList = deliveryInfoDOList.stream().map(deliveryInfoDO -> {
+ DeliveryInfo deliveryInfo = new DeliveryInfo();
+ BeanUtils.copyProperties(deliveryInfoDO, deliveryInfo);
+ return deliveryInfo;
+ }).collect(Collectors.toList());
+
+ return this.saveBatch(deliveryInfoList);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/po/DeliveryInfoPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/po/DeliveryInfoPO.java
new file mode 100644
index 000000000..f9ad87e04
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/po/DeliveryInfoPO.java
@@ -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;
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/todo/DeliveryInfoDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/todo/DeliveryInfoDO.java
new file mode 100644
index 000000000..dc3b198ec
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/repository/todo/DeliveryInfoDO.java
@@ -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 organizationIdList;
+
+ @ApiModelProperty(name = "权限菜单ID")
+ private Long permissionMenuId;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/service/DeliveryInfoDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/service/DeliveryInfoDomainService.java
new file mode 100644
index 000000000..29b88b579
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/deliveryInfo/service/DeliveryInfoDomainService.java
@@ -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 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 deliveryInfoDOList) {
+ return deliveryInfoService.batchInsert(deliveryInfoDOList);
+ }
+
+ /**
+ * 导入销售订单 - 为传入的发货列表添加一条发货信息
+ *
+ * @param deliveryInfoDOList - 添加数据的列表
+ * @param salesOrderExcelDTO -导入的数据
+ * @param salesOrder - 导入数据中的销售订单信息
+ */
+ public void listAddFromImportSalesOrder(List 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 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);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/goods/entity/Goods.java b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/entity/Goods.java
new file mode 100644
index 000000000..28d5b31f8
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/entity/Goods.java
@@ -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;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/facade/IGoodsService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/facade/IGoodsService.java
new file mode 100644
index 000000000..badc10f26
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/facade/IGoodsService.java
@@ -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
+{
+ /**
+ * 分页查询商品信息列表
+ */
+ public List 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 goodsDOList);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/mapper/GoodsMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/mapper/GoodsMapper.java
new file mode 100644
index 000000000..2892264fe
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/mapper/GoodsMapper.java
@@ -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
+{
+ /**
+ * 查询商品信息列表
+ */
+ public List queryList(GoodsDO goodsDO);
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/persistence/GoodsImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/persistence/GoodsImpl.java
new file mode 100644
index 000000000..48bf53707
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/persistence/GoodsImpl.java
@@ -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 implements IGoodsService {
+ @Autowired
+ private GoodsMapper goodsMapper;
+
+ /**
+ * 查询商品信息列表
+ */
+ @Override
+ public List 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 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 lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+ lambdaUpdateWrapper.eq(Goods::getOrderId, orderId).set(Goods::getDelFlag, 2);
+ return this.update(null, lambdaUpdateWrapper);
+ }
+
+ /**
+ * 批量新增
+ * @param goodsDOList
+ */
+ @Override
+ public Boolean batchInsert(List goodsDOList) {
+ List goodsList = goodsDOList.stream().map(goodsDO -> {
+ Goods goods = new Goods();
+ BeanUtils.copyProperties(goodsDO, goods);
+ return goods;
+ }).collect(Collectors.toList());
+
+ return this.saveBatch(goodsList);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/po/GoodsPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/po/GoodsPO.java
new file mode 100644
index 000000000..2e87d389f
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/po/GoodsPO.java
@@ -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;
+
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/todo/GoodsDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/todo/GoodsDO.java
new file mode 100644
index 000000000..d62241577
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/repository/todo/GoodsDO.java
@@ -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 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 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 idList){
+ this.idList = idList;
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/goods/service/GoodsDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/service/GoodsDomainService.java
new file mode 100644
index 000000000..1ae59e568
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/goods/service/GoodsDomainService.java
@@ -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 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 goodsDOList) {
+ return goodsService.batchInsert(goodsDOList);
+ }
+
+
+ /**
+ * 导入销售订单 - 为传入的销售明细列表添加一条明细
+ *
+ * @param goodsDOList - 添加数据的列表
+ * @param salesOrderExcelDTO -导入的数据
+ * @param salesOrder - 导入数据中的销售订单信息
+ */
+ public void listAddFromImportSalesOrder(List 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 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);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/entity/InterceptOrder.java b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/entity/InterceptOrder.java
new file mode 100644
index 000000000..d95e3a4a2
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/entity/InterceptOrder.java
@@ -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;
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/facade/IInterceptOrderService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/facade/IInterceptOrderService.java
new file mode 100644
index 000000000..3fde8773d
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/facade/IInterceptOrderService.java
@@ -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
+{
+ /**
+ * 分页查询拦截订单列表
+ */
+ public List queryList(InterceptOrderDO interceptOrderDO);
+
+ /**
+ * 新增拦截订单
+ */
+ public Boolean insert(InterceptOrderDO interceptOrderDO);
+
+ /**
+ * 修改拦截订单
+ */
+ public Boolean update(InterceptOrderDO interceptOrderDO);
+
+ /**
+ * 批量删除拦截订单
+ */
+ public Boolean delete(Long[] ids);
+
+
+ /**
+ * 查询拦截订单
+ */
+ public InterceptOrderPO getInfo(Long id);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/mapper/InterceptOrderMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/mapper/InterceptOrderMapper.java
new file mode 100644
index 000000000..aa2629d07
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/mapper/InterceptOrderMapper.java
@@ -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
+{
+ /**
+ * 查询拦截订单列表
+ */
+ public List queryList(InterceptOrderDO interceptOrderDO);
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/persistence/InterceptOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/persistence/InterceptOrderImpl.java
new file mode 100644
index 000000000..72d1719fc
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/persistence/InterceptOrderImpl.java
@@ -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 implements IInterceptOrderService{
+ @Autowired
+ private InterceptOrderMapper interceptOrderMapper;
+
+ @Resource
+ private ScmOrderMapper scmOrderMapper;
+
+ /**
+ * 查询拦截订单列表
+ */
+ @Override
+ public List queryList(InterceptOrderDO interceptOrderDO)
+ {
+ List 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 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;
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/po/InterceptOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/po/InterceptOrderPO.java
new file mode 100644
index 000000000..6bc47ac01
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/po/InterceptOrderPO.java
@@ -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;
+
+
+
+
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/todo/InterceptOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/todo/InterceptOrderDO.java
new file mode 100644
index 000000000..999563e1e
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/repository/todo/InterceptOrderDO.java
@@ -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 organizationIdList;
+
+ @ApiModelProperty(name = "权限菜单ID")
+ private Long permissionMenuId;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/service/InterceptOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/service/InterceptOrderDomainService.java
new file mode 100644
index 000000000..33ba8fa43
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/interceptOrder/service/InterceptOrderDomainService.java
@@ -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 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 v) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+
+ // =========================== 获取不可拦截的任务列表 ==============================
+ // 不可拦截任务列表1:任务状态不可拦截
+ List unableInterceptTask1 = v.stream()
+ .filter(x -> ArrayUtil.contains(OrderConstant.TASK_STATUS_GROUP_UNABLE_INTERCEPT, x.getTaskStatus()))
+ .collect(Collectors.toList());
+ // 不可拦截任务列表2:任务未下发但已合并
+ List 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 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 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;
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/entity/Logistics.java b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/entity/Logistics.java
new file mode 100644
index 000000000..f71998576
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/entity/Logistics.java
@@ -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;
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/facade/ILogisticsService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/facade/ILogisticsService.java
new file mode 100644
index 000000000..9d1ce6aea
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/facade/ILogisticsService.java
@@ -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
+{
+ /**
+ * 分页查询物流信息列表
+ */
+ public List 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 logisticsDOList);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/mapper/LogisticsMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/mapper/LogisticsMapper.java
new file mode 100644
index 000000000..b5f6211ab
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/mapper/LogisticsMapper.java
@@ -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
+{
+ /**
+ * 查询物流信息列表
+ */
+ public List queryList(LogisticsDO logisticsDO);
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/persistence/LogisticsImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/persistence/LogisticsImpl.java
new file mode 100644
index 000000000..3a891ff76
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/persistence/LogisticsImpl.java
@@ -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 implements ILogisticsService {
+ @Autowired
+ private LogisticsMapper logisticsMapper;
+
+ /**
+ * 查询物流信息列表
+ */
+ @Override
+ public List 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 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 logisticsDOList) {
+ List logisticsList = logisticsDOList.stream().map(logisticsDO -> {
+ Logistics logistics = new Logistics();
+ BeanUtils.copyProperties(logisticsDO, logistics);
+ return logistics;
+ }).collect(Collectors.toList());
+
+ return this.saveBatch(logisticsList);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/po/LogisticsPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/po/LogisticsPO.java
new file mode 100644
index 000000000..af35909b6
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/po/LogisticsPO.java
@@ -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;
+
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/todo/LogisticsDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/todo/LogisticsDO.java
new file mode 100644
index 000000000..65df89581
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/repository/todo/LogisticsDO.java
@@ -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 organizationIdList;
+
+ @ApiModelProperty(name = "权限菜单ID")
+ private Long permissionMenuId;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/service/LogisticsDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/service/LogisticsDomainService.java
new file mode 100644
index 000000000..76233928e
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/logistics/service/LogisticsDomainService.java
@@ -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 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 logisticsDOList) {
+ return logisticsService.batchInsert(logisticsDOList);
+ }
+
+ /**
+ * 导入销售订单 - 为传入的物流列表添加一条物流信息
+ *
+ * @param logisticsDOList - 添加数据的列表
+ * @param salesOrderExcelDTO -导入的数据
+ * @param salesOrder - 导入数据中的销售订单信息
+ */
+ public void listAddFromImportSalesOrder(List 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 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);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/entity/OrderType.java b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/entity/OrderType.java
new file mode 100644
index 000000000..c6fb5e960
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/entity/OrderType.java
@@ -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;
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/facade/IOrderTypeService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/facade/IOrderTypeService.java
new file mode 100644
index 000000000..9a5475f49
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/facade/IOrderTypeService.java
@@ -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
+{
+ /**
+ * 分页查询订单类型关系列表
+ */
+ public List queryList(OrderTypeDO orderTypeDO);
+
+ /**
+ * 新增订单类型关系
+ */
+ public Boolean insert(OrderTypeDO orderTypeDO);
+
+ /**
+ * 修改订单类型关系
+ */
+ public Boolean update(OrderTypeDO orderTypeDO);
+
+ /**
+ * 批量删除订单类型关系
+ */
+ public Boolean delete(Long[] ids);
+
+
+ /**
+ * 查询订单类型关系
+ */
+ public OrderTypePO getInfo(Long id);
+
+ List listDict();
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/mapper/OrderTypeMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/mapper/OrderTypeMapper.java
new file mode 100644
index 000000000..8708896ce
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/mapper/OrderTypeMapper.java
@@ -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
+{
+ /**
+ * 查询订单类型关系列表
+ */
+ public List queryList(OrderTypeDO orderTypeDO);
+
+ List listDict();
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/persistence/OrderTypeImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/persistence/OrderTypeImpl.java
new file mode 100644
index 000000000..50f647636
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/persistence/OrderTypeImpl.java
@@ -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 implements IOrderTypeService{
+ @Autowired
+ private OrderTypeMapper orderTypeMapper;
+
+ /**
+ * 查询订单类型关系列表
+ */
+ @Override
+ public List 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 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()
+ .eq(OrderType::getId,id).eq(OrderType::getDelFlag,1));
+ OrderTypePO orderTypePO = new OrderTypePO();
+ if (orderType != null) {
+ BeanUtils.copyProperties(orderType, orderTypePO);
+ }
+ return orderTypePO;
+ }
+
+ @Override
+ public List listDict() {
+ return orderTypeMapper.listDict();
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/po/OrderTypeDictPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/po/OrderTypeDictPO.java
new file mode 100644
index 000000000..caa1c85ff
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/po/OrderTypeDictPO.java
@@ -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;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/po/OrderTypePO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/po/OrderTypePO.java
new file mode 100644
index 000000000..c7b552aa1
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/po/OrderTypePO.java
@@ -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;
+
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/todo/OrderTypeDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/todo/OrderTypeDO.java
new file mode 100644
index 000000000..2c5671bc6
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/repository/todo/OrderTypeDO.java
@@ -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 organizationIdList;
+
+ @ApiModelProperty(name = "权限菜单ID")
+ private Long permissionMenuId;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/service/OrderTypeDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/service/OrderTypeDomainService.java
new file mode 100644
index 000000000..167b7b8d9
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/orderType/service/OrderTypeDomainService.java
@@ -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 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 listDict() {
+ return orderTypeService.listDict();
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/entity/PurchaseOrder.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/entity/PurchaseOrder.java
new file mode 100644
index 000000000..dd0a7aaca
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/entity/PurchaseOrder.java
@@ -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;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/facade/IPurchaseOrderService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/facade/IPurchaseOrderService.java
new file mode 100644
index 000000000..4d21677c0
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/facade/IPurchaseOrderService.java
@@ -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
+{
+ /**
+ * 分页查询采购订单管理列表
+ */
+ public List 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 getInfo(List ids);
+
+ Boolean batchUpdate(List purchaseOrderDOS);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/mapper/PurchaseOrderMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/mapper/PurchaseOrderMapper.java
new file mode 100644
index 000000000..4c545c04f
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/mapper/PurchaseOrderMapper.java
@@ -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
+{
+ /**
+ * 查询采购订单管理列表
+ */
+ public List 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);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/persistence/PurchaseOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/persistence/PurchaseOrderImpl.java
new file mode 100644
index 000000000..974609b17
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/persistence/PurchaseOrderImpl.java
@@ -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 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 queryList(PurchaseOrderDO purchaseOrderDO)
+ {
+ List 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 list = new ArrayList<>();
+ List purchaseOrderPOS = getInfo(Arrays.asList(ids));
+ //采购订单 订单状态未审核/已审核状态下才可以删除,否则提示异常
+ List 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()
+ .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()
+ .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()
+ .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()
+ .eq(Logistics::getOrderId, id).eq(Logistics::getDelFlag, 1));
+ if (ObjectUtil.isNull(logistics)) {
+ logistics = new Logistics();
+ }
+ BeanUtils.copyProperties(logistics, logisticsPO);
+ purchaseOrderDetailsPO.setLogisticsPO(logisticsPO);
+
+ List goodsList = goodsMapper.selectList(new LambdaQueryWrapper()
+ .eq(Goods::getOrderId, id).eq(Goods::getDelFlag, 1));
+ List 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 purchaseOrders = new ArrayList<>();
+ List 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 purchaseOrders = new ArrayList<>();
+ List 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 getInfo(List ids) {
+ List purchaseOrders = purchaseOrderMapper.selectList(new LambdaQueryWrapper()
+ .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 purchaseOrderDOS) {
+ List 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()
+ .set(PurchaseOrder::getOrderState, state)
+ .set(PurchaseOrder::getUpdateBy, loginUser.getUserid())
+ .set(PurchaseOrder::getUpdateByName, loginUser.getUsername())
+ .set(PurchaseOrder::getUpdateTime, new Date())
+ .eq(PurchaseOrder::getId, id));
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/po/PurchaseOrderDetailsPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/po/PurchaseOrderDetailsPO.java
new file mode 100644
index 000000000..a74201834
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/po/PurchaseOrderDetailsPO.java
@@ -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 goodsPOList;
+
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/po/PurchaseOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/po/PurchaseOrderPO.java
new file mode 100644
index 000000000..7c54137b1
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/po/PurchaseOrderPO.java
@@ -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;
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/todo/PurchaseOrderAddDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/todo/PurchaseOrderAddDO.java
new file mode 100644
index 000000000..491dcb155
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/todo/PurchaseOrderAddDO.java
@@ -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 goodsDOList;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/todo/PurchaseOrderAuditDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/todo/PurchaseOrderAuditDO.java
new file mode 100644
index 000000000..c679bc413
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/todo/PurchaseOrderAuditDO.java
@@ -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;
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/todo/PurchaseOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/todo/PurchaseOrderDO.java
new file mode 100644
index 000000000..3248e1692
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/repository/todo/PurchaseOrderDO.java
@@ -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 organizationIdList;
+
+ @ApiModelProperty(name = "权限菜单ID")
+ private Long permissionMenuId;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/service/PurchaseOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/service/PurchaseOrderDomainService.java
new file mode 100644
index 000000000..b6d675cb2
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/purchaseOrder/service/PurchaseOrderDomainService.java
@@ -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 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 getInfo(List ids) {
+ return purchaseOrderService.getInfo(ids);
+ }
+
+ public Boolean batchUpdate(List 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);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/entity/ReceiptInfo.java b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/entity/ReceiptInfo.java
new file mode 100644
index 000000000..ae3bfc14b
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/entity/ReceiptInfo.java
@@ -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;
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/facade/IReceiptInfoService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/facade/IReceiptInfoService.java
new file mode 100644
index 000000000..11088296d
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/facade/IReceiptInfoService.java
@@ -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
+{
+ /**
+ * 分页查询收货信息列表
+ */
+ public List 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 receiptInfoDOList);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/mapper/ReceiptInfoMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/mapper/ReceiptInfoMapper.java
new file mode 100644
index 000000000..40f6f9d50
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/mapper/ReceiptInfoMapper.java
@@ -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
+{
+ /**
+ * 查询收货信息列表
+ */
+ public List queryList(ReceiptInfoDO receiptInfoDO);
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/persistence/ReceiptInfoImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/persistence/ReceiptInfoImpl.java
new file mode 100644
index 000000000..13c473e34
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/persistence/ReceiptInfoImpl.java
@@ -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 implements IReceiptInfoService {
+ @Autowired
+ private ReceiptInfoMapper receiptInfoMapper;
+
+ /**
+ * 查询收货信息列表
+ */
+ @Override
+ public List 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 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 receiptInfoDOList) {
+ List receiptInfoList = receiptInfoDOList.stream().map(receiptInfoDO -> {
+ ReceiptInfo receiptInfo = new ReceiptInfo();
+ BeanUtils.copyProperties(receiptInfoDO, receiptInfo);
+ return receiptInfo;
+ }).collect(Collectors.toList());
+
+ return this.saveBatch(receiptInfoList);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/po/ReceiptInfoPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/po/ReceiptInfoPO.java
new file mode 100644
index 000000000..42d8325d6
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/po/ReceiptInfoPO.java
@@ -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;
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/todo/ReceiptInfoDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/todo/ReceiptInfoDO.java
new file mode 100644
index 000000000..04987993c
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/repository/todo/ReceiptInfoDO.java
@@ -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 organizationIdList;
+
+ @ApiModelProperty(name = "权限菜单ID")
+ private Long permissionMenuId;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/service/ReceiptInfoDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/service/ReceiptInfoDomainService.java
new file mode 100644
index 000000000..3a5933e39
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/receiptInfo/service/ReceiptInfoDomainService.java
@@ -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 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 receiptInfoDOList) {
+ return receiptInfoService.batchInsert(receiptInfoDOList);
+ }
+
+ /**
+ * 导入销售订单 - 为传入的收货列表添加一条收货信息
+ *
+ * @param receiptInfoDOList - 添加数据的列表
+ * @param salesOrderExcelDTO -导入的数据
+ * @param salesOrder - 导入数据中的销售订单信息
+ */
+ public void listAddFromImportSalesOrder(List 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 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);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/salesOrder/entity/SalesOrder.java b/mhd_oms/src/main/java/com/mhd/oms/domain/salesOrder/entity/SalesOrder.java
new file mode 100644
index 000000000..c67487e63
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/salesOrder/entity/SalesOrder.java
@@ -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;
+
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/salesOrder/repository/facade/ISalesOrderService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/salesOrder/repository/facade/ISalesOrderService.java
new file mode 100644
index 000000000..d2a8c8b6d
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/salesOrder/repository/facade/ISalesOrderService.java
@@ -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
+{
+ /**
+ * 分页查询销售订单列表
+ */
+ public List 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 getInfos(List ids);
+
+ Boolean batchUpdate(List salesOrderDOS);
+
+ Boolean audit(SalesOrderAuditDO salesOrderAuditDO);
+
+ Boolean cancelAudit(SalesOrderAuditDO salesOrderAuditDO);
+
+ Long insertReturnId(SalesOrderDO salesOrderDO);
+
+ void updateStateById(Long id, Integer state);
+
+ SalesOrderDetailsPO getetails(Long id);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/salesOrder/repository/mapper/SalesOrderMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/salesOrder/repository/mapper/SalesOrderMapper.java
new file mode 100644
index 000000000..a759ba85c
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/salesOrder/repository/mapper/SalesOrderMapper.java
@@ -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
+{
+ /**
+ * 查询销售订单列表
+ */
+ public List