Ver código fonte

产品保存后,创建关联的服务

zhangyao 3 meses atrás
pai
commit
637f76287f

+ 9 - 9
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractApproveController.java

@@ -352,25 +352,21 @@ public class contractApproveController {
             if (thisTaxCate != null)
                 thisDed.set("TAX_CATEGORY_ID", thisTaxCate.getString("OID"));
 
-
-            thisDed.set("TAX_DOLLARS", thisWorkEntry.getDouble("DOLLARS") * (1 - 1 / (1 + tax_rate)));
-
+            //是否免税
+            if ((thisAccount == null || !thisAccount.getString("IS_TAX_EXEMPT").equals("1")) && tax_rate > 0) {
+                thisDed.set("TAX_DOLLARS", thisWorkEntry.getDouble("DOLLARS") * (1 - 1 / (1 + tax_rate)));
+            }
             if (StringUtils.isBlank(thisDed.getString("BILL_ACCOUNT_ID")) && StringUtils.isNotBlank(thisDed.getString("ACCOUNT_ID")))
                 thisDed.set("BILL_ACCOUNT_ID", thisDed.get("ACCOUNT_ID"));
 
             dn.recordFormChanges.record(uc, thisDed, "审批提交工时");
             SDK.getBOAPI().createDataBO("BO_EU_DNCRM_ACCOUNT_DEDUCTION", thisDed, uc);
 
-
             oldEntry.set("APPROVE_AND_POST_DATE", thisDate);
             oldEntry.set("APPROVE_AND_POST_USER_ID", uc.getUID());
             dn.recordFormChanges.record(uc, oldEntry, "审批提交工时");
             SDK.getBOAPI().update("BO_EU_DNSDK_WORK_ENTRY", oldEntry);
-
-
         }
-
-
         return ResponseObject.newOkResponse();
     }
 
@@ -908,7 +904,11 @@ public class contractApproveController {
             thisDed.set("TAX_CATEGORY_NAME", thisTaxCate == null ? null : thisTaxCate.getString("NAME"));
             thisDed.set("TAX_REGION_NAME", thisTaxRegion == null ? null : thisTaxRegion.getString("NAME"));
             thisDed.set("EFFECTIVE_TAX_RATE", tax_rate);
-            thisDed.set("TAX_DOLLARS", extended_price * (1 - 1 / (1 + tax_rate)));
+
+            if ((thisAccount == null || !thisAccount.getString("IS_TAX_EXEMPT").equals("1")) && tax_rate > 0) {
+                thisDed.set("TAX_DOLLARS", extended_price * (1 - 1 / (1 + tax_rate)));
+            }
+
             if (thisTaxCate != null)
                 thisDed.set("TAX_CATEGORY_ID", thisTaxCate.getString("OID"));
 

+ 14 - 1
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractCostController.java

@@ -20,6 +20,20 @@ import java.util.List;
 public class contractCostController {
     private static final Logger logger = SDK.getLogAPI().getLogger(contractCostController.class);//记录日志
 
+    /**
+     *  合同服务拣货单
+     * @param uc
+     * @param contractServiceId
+     * @param warehouseProductId
+     * @return
+     * @throws SQLException
+     */
+    @Mapping(value = "com.awspaas.user.apps.donenow_ctt.costServicepick")
+    public ResponseObject costServicepick(UserContext uc, String contractServiceId, String warehouseProductId) throws SQLException {
+        String contractCostId = DBSql.getString("SELECT ID FROM BO_EU_DNCTT_CONTRACT_COST WHERE IS_SERVICE_PRODUCT=1 AND SERVICE_ID=?", new Object[]{contractServiceId});
+        return costPick(uc, contractCostId, warehouseProductId);
+    }
+
     /**
      * 合同产品拣货单
      * @param uc
@@ -33,7 +47,6 @@ public class contractCostController {
         //创建拣货单
 
         BO newBO = new BO();
-
         newBO.set("CONTRACT_COST_ID", contractCostId);
         newBO.set("WAREHOUSE_PRODUCT_ID", warehouseProductId);
 

+ 15 - 1
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractCreateController.java

@@ -152,6 +152,20 @@ public class contractCreateController {
 
             updateContractCLOSED(uc, "BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", " CONTRACT_SERVICE_PERIOD_ID IN (SELECT ID FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE (CONTRACT_ID=:CONTRACT_ID OR BINDID=:BINDID))  ", params, conn);
 
+            BO contractBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT", id);
+            if (contractBO != null) {
+                contractBO.set("CLOSED", 1);
+                dn.recordFormChanges.record(uc, contractBO, "删除合同");
+                SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT", contractBO, conn);
+            }
+            if (contractBO == null || contractBO.getBindId().equals(bindid) == false) {
+                contractBO = SDK.getBOAPI().getByProcess("BO_EU_DNCTT_CONTRACT", bindid);
+                if (contractBO != null) {
+                    contractBO.set("CLOSED", 1);
+                    dn.recordFormChanges.record(uc, contractBO, "删除合同");
+                    SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT", contractBO, conn);
+                }
+            }
 
             conn.commit();
         } catch (SQLException e) {
@@ -276,7 +290,7 @@ public class contractCreateController {
             DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where CONTRACT_ID=? and OBJECT_ID=? and CONTRACT_SERVICE_ID=?", new Object[]{service.get("CONTRACT_ID"), service.get("OBJECT_ID"), service.get("ID")});
 
 
-            DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE where  ID=?", new Object[]{ service.get("ID")});
+            DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE where  ID=?", new Object[]{service.get("ID")});
         }
 
 

+ 0 - 5
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/invoiceController.java

@@ -26,7 +26,6 @@ public class invoiceController {
         invoiceDealDto.setIds(accDeduIds);
         List<String> invoiceIds = InvoiceService.getInstance().processInvoice(uc, accDeduIds, invoiceDealDto, false);
 
-
         return ResponseObject.newOkResponse();
     }
 
@@ -41,11 +40,9 @@ public class invoiceController {
     public ResponseObject dealInvoice(UserContext uc, String accDeduIds,String startDate,String endDate) {
         InvoiceDealDto invoiceDealDto = new InvoiceDealDto();
         invoiceDealDto.setIds(accDeduIds);
-
         invoiceDealDto.setDateRangeFromStr(startDate);
         invoiceDealDto.setDateRangeToStr(endDate);
 
-
         List<String> invoiceIds = InvoiceService.getInstance().processInvoice(uc, accDeduIds, invoiceDealDto, true);
 
         return ResponseObject.newOkResponse();
@@ -63,8 +60,6 @@ public class invoiceController {
 
         InvoiceService.getInstance().invoiceUpdate(uc, invoiceIds, dealStatus);
 
-
-
         return ResponseObject.newOkResponse();
     }
 

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

@@ -88,18 +88,16 @@ public class contractCreateFormAfterSave extends ExecuteListener {
                     conn.setAutoCommit(false);
 
                     BO contractBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT", formData.getString("CONTRACT_ID"));
-                    formData.set("BINDID", contractBO.getBindId());
-                    SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE", formData);
+                   // formData.set("BINDID", contractBO.getBindId());
+                   // SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE", formData);
 
                     RowMap dto = new RowMap(contractBO.asMap());
                     contractService.getInstance().AddServiceServiceBundleOne(processExecutionContext.getUserContext(), conn, dto, formData);//保存合同
                     contractService.getInstance().AddContractServiceProduct(processExecutionContext.getUserContext(), dto,conn);//新增服务或者服务包--关联产品
                     conn.commit();
                 } catch (SQLException e) {
-
                     e.printStackTrace();
                     conn.rollback();
-
                 } finally {
                     if (conn != null)
                         DBSql.close(conn);

+ 12 - 1
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/InvoiceService.java

@@ -83,7 +83,7 @@ public class InvoiceService {
                 .filter(ded -> ded.get("BILL_ACCOUNT_ID") != null)
                 .collect(Collectors.groupingBy(ded -> ded.get("BILL_ACCOUNT_ID").toString()));
         if (customerDedMap.isEmpty())
-            return new ArrayList<>();
+            return null;
 
         // 4. 循环处理每个客户的发票(拆分「有无采购订单」逻辑)
         List<String> invoiceIds = new ArrayList<>();
@@ -358,6 +358,17 @@ public class InvoiceService {
 
                 SDK.getBOAPI().update("BO_EU_DNCTT_INVOICE", invoice);
             }
+
+
+            if (dealStatus.equals("作废发票")) {
+                List<BO> deductions = SDK.getBOAPI().query("BO_EU_DNCRM_ACCOUNT_DEDUCTION").addQuery("INVOICE_ID=", invoiceId).list();
+                for (BO deduction : deductions) {
+                    deduction.set("INVOICE_ID", null);
+                    deduction.set("INVOICE_LINE_ITEM_NO", 0);
+                    dn.recordFormChanges.record(uc, deduction, "作废发票");
+                    SDK.getBOAPI().update("BO_EU_DNCRM_ACCOUNT_DEDUCTION", deduction);
+                }
+            }
         }
         return true;
 

+ 21 - 11
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractService.java

@@ -821,6 +821,8 @@ public class contractService {
         contractCost.set("EXTENDED_PRICE", DBSql.getDouble(conn, "SELECT SUM(PERIOD_ADJUSTED_PRICE) as PRICE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID='" + service.get("SERVICE_ID") + "'", "PRICE") + DBSql.getDouble(conn, "SELECT SUM(ADJUST_PRORATED_PRICE_CHANGE) as PRICE FROM BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST WHERE CONTRACT_SERVICE_ID='" + service.get("SERVICE_ID") + "'", "PRICE"));
 
         if (contractCost.isNew()) {
+            //成本子类:合同成本
+            contractCost.set("SUB_CATE_ID", "1314");
             SDK.getBOAPI().create("BO_EU_DNCTT_CONTRACT_COST", contractCost, contractCost.getBindId(), uc.getUID(), conn);
         } else {
             SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_COST", contractCost, conn);
@@ -1215,7 +1217,7 @@ public class contractService {
                             costCodeId = DBSql.getString("SELECT COST_CODE_ID FROM BO_EU_DNIVT_SERVICE_BUNDLE WHERE ID = ?", new Object[]{bo.getString("OBJECT_ID")});
                         }
 
-                        Object taxCategoryId =DBSql.getString("select TAX_CATEGORY_ID from BO_EU_DND_COST_CODE where OID=? and ORGID=?", new Object[]{costCodeId, ORGID}); //SDK.getBOAPI().get("BO_EU_DND_COST_CODE", costCodeId, "TAX_CATEGORY_ID");
+                        Object taxCategoryId = DBSql.getString("select TAX_CATEGORY_ID from BO_EU_DND_COST_CODE where OID=? and ORGID=?", new Object[]{costCodeId, ORGID}); //SDK.getBOAPI().get("BO_EU_DND_COST_CODE", costCodeId, "TAX_CATEGORY_ID");
                         if (taxCategoryId != null) {
                             TAX_CATEGORY_ID = taxCategoryId.toString();
                         }
@@ -1255,9 +1257,15 @@ public class contractService {
                     }
                 }
 
-                //按照合同税率
-                if (SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", CONTRACT_SERVICE_ID, "IS_CTRTAX_APPLIED").equals("1")) {
-                    TAX_CATEGORY_ID = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT", CONTRACT_ID, "TAX_CATEGORY_ID").toString();
+
+                if (StringUtils.isNotBlank(CONTRACT_SERVICE_ID)) {
+                    //按照合同税率
+                    if (SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", CONTRACT_SERVICE_ID, "IS_CTRTAX_APPLIED").equals("1")) {
+                        TAX_CATEGORY_ID = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT", CONTRACT_ID, "TAX_CATEGORY_ID").toString();
+                    } else {
+                        //使用服务上面的税率
+                        TAX_CATEGORY_ID = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", CONTRACT_SERVICE_ID, "TAX_CATEGORY_ID").toString();
+                    }
                 }
 
                 RowMap ca = DBSql.getMap("select TAX_REGION_ID,IS_TAX_EXEMPT from BO_EU_DNCRM_ACCOUNT where ID=?", new Object[]{cad.get("ACCOUNT_ID")});
@@ -1285,10 +1293,10 @@ public class contractService {
 
                 // cad.set("EXTENDED_COST", tax_rate);
                 // cad.extended_cost = GetCost(id);
-                //是否免税
-                if (ca.getString("IS_TAX_EXEMPT").equals("1")==false) {
 
-                    double tax_dollars = cad.get("EXTENDED_PRICE", Double.class) - cad.get("EXTENDED_PRICE", Double.class) / (1 + tax_rate);//税额
+                //是否免税
+                if (!ca.getString("IS_TAX_EXEMPT").equals("1") && ca.get("EXTENDED_PRICE") != null && tax_rate > 0) {
+                    double tax_dollars = cad.get("EXTENDED_PRICE", Double.class) * (1 - 1 / (1 + tax_rate));//税额
                     cad.set("TAX_DOLLARS", tax_dollars);
                 }
 
@@ -1362,8 +1370,10 @@ public class contractService {
                     cad.set("EFFECTIVE_TAX_RATE", tax_rate);
 
                     cad.set("EXTENDED_PRICE", bo.get("DOLLARS"));
-                    if (DBSql.getInt("select COUNT(1) cnt from BO_EU_DNCRM_ACCOUNT WHERE ID=? AND IS_TAX_EXEMPT=1 ", new Object[]{cad.getString("ACCOUNT_ID")}) > 0) {
-                        double tax_dollars = cad.get("EXTENDED_PRICE", Double.class) - cad.get("EXTENDED_PRICE", Double.class) / (1 + tax_rate);//税额
+
+                    //是否免税
+                    if (tax_rate > 0 && cad.get("EXTENDED_PRICE") != null && DBSql.getInt("select COUNT(1) cnt from BO_EU_DNCRM_ACCOUNT WHERE ID=? AND IS_TAX_EXEMPT<>1 ", new Object[]{cad.getString("ACCOUNT_ID")}) > 0) {
+                        double tax_dollars = cad.get("EXTENDED_PRICE", Double.class) - (1 - 1 / (1 + tax_rate));//税额
                         cad.set("TAX_DOLLARS", tax_dollars);
                     }
 
@@ -1456,8 +1466,8 @@ public class contractService {
 
                 //不是 关联预付费合同
                 cad.set("EXTENDED_PRICE", ccc.get("EXTENDED_PRICE"));//总价
-                if (!ca.getString("IS_TAX_EXEMPT").equals("1")) {
-                    double tax_dollars = cad.get("EXTENDED_PRICE", Double.class) - cad.get("EXTENDED_PRICE", Double.class) / (1 + tax_rate);//税额
+                if (!ca.getString("IS_TAX_EXEMPT").equals("1") && tax_rate > 0 && cad.get("EXTENDED_PRICE") != null) {
+                    double tax_dollars = cad.get("EXTENDED_PRICE", Double.class) - (1 - 1 / (1 + tax_rate));//税额
                     cad.set("TAX_DOLLARS", tax_dollars);
                 }
 

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

@@ -639,7 +639,7 @@ public class ivtOrderController {
                 }
 
                 String PRODUCT_ID = cost.getString("PRODUCT_ID");
-                String vendor_id = DBSql.getString("select VENDOR_ACCOUNT_ID from BO_EU_DNIVT_PRODUCT_VENDOR where PRODUCT_ID=? or PRODUCT_ID in (select BINDID FROM BO_EU_DNIVT_PRODUCT WHERE ID=?)", new Object[]{PRODUCT_ID, PRODUCT_ID});
+                String vendor_id = DBSql.getString("select VENDOR_ACCOUNT_ID from BO_EU_DNIVT_PRODUCT_VENDOR where PRODUCT_ID=? or BINDID in (select BINDID FROM BO_EU_DNIVT_PRODUCT WHERE ID=?)", new Object[]{PRODUCT_ID, PRODUCT_ID});
 
                 if (StringUtils.isNotBlank(vendor_id)) {
                     VENDOR_ACCOUNT_ID.add(vendor_id);

+ 69 - 0
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/event/productFormSaveAfter.java

@@ -0,0 +1,69 @@
+package com.awspaas.user.apps.donenow_ivt.event;
+
+import com.actionsoft.bpms.bo.engine.BO;
+import com.actionsoft.bpms.bpmn.engine.core.delegate.ProcessExecutionContext;
+import com.actionsoft.bpms.bpmn.engine.listener.ExecuteListener;
+import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance;
+import com.actionsoft.bpms.commons.database.RowMap;
+import com.actionsoft.bpms.util.DBSql;
+import com.actionsoft.sdk.local.SDK;
+import org.apache.commons.lang3.StringUtils;
+
+public class productFormSaveAfter extends ExecuteListener {
+    private final String[] excludesArray = new String[]{"ID", "ORGID", "BINDID", "CREATEDATE", "CREATEUSER", "UPDATEDATE", "UPDATEUSER", "PROCESSDEFID", "ISEND"};
+
+    /**
+     * 产品保存后,创建关联的服务
+     * @param processExecutionContext
+     * @throws Exception
+     */
+    @Override
+    public void execute(ProcessExecutionContext processExecutionContext) throws Exception {
+        // 获取流程实例ID
+        String processId = processExecutionContext.getProcessInstance().getId();
+        // 产品信息
+        RowMap rowMap = DBSql.getMap("select * from BO_EU_DNIVT_PRODUCT where BINDID =?", new Object[]{processId});
+        String product_id = rowMap.getString("ID");
+        String CREATE_SERVICE = rowMap.getString("CREATE_SERVICE");
+
+        String SERVICE_ID = rowMap.getString("SERVICE_ID");
+        if (StringUtils.isBlank(SERVICE_ID))
+            SERVICE_ID = DBSql.getString("select ID from BO_EU_DNIVT_SERVICE where PRODUCT_ID =?", new Object[]{rowMap.getString("ID")});
+
+        if (CREATE_SERVICE.equals("1") || CREATE_SERVICE.equals("是")) {
+            if (StringUtils.isNotBlank(SERVICE_ID)) {
+                BO serviceBO = SDK.getBOAPI().get("BO_EU_DNIVT_SERVICE", SERVICE_ID);
+                for (String exclude : excludesArray) {
+                    rowMap.remove(exclude);
+                }
+                serviceBO.setAll(rowMap);
+                serviceBO.set("CLOSED", 0);
+                SDK.getBOAPI().update("BO_EU_DNIVT_SERVICE", serviceBO);
+
+            } else {
+                BO serviceBO = new BO();
+                serviceBO.setAll(rowMap);
+                serviceBO.set("PRODUCT_ID", rowMap.getString("ID"));
+                serviceBO.set("PRODUCT_NAME", rowMap.getString("NAME"));
+                serviceBO.remove("ID");
+                serviceBO.remove("BINDID");
+                ProcessInstance processInstance = SDK.getProcessAPI().createBOProcessInstance("obj_d42c36c8e3f6443d81d310d96a28e256", processExecutionContext.getUserContext().getUID(), "产品-创建服务");
+                serviceBO.setBindId(processInstance.getId());
+                SDK.getBOAPI().create("BO_EU_DNIVT_SERVICE", serviceBO, processInstance, processExecutionContext.getUserContext());
+                SERVICE_ID = serviceBO.getId();
+            }
+        } else {
+            if (StringUtils.isNotBlank(SERVICE_ID)) {
+                BO serviceBO = SDK.getBOAPI().get("BO_EU_DNIVT_SERVICE", SERVICE_ID);
+                serviceBO.set("CLOSED", 1);
+                SDK.getBOAPI().update("BO_EU_DNIVT_SERVICE", serviceBO);
+                SERVICE_ID = null;
+            }
+        }
+
+        DBSql.update("update BO_EU_DNIVT_PRODUCT set SERVICE_ID =? where ID =?", new Object[]{SERVICE_ID, product_id});
+        if (StringUtils.isNotBlank(SERVICE_ID))
+            DBSql.update("update BO_EU_DNIVT_SERVICE set PRODUCT_ID=? where ID=?", new Object[]{product_id, SERVICE_ID});
+
+    }
+}

+ 30 - 0
com.awspaas.user.apps.donenow_sys/src/com/awspaas/user/apps/donenow_sys/job/exec94Job.java

@@ -0,0 +1,30 @@
+package com.awspaas.user.apps.donenow_sys.job;
+
+import com.actionsoft.bpms.commons.security.basic.cache.PermissionCache;
+import com.actionsoft.bpms.schedule.IJob;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+public class exec94Job implements IJob {
+    /**
+     *
+     * @param jobExecutionContext
+     * @throws JobExecutionException
+     */
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        System.out.println("执行刷新用户缓存");
+        try {
+            PermissionCache.getCache().load();
+
+
+        } catch (Exception e) {
+            System.out.println("刷新用户缓存失败");
+            e.printStackTrace();
+            System.out.println(e);
+        }
+        System.out.println("刷新用户缓存成功");
+
+
+    }
+}