فهرست منبع

创建采购订单bug修改

zhangyao 4 ماه پیش
والد
کامیت
304bc2ef2b

BIN
com.awspaas.user.apps.donenow_ctt/lib/com.awspaas.user.apps.donenow_ctt.jar


+ 2 - 1
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/contractCreateFormAfterSave.java

@@ -41,7 +41,8 @@ public class contractCreateFormAfterSave extends ExecuteListener {
         if (boName.equals("BO_EU_DNCTT_CONTRACT_SERVICE") && processExecutionContext.getProcessInstance().getProcessDefId().equals("obj_4bac3fd23814406c8d224ef2094ac274")) {
             System.out.println("保存合同服务--BO_EU_DNCTT_CONTRACT_SERVICE");
             BO formData = (BO) processExecutionContext.getParameter(ListenerConst.FORM_EVENT_PARAM_FORMDATA);
-            formData = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", formData.getId());
+            if (formData != null)
+                formData = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", formData.getId());
             if (formData != null) {
                 Connection conn = null;
                 try {

+ 65 - 41
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractService.java

@@ -78,38 +78,37 @@ public class contractService {
                 String PERIOD_TYPE = contractBO.getString("PERIOD_TYPE");//合同周期类型
                 Integer OCCURRENCES = contractBO.get("OCCURRENCES", Integer.class);
                 Date START_DATE = contractBO.get("START_DATE", Date.class);
+                Date END_DATE = contractBO.get("END_DATE", Date.class);
 
                 //通过 合同周期个数和合同周期类型计算结束日期
-                if (OCCURRENCES != null && OCCURRENCES > 0) {
-                    Date END_DATE = null;
-                    // 使用 Calendar 进行日期操作
-                    Calendar calendar = Calendar.getInstance();
-                    calendar.setTime(START_DATE);
-                    if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_HALFYEAR)) {
-                        calendar.add(Calendar.MONTH, OCCURRENCES * 6);
-                        calendar.add(Calendar.DAY_OF_MONTH, -1);
-                        END_DATE = calendar.getTime();
-                    } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_MONTH)) {
-                        calendar.add(Calendar.MONTH, OCCURRENCES);
-                        calendar.add(Calendar.DAY_OF_MONTH, -1);
-                        END_DATE = calendar.getTime();
-                    } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_QUARTER)) {
-                        calendar.add(Calendar.MONTH, OCCURRENCES * 3);
-                        calendar.add(Calendar.DAY_OF_MONTH, -1);
-                        END_DATE = calendar.getTime();
-                    } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_YEAR)) {
-                        calendar.add(Calendar.MONTH, OCCURRENCES * 12);
-                        calendar.add(Calendar.DAY_OF_MONTH, -1);
-                        END_DATE = calendar.getTime();
-                    } else {
-                        resultDto.put("success", false);
-                        resultDto.put("msg", "周期类型输入错误!");
-                        return resultDto;
+                if (END_DATE == null || END_DATE.before(START_DATE))
+                    if (OCCURRENCES != null && OCCURRENCES > 0) {
+                        // 使用 Calendar 进行日期操作
+                        Calendar calendar = Calendar.getInstance();
+                        calendar.setTime(START_DATE);
+                        if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_HALFYEAR)) {
+                            calendar.add(Calendar.MONTH, OCCURRENCES * 6);
+                            calendar.add(Calendar.DAY_OF_MONTH, -1);
+                            END_DATE = calendar.getTime();
+                        } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_MONTH)) {
+                            calendar.add(Calendar.MONTH, OCCURRENCES);
+                            calendar.add(Calendar.DAY_OF_MONTH, -1);
+                            END_DATE = calendar.getTime();
+                        } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_QUARTER)) {
+                            calendar.add(Calendar.MONTH, OCCURRENCES * 3);
+                            calendar.add(Calendar.DAY_OF_MONTH, -1);
+                            END_DATE = calendar.getTime();
+                        } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_YEAR)) {
+                            calendar.add(Calendar.MONTH, OCCURRENCES * 12);
+                            calendar.add(Calendar.DAY_OF_MONTH, -1);
+                            END_DATE = calendar.getTime();
+                        } else {
+                            resultDto.put("success", false);
+                            resultDto.put("msg", "周期类型输入错误!");
+                            return resultDto;
+                        }
+                        contractBO.set("END_DATE", END_DATE);
                     }
-
-                    contractBO.set("END_DATE", END_DATE);
-
-                }
             }
 
             contractBO.set("ADJUST_SETUP_FEE", contractBO.get("SETUP_FEE"));
@@ -150,7 +149,7 @@ public class contractService {
             }
 
             //更新合同产品上面的客户ID
-            DBSql.update("update BO_EU_DNCTT_CONTRACT_COST set ACCOUNT_ID=?,BILL_ACCOUNT_ID where CONTRACT_ID=?", new Object[]{dto.getString("ACCOUNT_ID"), dto.getString("BILL_ACCOUNT_ID"), dto.getString("ID")});
+            DBSql.update("update BO_EU_DNCTT_CONTRACT_COST set ACCOUNT_ID=?,BILL_ACCOUNT_ID=? where CONTRACT_ID=?", new Object[]{dto.getString("ACCOUNT_ID"), dto.getString("BILL_ACCOUNT_ID"), dto.getString("ID")});
 
 
             if (TYPE_ID.equals(cttConstant.CONTRACT_TYPE_SERVICE)) // 如果是服务合同
@@ -634,7 +633,7 @@ public class contractService {
             conn = DBSql.open();
             conn.setAutoCommit(false);
             //获取服务列表
-            List<BO> serviceList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").connection(conn).addQuery("BINDID=", contract.get("BINDID")).list();
+            List<BO> serviceList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").connection(conn).addQuery("BINDID=", contract.get("BINDID")).list();//需要采购
 
             for (BO service : serviceList) {
 
@@ -645,23 +644,46 @@ public class contractService {
                     for (String serviceID : serviceIDS.split(",")) {
                         String contractCostId = DBSql.getString(conn, "select ID from BO_EU_DNCTT_CONTRACT_COST where CONTRACT_ID=? and SERVICE_ID=? and PRODUCT_ID in(select PRODUCT_ID from BO_EU_DNIVT_SERVICE where ID=?)", new Object[]{contract.getString("ID"), service.getString("ID"), serviceID});
 
+                        String NEED_PURCHASE = service.getString("NEED_PURCHASE");
+                        if (NEED_PURCHASE.equals("1")) {
+                            Map<String, String> contractCost = new HashMap<String, String>();
+                            contractCost.put("ID", contractCostId);
+                            contractCost.put("SERVICE_ID", service.getString("ID"));
+                            contractCost.put("serviceID", serviceID);
+                            contractCost.put("CONTRACT_ID", contract.getString("ID"));
+                            contractCost.put("QUANTITY", service.getString("QUANTITY"));
+                            PRODUCT_ID = AddContractServiceProduct(uc, conn, contractCost);
+                        } else {
+                            //是否 删除 contractCostId  没有采购 没有拣货时可删除
+                            if (DBSql.getInt(conn, "select count(*) from BO_EU_DNCTT_CONTRACT_COST_PRODUCT where CONTRACT_COST_ID=?", new Object[]{contractCostId}) == 0 && DBSql.getInt(conn, "select count(*) from BO_EU_DNIVT_ORDER_PRODUCT where CONTRACT_COST_ID=?", new Object[]{contractCostId}) == 0) {
+                                String contractCostBINDId = DBSql.getString(conn, "select BINDID from BO_EU_DNCTT_CONTRACT_COST where ID=?", new Object[]{contractCostId});
+                                SDK.getProcessAPI().deleteById(contractCostBINDId, uc.getUID());
+                                DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_COST where ID=?", new Object[]{contractCostId});
+                            }
+                        }
+
+                    }
+                } else {
+                    String contractCostId = DBSql.getString(conn, "select ID from BO_EU_DNCTT_CONTRACT_COST where CONTRACT_ID=? and SERVICE_ID=?", new Object[]{contract.getString("ID"), service.getString("ID")});
+                    String NEED_PURCHASE = service.getString("NEED_PURCHASE");
+                    if (NEED_PURCHASE.equals("1")) {
                         Map<String, String> contractCost = new HashMap<String, String>();
                         contractCost.put("ID", contractCostId);
                         contractCost.put("SERVICE_ID", service.getString("ID"));
-                        contractCost.put("serviceID", serviceID);
+                        contractCost.put("serviceID", service.getString("OBJECT_ID"));
                         contractCost.put("CONTRACT_ID", contract.getString("ID"));
                         contractCost.put("QUANTITY", service.getString("QUANTITY"));
                         PRODUCT_ID = AddContractServiceProduct(uc, conn, contractCost);
+                    } else {
+                        //是否 删除 contractCostId
+                        //是否 删除 contractCostId  没有采购 没有拣货时可删除
+                        if (DBSql.getInt(conn, "select count(*) from BO_EU_DNCTT_CONTRACT_COST_PRODUCT where CONTRACT_COST_ID=?", new Object[]{contractCostId}) == 0 && DBSql.getInt(conn, "select count(*) from BO_EU_DNIVT_ORDER_PRODUCT where CONTRACT_COST_ID=?", new Object[]{contractCostId}) == 0) {
+                            String contractCostBINDId = DBSql.getString(conn, "select BINDID from BO_EU_DNCTT_CONTRACT_COST where ID=?", new Object[]{contractCostId});
+                            SDK.getProcessAPI().deleteById(contractCostBINDId, uc.getUID());
+                            DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_COST where ID=?", new Object[]{contractCostId});
+                        }
+
                     }
-                } else {
-                    String contractCostId = DBSql.getString(conn, "select ID from BO_EU_DNCTT_CONTRACT_COST where CONTRACT_ID=? and SERVICE_ID=?", new Object[]{contract.getString("ID"), service.getString("ID")});
-                    Map<String, String> contractCost = new HashMap<String, String>();
-                    contractCost.put("ID", contractCostId);
-                    contractCost.put("SERVICE_ID", service.getString("ID"));
-                    contractCost.put("serviceID", service.getString("OBJECT_ID"));
-                    contractCost.put("CONTRACT_ID", contract.getString("ID"));
-                    contractCost.put("QUANTITY", service.getString("QUANTITY"));
-                    PRODUCT_ID = AddContractServiceProduct(uc, conn, contractCost);
                 }
 
             }
@@ -698,6 +720,8 @@ public class contractService {
         }
         contractCost.set("CONTRACT_ID", service.get("CONTRACT_ID"));
         contractCost.set("SERVICE_ID", service.get("SERVICE_ID"));
+        contractCost.set("QUANTITY", service.get("QUANTITY"));
+
         contractCost.set("PRODUCT_ID", DBSql.getString(conn, "select PRODUCT_ID from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.get("serviceID")}));
 
         if (StringUtils.isNotBlank(contractCost.getString("PRODUCT_ID"))) {

BIN
com.awspaas.user.apps.donenow_ivt/lib/com.awspaas.user.apps.donenow_ivt.jar


+ 18 - 11
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/controller/ivtOrderController.java

@@ -616,16 +616,15 @@ public class ivtOrderController {
             sql = sql.substring(0, sql.length() - 1) + ")";
             List<RowMap> costList = DBSql.getMaps(sql, Arrays.stream(costIdArr).toArray());
 
-            ProcessInstance processInstance = SDK.getProcessAPI().createProcessInstance("obj_795cb3601f3a4b919b5896cf5b076a3a", uc.getUID(), "采购订单");
 
             BO purchaseOrder = new BO();//采购单
-            purchaseOrder.setBindId(processInstance.getId());
+
             purchaseOrder.set("SUBMIT_TIME", getCurrentDateTime());//提交时间
             purchaseOrder.set("SUBMITTED_RESOURCE_ID", uc.getUID());//提交人
 
             Set<String> PURCHASE_ACCOUNT_ID = new HashSet<>();   //采购客户
             Set<String> VENDOR_ACCOUNT_ID = new HashSet<>();  //   供应商
-
+            int i = 0;
             for (RowMap cost : costList) {
                 String account_id = cost.getString("ACCOUNT_ID");
                 if (StringUtils.isNotBlank(account_id)) {
@@ -644,13 +643,25 @@ public class ivtOrderController {
                 if (StringUtils.isNotBlank(vendor_id)) {
                     VENDOR_ACCOUNT_ID.add(vendor_id);
                 }
+
+                //采购数量需要扣除拣货数量
+                int purchase_quantity = cost.getInt("QUANTITY") - DBSql.getInt("select sum(QUANTITY) AS QU from BO_EU_DNCTT_CONTRACT_COST_PRODUCT where CONTRACT_COST_ID=? and CLOSED=0", new Object[]{cost.getString("ID")});
+                if (purchase_quantity <= 0)
+                    continue;
+
+                cost.put("PURCHASE_QUANTITY", purchase_quantity);
+                i++;
             }
 
+            if (i < 1)
+                return ResponseObject.newErrResponse("没有可处理的采购订单");
+
+            ProcessInstance processInstance = SDK.getProcessAPI().createProcessInstance("obj_795cb3601f3a4b919b5896cf5b076a3a", uc.getUID(), "采购订单");
+            purchaseOrder.setBindId(processInstance.getId());
             if (PURCHASE_ACCOUNT_ID.size() == 1)
-                purchaseOrder.set("PURCHASE_ACCOUNT_ID", PURCHASE_ACCOUNT_ID.stream().findFirst());
+                purchaseOrder.set("PURCHASE_ACCOUNT_ID", PURCHASE_ACCOUNT_ID.stream().findFirst().get());
             if (VENDOR_ACCOUNT_ID.size() == 1)
-                purchaseOrder.set("VENDOR_ACCOUNT_ID", VENDOR_ACCOUNT_ID.stream().findFirst());
-
+                purchaseOrder.set("VENDOR_ACCOUNT_ID", VENDOR_ACCOUNT_ID.stream().findFirst().get());
 
             SDK.getBOAPI().createDataBO("BO_EU_DNIVT_ORDER", purchaseOrder, uc, conn);
             //采购产品
@@ -658,15 +669,11 @@ public class ivtOrderController {
                 BO purchaseOrderProduct = new BO();
                 purchaseOrderProduct.setBindId(processInstance.getId());
 
-                //采购数量需要扣除拣货数量
-                int purchase_quantity = cost.getInt("QUANTITY") - DBSql.getInt("select sum(QUANTITY) AS QU from BO_EU_DNCTT_CONTRACT_COST_PRODUCT where CONTRACT_COST_ID=? and CLOSED=0", new Object[]{cost.getString("ID")});
-                if (purchase_quantity <= 0)
-                    continue;
 
                 purchaseOrderProduct.set("PURCHASE_ACCOUNT_ID", cost.getString("ACCOUNT_ID"));
                 purchaseOrderProduct.set("NAME", cost.getString("NAME"));
                 purchaseOrderProduct.set("PRODUCT_ID", cost.getString("PRODUCT_ID"));
-                purchaseOrderProduct.set("QUANTITY", purchase_quantity);
+                purchaseOrderProduct.set("QUANTITY", cost.getString("PURCHASE_QUANTITY"));
                 purchaseOrderProduct.set("UNIT_COST", cost.getString("UNIT_COST"));
                 purchaseOrderProduct.set("TAX_CATEGORY_ID", cost.getString("TAX_CATEGORY_ID"));
                 purchaseOrderProduct.set("WAREHOUSE_ID", DBSql.getString("SELECT ID FROM bo_eu_dnivt_warehouse WHERE CATE_ID=2 AND ORGID=? ", new Object[]{uc.getCompanyModel().getId()}));//采购仓库 固定仓库

BIN
com.awspaas.user.apps.donenow_sys/lib/com.awspaas.user.apps.donenow_sys.jar