Parcourir la source

合同dw删除、配送状态

HULEI il y a 3 jours
Parent
commit
6a4750acbc

+ 65 - 20
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractCreateController.java

@@ -87,34 +87,78 @@ public class contractCreateController {
     @Mapping(value = "com.awspaas.user.apps.donenow_ctt.contract_delete")
     public ResponseObject contractDelete(UserContext uc, String bindid, String id) throws SQLException {
 
-        int cnt = DBSql.getInt("SELECT COUNT(0) FROM BO_EU_DNPRO_PROJECT WHERE CONTRACT_ID=? AND CLOSED=0", new Object[]{id});
-        if (cnt > 0) {
-            return ResponseObject.newErrResponse("该合同关联了" + cnt + "个项目,无法删除!");
+        StringBuilder errorMsg = new StringBuilder();
+
+// 1. 查询“项目”关联数
+        String projectSql = "SELECT COUNT(0) FROM BO_EU_DNPRO_PROJECT WHERE CONTRACT_ID=? AND CLOSED=0";
+        String projectCountStr = DBSql.getString(projectSql, new Object[]{id});
+        int projectCount = StringUtils.isBlank(projectCountStr) ? 0 : Integer.parseInt(projectCountStr);
+        if (projectCount > 0) {
+            errorMsg.append(projectCount).append("个项目");
         }
-        cnt = DBSql.getInt("SELECT COUNT(0) FROM BO_EU_DNSDK_TASK WHERE CONTRACT_ID=? ", new Object[]{id});
-        if (cnt > 0) {
-            return ResponseObject.newErrResponse("该合同关联了" + cnt + "个任务,无法删除!");
+
+// 2. 查询“工单/任务”关联数
+        String taskSql = "SELECT COUNT(0) FROM BO_EU_DNSDK_TASK WHERE CONTRACT_ID=?";
+        String taskCountStr = DBSql.getString(taskSql, new Object[]{id});
+        int taskCount = StringUtils.isBlank(taskCountStr) ? 0 : Integer.parseInt(taskCountStr);
+        if (taskCount > 0) {
+            if (errorMsg.length() > 0) errorMsg.append("\n"); // 替换为纯文本换行符
+            errorMsg.append(taskCount).append("个工单/任务");
         }
-        cnt = DBSql.getInt("SELECT COUNT(0) FROM BO_EU_DNCRM_INSTALLED_PRODUCT WHERE CONTRACT_ID=? AND CLOSED=0", new Object[]{id});
-        if (cnt > 0) {
-            return ResponseObject.newErrResponse("该合同关联了" + cnt + "个产品,无法删除!");
+
+// 3. 查询“配置项”关联数
+        String productSql = "SELECT COUNT(0) FROM BO_EU_DNCRM_INSTALLED_PRODUCT WHERE CONTRACT_ID=? AND CLOSED=0";
+        String productCountStr = DBSql.getString(productSql, new Object[]{id});
+        int productCount = StringUtils.isBlank(productCountStr) ? 0 : Integer.parseInt(productCountStr);
+        if (productCount > 0) {
+            if (errorMsg.length() > 0) errorMsg.append("\n"); // 替换为纯文本换行符
+            errorMsg.append(productCount).append("个配置项");
         }
-        cnt = DBSql.getInt("SELECT COUNT(0) FROM BO_EU_DNCTT_CONTRACT_COST WHERE CONTRACT_ID=? AND CLOSED=0", new Object[]{id});
-        if (cnt > 0) {
-            return ResponseObject.newErrResponse("该合同关联了" + cnt + "个合同成本,无法删除!");
+
+// 4. 查询“合同产品”关联数
+        String contractCostSql = "SELECT COUNT(0) FROM BO_EU_DNCTT_CONTRACT_COST WHERE CONTRACT_ID=? AND CLOSED=0";
+        String contractCostCountStr = DBSql.getString(contractCostSql, new Object[]{id});
+        int contractCostCount = StringUtils.isBlank(contractCostCountStr) ? 0 : Integer.parseInt(contractCostCountStr);
+        if (contractCostCount > 0) {
+            if (errorMsg.length() > 0) errorMsg.append("\n"); // 替换为纯文本换行符
+            errorMsg.append(contractCostCount).append("个合同产品");
         }
-        cnt = DBSql.getInt("SELECT COUNT(0) FROM BO_EU_DNCRM_ACCOUNT_DEDUCTION WHERE CONTRACT_ID=? ", new Object[]{id});
-        if (cnt > 0) {
-            return ResponseObject.newErrResponse("该合同关联了" + cnt + "个已计费条目,无法删除!");
+
+// 5. 查询“已计费条目”关联数
+        String deductionSql = "SELECT COUNT(0) FROM BO_EU_DNCRM_ACCOUNT_DEDUCTION WHERE CONTRACT_ID=?";
+        String deductionCountStr = DBSql.getString(deductionSql, new Object[]{id});
+        int deductionCount = StringUtils.isBlank(deductionCountStr) ? 0 : Integer.parseInt(deductionCountStr);
+        if (deductionCount > 0) {
+            if (errorMsg.length() > 0) errorMsg.append("\n"); // 替换为纯文本换行符
+            errorMsg.append(deductionCount).append("个已计费条目");
         }
-        cnt = DBSql.getInt("SELECT COUNT(0) FROM BO_EU_DNSDK_WORK_ENTRY WHERE CONTRACT_ID=? ", new Object[]{id});
-        if (cnt > 0) {
-            return ResponseObject.newErrResponse("该合同关联了" + cnt + "个工时,无法删除!");
+
+// 6. 查询“工时”关联数
+        String workEntrySql = "SELECT COUNT(0) FROM BO_EU_DNSDK_WORK_ENTRY WHERE CONTRACT_ID=?";
+        String workEntryCountStr = DBSql.getString(workEntrySql, new Object[]{id});
+        int workEntryCount = StringUtils.isBlank(workEntryCountStr) ? 0 : Integer.parseInt(workEntryCountStr);
+        if (workEntryCount > 0) {
+            if (errorMsg.length() > 0) errorMsg.append("\n"); // 替换为纯文本换行符
+            errorMsg.append(workEntryCount).append("个工时");
+        }
+
+        String contractServiceSql = "SELECT COUNT(0) FROM BO_EU_DNCTT_CONTRACT_SERVICE WHERE CONTRACT_ID=? AND CLOSED=0";
+        String contractServiceCountStr = DBSql.getString(contractServiceSql, new Object[]{id});
+        int contractServiceCount = StringUtils.isBlank(contractServiceCountStr) ? 0 : Integer.parseInt(contractServiceCountStr);
+        if (contractServiceCount > 0) {
+            if (errorMsg.length() > 0) errorMsg.append("\n"); // 替换为纯文本换行符
+            errorMsg.append(contractServiceCount).append("个合同服务");
+        }
+
+        if (errorMsg.length() > 0) {
+            return ResponseObject.newErrResponse("该合同关联了:\n" + errorMsg.toString() + ",无法删除!");
+            // 开头也添加\n,让第一个关联项也换行显示(可选,根据排版需求调整)
         }
 
+
         //如果服务已经审批并提交,则不能删除
         //合同初始费用审批
-        cnt = DBSql.getInt("SELECT COUNT(0) FROM BO_EU_DNCTT_CONTRACT WHERE (ID=? OR BINDID=?) AND SETUP_FEE!=0 AND SETUP_FEE IS NOT NULL AND CLOSED=0", new Object[]{id, bindid});
+        int cnt = DBSql.getInt("SELECT COUNT(0) FROM BO_EU_DNCTT_CONTRACT WHERE (ID=? OR BINDID=?) AND SETUP_FEE!=0 AND SETUP_FEE IS NOT NULL AND CLOSED=0", new Object[]{id, bindid});
         if (cnt > 0) {
             return ResponseObject.newErrResponse("该合同合同初始费用已审批并提交,无法删除!");
         }
@@ -144,7 +188,8 @@ public class contractCreateController {
             updateContractCLOSED(uc, "BO_EU_DNCTT_CONTRACT_SERVICE", params, conn);
             updateContractCLOSED(uc, "BO_EU_DNCTT_CONTRACT_COST_DEFAULT", params, conn);
 
-            updateContractCLOSED(uc, "BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST", params, conn);
+            updateContractCLOSED(uc, "BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST", params, conn);
+            updateContractCLOSED(uc, "BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST", params, conn);
             updateContractCLOSED(uc, "BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", params, conn);
 
             updateContractCLOSED(uc, "BO_EU_DNCTT_CONTRACT_SERVICE_BUNDLE_SERVICE", " CONTRACT_SERVICE_ID IN (SELECT ID FROM BO_EU_DNCTT_CONTRACT_SERVICE WHERE (CONTRACT_ID=:CONTRACT_ID OR BINDID=:BINDID)) ", params, conn);

+ 1 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/PeriodForm.java

@@ -43,6 +43,7 @@ public class PeriodForm implements DataWindowFormatSQLEventInterface {
                     standardSql += " " + newCondition;
                 }
 
+
                 LOGGER.info("周期查询替换完成,中间SQL:" + standardSql);
             }
 

+ 45 - 8
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/costProductShipFormAfterSave.java

@@ -10,6 +10,7 @@ import com.actionsoft.sdk.local.SDK;
 import org.apache.commons.lang3.StringUtils;
 
 import java.sql.Connection;
+import java.sql.SQLException;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
@@ -198,15 +199,29 @@ public class costProductShipFormAfterSave extends ExecuteListener {
                 //生成运费成本
                 // 输入运费的物料计费代码,就会生成新的成本ctt_contract_cost
                 if (StringUtils.isNotBlank(productBO.getString("COST_CODE_ID"))) {
+
                     BO costShipBO = null;
                     ProcessInstance costShipProcessIns = null;
-                    if (StringUtils.isNotBlank(productBO.getString("SHIPPING_CONTRACT_COST_ID"))) {
-                        costShipProcessIns = SDK.getProcessAPI().createBOProcessInstance("obj_87c6ef75d18f44cc8e85d3d4e818c303", processExecutionContext.getUserContext().getUID(), "合同产品-生成运费成本");
+                    String shippingContractCostId = productBO.getString("SHIPPING_CONTRACT_COST_ID");
+                    if (StringUtils.isBlank(shippingContractCostId)) {
+                        // 场景1:无SHIPPING_CONTRACT_COST_ID,创建新流程和BO
+                        costShipProcessIns = SDK.getProcessAPI().createBOProcessInstance("obj_87c6ef75d18f44cc8e85d3d4e818c303",
+                                processExecutionContext.getUserContext().getUID(), "合同产品-生成运费成本");
                         costShipBO = new BO();
                         costShipBO.setBindId(costShipProcessIns.getId());
                     } else {
-                        costShipBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_COST", productBO.getString("SHIPPING_CONTRACT_COST_ID"));
-                        costShipBO.set("CLOSED", 0);
+                        // 场景2:有SHIPPING_CONTRACT_COST_ID,先查询
+                        costShipBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_COST", shippingContractCostId);
+                        if (costShipBO == null) {
+                            // 查询结果为空,仍创建新流程和BO
+                            costShipProcessIns = SDK.getProcessAPI().createBOProcessInstance("obj_87c6ef75d18f44cc8e85d3d4e818c303",
+                                    processExecutionContext.getUserContext().getUID(), "合同产品-生成运费成本");
+                            costShipBO = new BO();
+                            costShipBO.setBindId(costShipProcessIns.getId());
+                        } else {
+                            // 查询结果不为空,重置CLOSED状态
+                            costShipBO.set("CLOSED", 0);
+                        }
                     }
 
                     costShipBO.set("PRODUCT_ID", null);
@@ -268,11 +283,33 @@ public class costProductShipFormAfterSave extends ExecuteListener {
 
                 }
                 conn.commit();
-            } catch (Exception e) {
-                conn.rollback();
+            }catch (Exception e) {
+                // 1. 回滚事务(保持原有逻辑)
+                if (conn != null) {
+                    try {
+                        conn.rollback();
+                    } catch (SQLException rollbackEx) {
+                        // 打印回滚失败日志
+                        System.err.println("事务回滚失败:" + rollbackEx.getMessage());
+                        rollbackEx.printStackTrace();
+                    }
+                }
+
+                // 2. 打印详细异常信息(关键:输出异常类型、消息、堆栈,以及关键业务参数)
+                System.err.println("===== 库存转移异常详情 =====");
+                System.err.println("异常类型:" + e.getClass().getName());
+                System.err.println("异常消息:" + e.getMessage());
+                System.err.println("关键业务参数:");
+                System.err.println("  产品ID:" + (productBO != null ? productBO.getString("PRODUCT_ID") : "null"));
+                System.err.println("  配送数量:" + (productBO != null ? productBO.get("QUANTITY") : "null"));
+                System.err.println("  仓库ID:" + (productBO != null ? productBO.get("WAREHOUSE_ID") : "null"));
+                System.err.println("  产品序列号:" + (productBO != null ? productBO.getString("SHIPPING_SN") : "null"));
+                System.err.println("==========================");
                 e.printStackTrace();
-                throw new BPMNError("550", "库存转移失败");
-            } finally {
+
+                // 3. 抛出兜底异常(保持原有逻辑,可补充具体异常消息)
+                throw new BPMNError("550", "库存转移失败:" + e.getMessage());
+            }finally {
                 DBSql.close(conn);
             }
         }

+ 71 - 9
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/controller/IVTController.java

@@ -14,6 +14,7 @@ import com.actionsoft.sdk.local.SDK;
 import com.alibaba.fastjson.JSONObject;
 import com.awspaas.user.apps.donenow_ivt.constant.IVTConstant;
 import com.awspaas.user.apps.donenow_ivt.utils.BigDecimalUtil;
+import com.ibm.icu.math.BigDecimal;
 import me.chanjar.weixin.common.util.StringUtils;
 
 import java.sql.Connection;
@@ -164,7 +165,43 @@ public class IVTController extends BaseController {
         return success("");
     }
 
+    @Mapping("com.awspaas.user.apps.donenow_ivt.queryExistPurchasereceive")
+    public String queryExistPurchasereceive(String ids, String bindId, UserContext uc) {
+        // 处理入参:优先用bindId查询采购项ID
+        String pureIds = "";
+        if (StringUtils.isNotBlank(bindId)) {
+            // 核心:通过bindId获取关联的采购项ID(和创建接口逻辑一致)
+            pureIds = DBSql.getString("SELECT GROUP_CONCAT(ID) from bo_eu_dnivt_order_product WHERE BINDID=?", new Object[]{bindId});
+        } else if (StringUtils.isNotBlank(ids)) {
+            pureIds = ids.trim();
+            if (pureIds.endsWith(",")) {
+                pureIds = pureIds.substring(0, pureIds.length() - 1);
+            }
+        } else {
+            return "{\"code\":-1,\"msg\":\"请传入bindId或ids\"}";
+        }
+
+        if (StringUtils.isBlank(pureIds)) {
+            return "{\"code\":-1,\"msg\":\"无已存在的待接收接收单\"}";
+        }
+
+        String quotedIds = "'" + pureIds.replace(",", "','") + "'";
+        String checkSql = "SELECT DISTINCT s.BINDID FROM BO_EU_DNIVT_RECEIVE_SUB s " +
+                "WHERE s.ORDER_PRODUCT_ID IN (" + quotedIds + ") ";
+        String existBindId = DBSql.getString(checkSql, new Object[]{});
 
+        if (StringUtils.isNotBlank(existBindId)) {
+            String url = SDK.getFormAPI().getFormURL("", uc.getSessionId(), existBindId, "", 1, "", "", "");
+            url = SDK.getPortalAPI().getPortalUrl() + "/r" + url.substring(1);
+            return "{\"code\":0,\"msg\":\"操作成功\",\"data\":\"" + url + "\"}";
+        } else {
+            return "{\"code\":-1,\"msg\":\"无已存在的待接收接收单\"}";
+        }
+    }
+    /**
+     *
+     *采购项接收
+     */
     /**
      *
      *采购项接收
@@ -175,7 +212,10 @@ public class IVTController extends BaseController {
         System.out.print("bindId:" + bindId);
 
         if (StringUtils.isNotBlank(ids)) {
-            ids = ids.substring(0, ids.length() - 1);
+            ids = ids.trim();
+            if (ids.endsWith(",")) {
+                ids = ids.substring(0, ids.length() - 1);
+            }
         } else if (StringUtils.isNotBlank(bindId)) {
             ids = DBSql.getString("SELECT GROUP_CONCAT(ID) from bo_eu_dnivt_order_product WHERE BINDID=?", new Object[]{bindId});
         } else {
@@ -220,30 +260,50 @@ public class IVTController extends BaseController {
         if (maps.size() == 0) {
             return fail("请检查采购订单是否未审批!");
         }
-        ProcessInstance createBOProcessInstance = SDK.getProcessAPI().createBOProcessInstance(IVTConstant.obj_3121af9039dc454aa776f9bdadf6b239, uc.getUID(), "");
-        //校验是否是同一个采购订单
+
+        // ========== 关键修改1:获取采购订单号 ==========
+        String purchaseOrderNo = null;
         Set<String> set = new HashSet<String>();
-        List<BO> list = new ArrayList<BO>();
         for (RowMap map : maps) {
             if (StringUtils.isNotBlank(map.getString("PURCHASE_ORDER_NO")) && StringUtils.isNotBlank(map.getString("PURCHASE_ORDER_NO").trim())) {
                 set.add(map.getString("PURCHASE_ORDER_NO"));
+                purchaseOrderNo = map.getString("PURCHASE_ORDER_NO"); // 提取采购订单号
             }
-
         }
         if (set.size() > 1) {
             System.out.println("setsetset:" + set);
-
             return fail("一次只能接收同一个采购订单的采购项");
         }
-        for (RowMap orgMap : maps) {
 
-            System.out.println("map:" + orgMap);
+        // ========== 关键修改2:查询是否已有采购接收主记录 ==========
+        BO existingMainBO = null;
+        if (StringUtils.isNotBlank(purchaseOrderNo)) {
+            // 查询条件:采购订单号匹配,可根据业务补充状态条件(比如排除已删除/已完成的记录)
+            existingMainBO = SDK.getBOAPI().query(IVTConstant.BO_EU_DNIVT_RECEIVE_MAIN)
+                    .addQuery("PURCHASE_ORDER_NO=", purchaseOrderNo)
+                    // 可选:添加状态过滤,比如 .addQuery("STATUS!=", "已完成")
+                    .detail();
+        }
+
+        // ========== 关键修改3:有则返回已有记录的URL,无则创建新记录 ==========
+        if (existingMainBO != null) {
+            // 获取已有记录的流程实例ID,生成打开URL
+            String processInstanceId = existingMainBO.getBindId();
+            String url = SDK.getFormAPI().getFormURL("", uc.getSessionId(), processInstanceId, "", 1, "", "", "");
+            url = SDK.getPortalAPI().getPortalUrl() + "/r" + url.substring(1);
+            return success(url); // 直接返回已有记录的URL
+        }
 
+        // 原创建逻辑:无已有记录时才执行
+        ProcessInstance createBOProcessInstance = SDK.getProcessAPI().createBOProcessInstance(IVTConstant.obj_3121af9039dc454aa776f9bdadf6b239, uc.getUID(), "");
+
+        List<BO> list = new ArrayList<BO>();
+        for (RowMap orgMap : maps) {
+            System.out.println("map:" + orgMap);
             Map<String, Object> map = convertKeysToUppercase(orgMap);
 
             //采购数量不能为空,也不能小于0
             Object purchaseQuantity = map.get("QUANTITY");
-
             System.out.println("purchaseQuantity:" + purchaseQuantity);
             if (purchaseQuantity == null || StringUtils.isBlank(purchaseQuantity.toString()) || Double.parseDouble(purchaseQuantity.toString()) <= 0) {
                 continue;
@@ -284,12 +344,14 @@ public class IVTController extends BaseController {
         if (list.size() == 0) {
             return fail("采购订单项都已经接收完毕");
         }
+
         //采购接收主表添加数据
         RowMap rowMap = maps.get(0);
         BO detail = SDK.getBOAPI().query(IVTConstant.BO_EU_DNIVT_ORDER).addQuery("PURCHASE_ORDER_NO=", rowMap.getString("purchase_order_no")).detail();
         if (null == detail) {
             return fail("未找到对应的订单");
         }
+
         //主表数据
         BO bo = new BO();
         bo.setBindId(createBOProcessInstance.getId());

+ 74 - 0
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/controller/caiController.java

@@ -9,6 +9,7 @@ import com.actionsoft.bpms.server.bind.annotation.Controller;
 import com.actionsoft.bpms.server.bind.annotation.Mapping;
 import com.actionsoft.bpms.util.DBSql;
 import com.actionsoft.sdk.local.SDK;
+import com.awspaas.user.apps.donenow_ivt.constant.IVTConstant;
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.*;
@@ -421,5 +422,78 @@ public class caiController {
         return responseObject;
     }
 
+    @Mapping(value = "com.awspaas.user.apps.donenow_ivt.checkDeliveryTimeRequired")
+    public ResponseObject checkDeliveryTimeRequired(UserContext uc, String purchaseOrderId) {
+        if (StringUtils.isBlank(purchaseOrderId)) {
+            return ResponseObject.newErrResponse("采购订单ID不能为空");
+        }
+
+        String countSql = "select count(1) from `bo_eu_dnivt_order_product` where order_id = ?";
+        String countStr = DBSql.getString(countSql, new Object[]{purchaseOrderId});
+        if (StringUtils.isBlank(countStr) || "0".equals(countStr.trim())) {
+            ResponseObject responseObject = ResponseObject.newOkResponse();
+            responseObject.put("message", "未找到ORDER_ID为【" + purchaseOrderId + "】的采购项信息");
+            responseObject.put("deliveryTimeRequired", false);
+            responseObject.setData(Collections.emptyList());
+            return responseObject;
+        }
+
+        boolean deliveryTimeRequired = false;
+        String errorMsg = "";
+
+        String productSql = "select CONTRACT_COST_ID from `bo_eu_dnivt_order_product` where order_id = ?";
+        List<String> contractCostIdList = new ArrayList<>();
+        String costIdSql = "select GROUP_CONCAT(CONTRACT_COST_ID) from `bo_eu_dnivt_order_product` where order_id = ?";
+        String costIdsStr = DBSql.getString(costIdSql, new Object[]{purchaseOrderId});
+        if (StringUtils.isNotBlank(costIdsStr)) {
+            String[] costIdArray = costIdsStr.split(",");
+            for (String costId : costIdArray) {
+                if (StringUtils.isNotBlank(costId)) {
+                    contractCostIdList.add(costId.trim());
+                }
+            }
+        }
+
+        for (String contractCostId : contractCostIdList) {
+            if (StringUtils.isBlank(contractCostId)) {
+                deliveryTimeRequired = true;
+                errorMsg = "存在成本ID为空的采购项,配送日期必填";
+                break;
+            }
+
+            String serviceSql = "select IS_SERVICE_PRODUCT from `bo_eu_dnctt_contract_cost` where ID = ?";
+            String isServiceProduct = DBSql.getString(serviceSql, new Object[]{contractCostId});
+
+            if (StringUtils.isBlank(isServiceProduct)) {
+                deliveryTimeRequired = true;
+                errorMsg = "成本ID【" + contractCostId + "】无对应合同产品,配送日期必填";
+                break;
+            }
+
+            if (!"1".equals(isServiceProduct.trim())) {
+                deliveryTimeRequired = true;
+                errorMsg = "存在非服务创建的合同产品(成本ID:" + contractCostId + "),配送日期必填";
+                break;
+            }
+        }
+
+        List<Map<String, Object>> resultList = new ArrayList<>();
+        Map<String, Object> checkInfo = new HashMap<>();
+        checkInfo.put("purchaseOrderId", purchaseOrderId);
+        checkInfo.put("deliveryTimeRequired", deliveryTimeRequired);
+        checkInfo.put("message", deliveryTimeRequired ? errorMsg : "所有采购项均符合要求,配送日期非必填");
+        resultList.add(checkInfo);
+
+        ResponseObject responseObject = ResponseObject.newOkResponse();
+        if (deliveryTimeRequired) {
+            responseObject.put("message", errorMsg);
+        } else {
+            responseObject.put("message", "未找到需要必填配送日期的场景,配送日期非必填");
+        }
+        responseObject.setData(resultList);
+        return responseObject;
+    }
+
+
 
 }

+ 12 - 7
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/controller/ivtOrderController.java

@@ -650,7 +650,7 @@ public class ivtOrderController {
 
         return createPurchaseOrder(uc, costIds);
     }
-456
+
 
     @Mapping(value = "com.awspaas.user.apps.donenow_ivt.contract_serviceOrder_exec", session = false, noSessionEvaluate = "无安全隐患", noSessionReason = "批量生产")
     public String contractServicExec() throws SQLException {
@@ -836,15 +836,20 @@ public class ivtOrderController {
 
                 String taxCategoryId = null;
                 //增值税发票,选择是时,才需要展示税率
-                if (StringUtils.isNotBlank(cost.getString("SERVICE_ID"))) {
-                    RowMap serviceMap = DBSql.getMap("select PURCHASE_TAX_CATEGORY_ID,VAT_TAX from BO_EU_DNCTT_CONTRACT_SERVICE where ID=?", new Object[]{cost.getString("SERVICE_ID")});
-                    if (serviceMap.getString("VAT_TAX").equals("1")) {
-                        taxCategoryId = serviceMap.getString("PURCHASE_TAX_CATEGORY_ID");
-                    } else {
-                        taxCategoryId = zeroTaxTaxCateId;
+                if(StringUtils.isNotBlank(cost.getString("IS_SERVICE_PRODUCT")) && "1".equals(cost.getString("IS_SERVICE_PRODUCT"))){
+                    if (StringUtils.isNotBlank(cost.getString("SERVICE_ID"))) {
+                        RowMap serviceMap = DBSql.getMap("select PURCHASE_TAX_CATEGORY_ID,VAT_TAX from BO_EU_DNCTT_CONTRACT_SERVICE where ID=?", new Object[]{cost.getString("SERVICE_ID")});
+                        if (serviceMap.getString("VAT_TAX").equals("1")) {
+                            taxCategoryId = serviceMap.getString("PURCHASE_TAX_CATEGORY_ID");
+                        } else {
+                            taxCategoryId = zeroTaxTaxCateId;
+                        }
                     }
+                }else {
+                    taxCategoryId = cost.getString("TAX_CATEGORY_ID");
                 }
 
+
                 ivtLogger.info("taxCategoryId--- " + cost.getString("SERVICE_ID"));
                 ivtLogger.info("taxCategoryId--- " + taxCategoryId);
                 BigDecimal taxRate = taxRateMap.get(taxCategoryId);

+ 3 - 2
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/event/FormAfterSaveEvent.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
 import org.apache.commons.lang3.StringUtils;
 
 import com.actionsoft.bpms.bo.engine.BO;
@@ -39,7 +40,7 @@ import com.awspaas.user.apps.donenow_ivt.utils.BigDecimalUtil;
     	DoWorkThread thread=new DoWorkThread(process);
     	thread.start();
     }
-    
-   
+
+
     
   }