Pārlūkot izejas kodu

aps-订单加锁

sucheng 9 mēneši atpakaļ
vecāks
revīzija
e2b93e8caa

+ 8 - 0
bs-common/src/main/java/com/rongwei/safecommon/fegin/CXAdminFeginClient.java

@@ -4,6 +4,8 @@ import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.vo.CriteriaQuery;
 import com.rongwei.rwcommon.vo.MailDo;
 import com.rongwei.rwcommon.vo.generalsql.BatchSaveVo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveInsertVo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveUpdateVo;
 import com.rongwei.rwcommonentity.commonservers.vo.SysNotifyAnnounceVo;
 import com.rongwei.rwcommonentity.commonservers.vo.SysSerialVo;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -25,4 +27,10 @@ public interface CXAdminFeginClient {
 
     @PostMapping("sys/generalCRUD/getSerialNumberCode")
     R<Map<String, Object>> getSerialNumberCode(@RequestBody SysSerialVo sysSerialVo);
+
+    @PostMapping("sys/generalCRUD/generalMsInsert")
+    R generalMsInsert(@RequestBody MasterSlaveInsertVo masterSlaveInsert);
+
+    @PostMapping("sys/generalCRUD/generalMsUpdate")
+    R generalMsUpdate(@RequestBody MasterSlaveUpdateVo masterSlaveUpdate);
 }

+ 14 - 0
bs-common/src/main/java/com/rongwei/safecommon/fegin/CXAdminFeginClientError.java

@@ -3,6 +3,8 @@ package com.rongwei.safecommon.fegin;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.vo.CriteriaQuery;
 import com.rongwei.rwcommon.vo.generalsql.BatchSaveVo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveInsertVo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveUpdateVo;
 import com.rongwei.rwcommonentity.commonservers.vo.SysSerialVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,5 +38,17 @@ public class CXAdminFeginClientError implements CXAdminFeginClient {
         return R.error();
     }
 
+    @Override
+    public R generalMsInsert(MasterSlaveInsertVo masterSlaveInsert) {
+        log.error("新增失败:{}",masterSlaveInsert);
+        return R.error();
+    }
+
+    @Override
+    public R generalMsUpdate(MasterSlaveUpdateVo masterSlaveUpdate) {
+        log.error("修改失败:{}",masterSlaveUpdate);
+        return R.error();
+    }
+
 
 }

+ 6 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProductionOrderService.java

@@ -5,7 +5,10 @@ import com.rongwei.bsentity.domain.ApsProductionOrderDo;
 import com.rongwei.bsentity.vo.CheckAndSaveOrUpdateOrderReq;
 import com.rongwei.bsentity.vo.DeleteOrderVo;
 import com.rongwei.bsentity.vo.OrderHaveBeChangedReq;
+import com.rongwei.bsentity.vo.OrderSaveOrUpdateVo;
 import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveInsertVo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveUpdateVo;
 
 import java.util.List;
 
@@ -38,4 +41,7 @@ public interface ApsProductionOrderService extends IService<ApsProductionOrderDo
 
     R closeOrder();
 
+    R generalMsInsert(OrderSaveOrUpdateVo req);
+
+    R generalMsUpdate(OrderSaveOrUpdateVo req);
 }

+ 188 - 108
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProductionOrderServiceImpl.java

@@ -19,8 +19,11 @@ import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.rwcommon.vo.MailDo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveInsertVo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveUpdateVo;
 import com.rongwei.rwcommonentity.commonservers.domain.SysMindMappingDo;
 
+import com.rongwei.safecommon.fegin.CXAdminFeginClient;
 import com.rongwei.safecommon.fegin.CXCommonFeginClient;
 import com.rongwei.safecommon.utils.CXCommonUtils;
 import com.rongwei.safecommon.utils.SaveConstans;
@@ -35,7 +38,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD;
@@ -50,6 +55,10 @@ import static com.rongwei.safecommon.utils.SaveConstans.NotifyType.*;
 public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrderDao, ApsProductionOrderDo>
         implements ApsProductionOrderService {
     private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
+
+    //订单锁
+    private final ConcurrentHashMap<String, String> productOrderLock = new ConcurrentHashMap<>();
+
     @Autowired
     private ApsProcessOperationDao apsProcessOperationDao;
     @Autowired
@@ -116,6 +125,8 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
     private RunTaskService runTaskService;
     @Autowired
     private ProcessInstService processInstService;
+    @Resource
+    private CXAdminFeginClient cxAdminFeginClient;
 
 
     public static final String ERROR_MSG = "%s上诉订单的排程交货期大于承诺交货期";
@@ -192,43 +203,62 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
     public R checkAndSaveOrUpdateOrder(CheckAndSaveOrUpdateOrderReq req) {
         //订单信息
         ApsProductionOrderDo apsProductionOrderDo = req.getApsProductionOrderDo();
-        //合并订单信息
-        List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList = req.getApsProductionMergeOrderDoList();
-        //产品明细信息
-        List<ApsProductDetailVo> apsProductDetailVoList = req.getApsProductDetailVoList();
-        //坯料计划信息(坯料计划是一保存的状态,校验直接通过数据库查询)
-        List<ApsBlankOrderDo> apsBlankOrderDoList = apsBlankOrderDao.selectList(new QueryWrapper<ApsBlankOrderDo>().lambda().eq(ApsBlankOrderDo::getProductionorderid, apsProductionOrderDo.getId()).orderByDesc(ApsBlankOrderDo::getModifydate));
-        //是否需要检验坯料计划是否已排程
-        Boolean checkSchedule = req.getCheckSchedule();
-        //坯料计划校验等级
-        Integer checkLevel = req.getCheckLevel();
-
-        //=========检查坯料计划的个数和状态=============
-        if (ObjectUtil.isEmpty(apsBlankOrderDoList)) {
-            return R.error("坯料计划至少有一个");
+        String id = apsProductionOrderDo.getId();
+
+        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+        if (productOrderLock.containsKey(id)) {
+            log.error("校验-该订单已被:{}提交", productOrderLock.get(id));
+            return R.error("该订单已被提交,请刷新页面后重新操作");
         }
-        if (checkLevel == 3) {
-            for (int i = 0; i < apsBlankOrderDoList.size(); i++) {
-                if (apsBlankOrderDoList.get(i).getIsstag().equals("是")) {
-                    return R.error("坯料计划" + apsBlankOrderDoList.get(i).getBlanknumber() + "还未提交,请先提交坯料计划再提交订单");
-                }
+        productOrderLock.put(id, currentUser.getId());
+        try {
+            //数据库中的订单数据
+            ApsProductionOrderDo nowApsProductionOrderDo = this.getById(id);
+            //页面上的订单数据
+            ApsProductionOrderDo oldOrder = req.getOldOrder();
+            //如果 评审状态 不一致
+            if (!oldOrder.getAuditstatus().equals(nowApsProductionOrderDo.getAuditstatus())) {
+                return R.error("该订单已被提交,请刷新页面后重新操作");
             }
-        }
 
-        //提交时需要校验是否已排程
-        if (checkSchedule) {
-            //如果坯料计划生产状态=待排程;错误提示:坯料计划 {输入物料描述} 还未排程
-            for (ApsBlankOrderDo apsBlankOrderDo : apsBlankOrderDoList) {
-                if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProductstatus()) && apsBlankOrderDo.getProductstatus().equals(SaveConstans.ProductionStatus.TO_BE_SCHEDULED)) {
-                    return R.error("坯料计划 " + apsBlankOrderDo.getInputreportdescribe() + " 还未排程");
-                }
+
+            //合并订单信息
+            List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList = req.getApsProductionMergeOrderDoList();
+            //产品明细信息
+            List<ApsProductDetailVo> apsProductDetailVoList = req.getApsProductDetailVoList();
+            //坯料计划信息(坯料计划是一保存的状态,校验直接通过数据库查询)
+            List<ApsBlankOrderDo> apsBlankOrderDoList = apsBlankOrderDao.selectList(new QueryWrapper<ApsBlankOrderDo>().lambda().eq(ApsBlankOrderDo::getProductionorderid, apsProductionOrderDo.getId()).orderByDesc(ApsBlankOrderDo::getModifydate));
+            //是否需要检验坯料计划是否已排程
+            Boolean checkSchedule = req.getCheckSchedule();
+            //坯料计划校验等级
+            Integer checkLevel = req.getCheckLevel();
+
+            //=========检查坯料计划的个数和状态=============
+            if (ObjectUtil.isEmpty(apsBlankOrderDoList)) {
+                return R.error("坯料计划至少有一个");
             }
-            //检查该订单所有作业明细,如果存在冲突,则错误提示:请先解决冲突再发布
-            int count = this.baseMapper.selectConflictdesCount(apsProductionOrderDo.getId());
-            if (count > 0) {
-                return R.error("请先解决冲突再发布");
+            if (checkLevel == 3) {
+                for (int i = 0; i < apsBlankOrderDoList.size(); i++) {
+                    if (apsBlankOrderDoList.get(i).getIsstag().equals("是")) {
+                        return R.error("坯料计划" + apsBlankOrderDoList.get(i).getBlanknumber() + "还未提交,请先提交坯料计划再提交订单");
+                    }
+                }
             }
 
+            //提交时需要校验是否已排程
+            if (checkSchedule) {
+                //如果坯料计划生产状态=待排程;错误提示:坯料计划 {输入物料描述} 还未排程
+                for (ApsBlankOrderDo apsBlankOrderDo : apsBlankOrderDoList) {
+                    if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProductstatus()) && apsBlankOrderDo.getProductstatus().equals(SaveConstans.ProductionStatus.TO_BE_SCHEDULED)) {
+                        return R.error("坯料计划 " + apsBlankOrderDo.getInputreportdescribe() + " 还未排程");
+                    }
+                }
+                //检查该订单所有作业明细,如果存在冲突,则错误提示:请先解决冲突再发布
+                int count = this.baseMapper.selectConflictdesCount(apsProductionOrderDo.getId());
+                if (count > 0) {
+                    return R.error("请先解决冲突再发布");
+                }
+
 //            //============校验承诺交期============
 //            //如果承诺交货期为空,错误提示:请填写订单{订单号}{客户简称}的承诺交货期
 //            if (ObjectUtil.isEmpty(apsProductionOrderDo.getPromisedeliverydate())) {
@@ -241,25 +271,25 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
 //            if (apsProductionOrderDo.getPromisedeliverydate().compareTo(apsProductionOrderDo.getScheduledeliverydate()) < 0) {
 //                return R.error("承诺交货期不能早于排程交货期" + DateUtil.format(apsProductionOrderDo.getScheduledeliverydate(), "yyyy-MM-dd"));
 //            }
-        }
+            }
 
-        //============校验计划输出订单总重量==============
-        //检查每个订单产品,如果该订单产品坯料计划输出总重量 不等于 该订单产品订单总数量;
-        //错误提示:订单产品 {输入物料描述} 订单总数量与坯料计划输出总重量不一致
-        if (ObjectUtil.isEmpty(apsProductDetailVoList) || apsProductDetailVoList.size() <= 0) {
-            return R.error("产品明细至少有一个");
-        }
+            //============校验计划输出订单总重量==============
+            //检查每个订单产品,如果该订单产品坯料计划输出总重量 不等于 该订单产品订单总数量;
+            //错误提示:订单产品 {输入物料描述} 订单总数量与坯料计划输出总重量不一致
+            if (ObjectUtil.isEmpty(apsProductDetailVoList) || apsProductDetailVoList.size() <= 0) {
+                return R.error("产品明细至少有一个");
+            }
 //        for (ApsProductDetailVo apsProductDetailVo : apsProductDetailVoList) {
 //            if (ObjectUtil.isEmpty(apsProductDetailVo.getTotalordercount()) || ObjectUtil.isEmpty(apsProductDetailVo.getPlanout()) || apsProductDetailVo.getTotalordercount().compareTo(apsProductDetailVo.getPlanout()) != 0) {
 //                return R.error("订单产品 " + apsProductDetailVo.getInputmaterialdescription() + " 订单总数量与坯料计划输出总重量不一致");
 //            }
 //        }
 
-        //查询此订单所有产品明细对应的输出成品的卷数和
+            //查询此订单所有产品明细对应的输出成品的卷数和
 //        List<ProductDetailIdAndPlanOutPutRollCountAllVo> planOutPutRollCountAllVos = this.baseMapper.getProductDetailIdAndPlanOutPutRollCountAll(apsProductDetailVoList.get(0).getMainid());
-        //检查每个订单产品,如果该订单产品填写了卷数,
-        //并且该订单产品对应坯料输出成品的计划输出订单卷数合计不等于订单产品的卷数,
-        //错误提示:订单产品 {输入物料描述} 的卷数与坯料计划的计划输出订单卷数不一致
+            //检查每个订单产品,如果该订单产品填写了卷数,
+            //并且该订单产品对应坯料输出成品的计划输出订单卷数合计不等于订单产品的卷数,
+            //错误提示:订单产品 {输入物料描述} 的卷数与坯料计划的计划输出订单卷数不一致
 //        for (ApsProductDetailVo apsProductDetailVo : apsProductDetailVoList) {
 //            if (ObjectUtil.isNotEmpty(apsProductDetailVo.getRollnum())) {
 //                for (ProductDetailIdAndPlanOutPutRollCountAllVo planOutPutRollCountAllVo : planOutPutRollCountAllVos) {
@@ -274,10 +304,10 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
 //            }
 //        }
 
-        //===============校验产品明细的长===================
-        if (ObjectUtil.isEmpty(apsProductDetailVoList)) {
-            return R.error("产品明细至少有一个");
-        }
+            //===============校验产品明细的长===================
+            if (ObjectUtil.isEmpty(apsProductDetailVoList)) {
+                return R.error("产品明细至少有一个");
+            }
 
 //        //获取产品明细的所有产品类型ID(去重)
 //        Set<String> productTypeIds = apsProductDetailVoList.stream().map(ApsProductDetailVo::getProducttypeid).collect(Collectors.toSet());
@@ -301,73 +331,81 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
 //            }
 //        }
 
-        /**
-         * 校验每个订单产品
-         * 如果订单产品暂不评审=否,并且坯料计划输出总重量 = 0,则错误提示:订单产品 {输入物料描述}坯料计划未填写
-         * 如果订单产品暂不评审=是,并且坯料计划输出总重量 > 0,则错误提示:订单产品 {输入物料描述}暂不评审,不应该填写坯料计划
-         */
-        for (ApsProductDetailVo apsProductDetailVo : apsProductDetailVoList) {
-            if (apsProductDetailVo.getDeleted().equals("0")) {
-                if (apsProductDetailVo.getNotyetreview().equals("否") && (ObjectUtil.isEmpty(apsProductDetailVo.getPlanout()) || apsProductDetailVo.getPlanout().toString().equals("0"))) {
-                    return R.error("订单产品 " + apsProductDetailVo.getInputmaterialdescription() + "坯料计划未填写");
-                }
-                if (apsProductDetailVo.getNotyetreview().equals("是") && ObjectUtil.isNotEmpty(apsProductDetailVo.getPlanout()) && !apsProductDetailVo.getPlanout().toString().equals("0")) {
-                    return R.error("订单产品 " + apsProductDetailVo.getInputmaterialdescription() + "暂不评审,不应该填写坯料计划");
+            /**
+             * 校验每个订单产品
+             * 如果订单产品暂不评审=否,并且坯料计划输出总重量 = 0,则错误提示:订单产品 {输入物料描述}坯料计划未填写
+             * 如果订单产品暂不评审=是,并且坯料计划输出总重量 > 0,则错误提示:订单产品 {输入物料描述}暂不评审,不应该填写坯料计划
+             */
+            for (ApsProductDetailVo apsProductDetailVo : apsProductDetailVoList) {
+                if (apsProductDetailVo.getDeleted().equals("0")) {
+                    if (apsProductDetailVo.getNotyetreview().equals("否") && (ObjectUtil.isEmpty(apsProductDetailVo.getPlanout()) || apsProductDetailVo.getPlanout().toString().equals("0"))) {
+                        return R.error("订单产品 " + apsProductDetailVo.getInputmaterialdescription() + "坯料计划未填写");
+                    }
+                    if (apsProductDetailVo.getNotyetreview().equals("是") && ObjectUtil.isNotEmpty(apsProductDetailVo.getPlanout()) && !apsProductDetailVo.getPlanout().toString().equals("0")) {
+                        return R.error("订单产品 " + apsProductDetailVo.getInputmaterialdescription() + "暂不评审,不应该填写坯料计划");
+                    }
                 }
             }
-        }
 
 
-        List<ApsProductDetailDo> productDetailDoList = BeanUtil.copyToList(apsProductDetailVoList, ApsProductDetailDo.class);
-        //================循环校验坯料计划===============
-        for (int i = 0; i < apsBlankOrderDoList.size(); i++) {
-            CheckAndSaveOrUpdateBlankReq checkAndSaveOrUpdateBlankReq = new CheckAndSaveOrUpdateBlankReq();
-            checkAndSaveOrUpdateBlankReq.setApsBlankOrderDo(apsBlankOrderDoList.get(i));
-            checkAndSaveOrUpdateBlankReq.setApsProcessOutputProductDoList(apsProcessOutputProductService.list(new QueryWrapper<ApsProcessOutputProductDo>().lambda().eq(ApsProcessOutputProductDo::getBlankid, apsBlankOrderDoList.get(i).getId())));
-            checkAndSaveOrUpdateBlankReq.setApsProductDetailDoList(productDetailDoList);
-            checkAndSaveOrUpdateBlankReq.setCheckLevel(checkLevel);
-            if (checkSchedule) {
-                checkAndSaveOrUpdateBlankReq.setCheckDevice(true);
-            }
+            List<ApsProductDetailDo> productDetailDoList = BeanUtil.copyToList(apsProductDetailVoList, ApsProductDetailDo.class);
+            //================循环校验坯料计划===============
+            for (int i = 0; i < apsBlankOrderDoList.size(); i++) {
+                CheckAndSaveOrUpdateBlankReq checkAndSaveOrUpdateBlankReq = new CheckAndSaveOrUpdateBlankReq();
+                checkAndSaveOrUpdateBlankReq.setApsBlankOrderDo(apsBlankOrderDoList.get(i));
+                checkAndSaveOrUpdateBlankReq.setApsProcessOutputProductDoList(apsProcessOutputProductService.list(new QueryWrapper<ApsProcessOutputProductDo>().lambda().eq(ApsProcessOutputProductDo::getBlankid, apsBlankOrderDoList.get(i).getId())));
+                checkAndSaveOrUpdateBlankReq.setApsProductDetailDoList(productDetailDoList);
+                checkAndSaveOrUpdateBlankReq.setCheckLevel(checkLevel);
+                if (checkSchedule) {
+                    checkAndSaveOrUpdateBlankReq.setCheckDevice(true);
+                }
 
-            R r = apsBlankOrderService.checkBlankOrder(checkAndSaveOrUpdateBlankReq, i + 1);
-            if (!r.getCode().equals("200")) {
-                return R.error(r.getMsg());
+                R r = apsBlankOrderService.checkBlankOrder(checkAndSaveOrUpdateBlankReq, i + 1);
+                if (!r.getCode().equals("200")) {
+                    return R.error(r.getMsg());
+                }
             }
-        }
 
-        //================校验通过,保存或更新订单相关信息=====================
-        if (req.getIsNeedSave()) {
-            //获取当前用户的所属工厂
-            SysUserVo currentUser = CXCommonUtils.getCurrentUser();
-            String tenantId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
+            //================校验通过,保存或更新订单相关信息=====================
+            if (req.getIsNeedSave()) {
+                //获取当前用户的所属工厂
+//            SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+                String tenantId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
 
-            //保存主表信息
-            apsProductionOrderDo.setTenantid(tenantId);
-            this.saveOrUpdate(apsProductionOrderDo);
+                //保存主表信息
+                apsProductionOrderDo.setTenantid(tenantId);
+                this.saveOrUpdate(apsProductionOrderDo);
 
-            //保存产品明细子表
-            for (ApsProductDetailVo apsProductDetailVo : apsProductDetailVoList) {
-                apsProductDetailVo.setTenantid(tenantId);
-            }
-            apsProductDetailService.saveOrUpdateBatch(productDetailDoList);
+                //保存产品明细子表
+                for (ApsProductDetailVo apsProductDetailVo : apsProductDetailVoList) {
+                    apsProductDetailVo.setTenantid(tenantId);
+                }
+                apsProductDetailService.saveOrUpdateBatch(productDetailDoList);
 
-            //保存合并订单子表
-            if (ObjectUtil.isNotEmpty(apsProductionMergeOrderDoList) && apsProductionMergeOrderDoList.size() > 0) {
-                for (ApsProductionMergeOrderDo apsProductionMergeOrderDo : apsProductionMergeOrderDoList) {
-                    apsProductionMergeOrderDo.setTenantid(tenantId);
+                //保存合并订单子表
+                if (ObjectUtil.isNotEmpty(apsProductionMergeOrderDoList) && apsProductionMergeOrderDoList.size() > 0) {
+                    for (ApsProductionMergeOrderDo apsProductionMergeOrderDo : apsProductionMergeOrderDoList) {
+                        apsProductionMergeOrderDo.setTenantid(tenantId);
+                    }
+                    apsProductionMergeOrderService.saveOrUpdateBatch(apsProductionMergeOrderDoList);
                 }
-                apsProductionMergeOrderService.saveOrUpdateBatch(apsProductionMergeOrderDoList);
             }
-        }
 
-        if (req.getIsNeedPublish()) {
-            //=============发布排程================
-            List<String> blankIds = apsBlankOrderDoList.stream().filter(item -> item.getProductstatus().equals(SaveConstans.ProductionStatus.TO_BE_PUBLISHED)).map(ApsBlankOrderDo::getId).collect(Collectors.toList());
-            if (ObjectUtil.isNotEmpty(blankIds)) {
-                R publish = apsBlankOrderService.publish(blankIds);
-                if (!publish.getCode().equals("200")) {
-                    throw new RuntimeException(publish.getMsg());
+            if (req.getIsNeedPublish()) {
+                //=============发布排程================
+                List<String> blankIds = apsBlankOrderDoList.stream().filter(item -> item.getProductstatus().equals(SaveConstans.ProductionStatus.TO_BE_PUBLISHED)).map(ApsBlankOrderDo::getId).collect(Collectors.toList());
+                if (ObjectUtil.isNotEmpty(blankIds)) {
+                    R publish = apsBlankOrderService.publish(blankIds);
+                    if (!publish.getCode().equals("200")) {
+                        throw new RuntimeException(publish.getMsg());
+                    }
+                } else {
+                    if (ObjectUtil.isNotEmpty(apsBlankOrderDoList)) {
+                        //更新生产状态
+                        CommonUpdateProductionStatusReq request = new CommonUpdateProductionStatusReq();
+                        request.setBlankId(apsBlankOrderDoList.get(0).getId());
+                        apsProcessOperationProcessEquService.updateProductionStatus(request);
+                    }
                 }
             } else {
                 if (ObjectUtil.isNotEmpty(apsBlankOrderDoList)) {
@@ -377,16 +415,11 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
                     apsProcessOperationProcessEquService.updateProductionStatus(request);
                 }
             }
-        } else {
-            if (ObjectUtil.isNotEmpty(apsBlankOrderDoList)) {
-                //更新生产状态
-                CommonUpdateProductionStatusReq request = new CommonUpdateProductionStatusReq();
-                request.setBlankId(apsBlankOrderDoList.get(0).getId());
-                apsProcessOperationProcessEquService.updateProductionStatus(request);
-            }
+        } finally {
+            log.debug("校验-订单提交完毕,从map中清空当前订单锁,订单ID:{}", id);
+            productOrderLock.remove(id);
         }
 
-
         return R.ok();
     }
 
@@ -865,6 +898,53 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
         return R.ok();
     }
 
+    @Override
+    public R generalMsInsert(OrderSaveOrUpdateVo req) {
+        MasterSlaveInsertVo masterSlaveInsert = req.getMasterSlaveInsert();
+//        String id = masterSlaveInsert.getMasterInsert().getInsertcolumns().get("ID").toString();
+//        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+//        if (productOrderLock.containsKey(id)) {
+//            log.error("新增-该订单已被:{}提交", productOrderLock.get(id));
+//            return R.error("该订单已被提交");
+//        }
+//        productOrderLock.put(id, currentUser.getId());
+//        try {
+        cxAdminFeginClient.generalMsInsert(masterSlaveInsert);
+//        } finally {
+//            log.debug("新增-订单提交完毕,从map中清空当前订单锁,订单ID:{}", id);
+//            productOrderLock.remove(id);
+//        }
+        return R.ok();
+    }
+
+    @Override
+    public R generalMsUpdate(OrderSaveOrUpdateVo req) {
+        MasterSlaveUpdateVo masterSlaveUpdate = req.getMasterSlaveUpdate();
+        String id = masterSlaveUpdate.getMasterUpdate().getColumnQueryTypes().get(0).getColumns().get(0).getValue();
+        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+        if (productOrderLock.containsKey(id)) {
+            log.error("修改-该订单已被:{}提交", productOrderLock.get(id));
+            return R.error("该订单已被提交");
+        }
+        productOrderLock.put(id, currentUser.getId());
+        try {
+            //数据库中的订单数据
+            ApsProductionOrderDo nowApsProductionOrderDo = this.getById(id);
+            //页面上的订单数据
+            ApsProductionOrderDo oldOrder = req.getOldOrder();
+            //如果 评审状态 不一致
+            if (!oldOrder.getAuditstatus().equals(nowApsProductionOrderDo.getAuditstatus())) {
+                return R.error("该订单已被提交,请刷新页面后重新操作");
+            }
+
+            cxAdminFeginClient.generalMsUpdate(masterSlaveUpdate);
+        } finally {
+            log.debug("修改-订单提交完毕,从map中清空当前订单锁,订单ID:{}", id);
+            productOrderLock.remove(id);
+        }
+        return R.ok();
+    }
+
 }
 
 

+ 4 - 1
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CheckAndSaveOrUpdateOrderReq.java

@@ -1,11 +1,11 @@
 package com.rongwei.bsentity.vo;
 
 import com.rongwei.bsentity.domain.ApsBlankOrderDo;
-import com.rongwei.bsentity.domain.ApsProductDetailDo;
 import com.rongwei.bsentity.domain.ApsProductionMergeOrderDo;
 import com.rongwei.bsentity.domain.ApsProductionOrderDo;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -37,4 +37,7 @@ public class CheckAndSaveOrUpdateOrderReq {
 
     //坯料计划 校验等级
     private Integer checkLevel = 3;
+
+    //页面上订单信息
+    private ApsProductionOrderDo oldOrder;
 }

+ 22 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/OrderSaveOrUpdateVo.java

@@ -0,0 +1,22 @@
+package com.rongwei.bsentity.vo;
+
+import com.rongwei.bsentity.domain.ApsProductionOrderDo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveInsertVo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveUpdateVo;
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/10/17
+ */
+@Data
+public class OrderSaveOrUpdateVo {
+    //页面上订单信息
+    private ApsProductionOrderDo oldOrder;
+
+    //新增参数
+    private MasterSlaveInsertVo masterSlaveInsert;
+
+    //修改数据
+    private MasterSlaveUpdateVo masterSlaveUpdate;
+}

+ 20 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProductionOrderController.java

@@ -5,7 +5,11 @@ import com.rongwei.bsentity.domain.ApsProductionOrderDo;
 import com.rongwei.bsentity.vo.CheckAndSaveOrUpdateOrderReq;
 import com.rongwei.bsentity.vo.DeleteOrderVo;
 import com.rongwei.bsentity.vo.OrderHaveBeChangedReq;
+import com.rongwei.bsentity.vo.OrderSaveOrUpdateVo;
 import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveInsertVo;
+import com.rongwei.rwcommon.vo.generalsql.MasterSlaveUpdateVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -154,4 +158,20 @@ public class ApsProductionOrderController {
     public R closeOrder(){
         return apsProductionOrderService.closeOrder();
     }
+
+    /**
+     * 订单 新增
+     */
+    @PostMapping("/generalMsInsert")
+    public R generalMsInsert(@RequestBody OrderSaveOrUpdateVo req){
+        return apsProductionOrderService.generalMsInsert(req);
+    }
+
+    /**
+     * 订单 修改
+     */
+    @PostMapping("/generalMsUpdate")
+    public R generalMsUpdate(@RequestBody OrderSaveOrUpdateVo req) {
+        return apsProductionOrderService.generalMsUpdate(req);
+    }
 }