zhangyao пре 1 месец
родитељ
комит
46b8f64561

+ 32 - 3
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/invoiceController.java

@@ -33,7 +33,10 @@ public class invoiceController {
         InvoiceDealDto invoiceDealDto = new InvoiceDealDto();
         invoiceDealDto.setIds(accDeduIds);
         String result = InvoiceService.getInstance().processInvoice(uc, accDeduIds, invoiceDealDto, false);
-        if (StringUtils.isNotBlank(result)) return ResponseObject.newErrResponse(result);
+
+        if (StringUtils.isNotBlank(result) && !result.contains("成功")) return ResponseObject.newErrResponse(result);
+
+
         return ResponseObject.newOkResponse();
     }
 
@@ -58,9 +61,11 @@ public class invoiceController {
         invoiceDealDto.setDateRangeToStr(endDate);
 
         String result = InvoiceService.getInstance().processInvoice(uc, accDeduIds, invoiceDealDto, true);
-        if (StringUtils.isNotBlank(result)) return ResponseObject.newErrResponse(result);
+        if (StringUtils.isNotBlank(result) && !result.contains("成功")) return ResponseObject.newErrResponse(result);
 
-        return ResponseObject.newOkResponse();
+        String bindid = result.replace("成功--", "");
+
+        return ResponseObject.newOkResponse().put("BINDID", bindid);
     }
 
 
@@ -134,4 +139,28 @@ public class invoiceController {
         return ResponseObject.newOkResponse().put("qrContent", qrContent);
     }
 
+
+    /**
+     * 开票申请
+     * @param uc
+     * @param accDeduIds
+     * @return
+     */
+    @Mapping("com.awspaas.user.apps.donenow_ctt.invoice_plan")
+    public ResponseObject invoicePlan(UserContext uc, String accDeduIds) {
+        InvoiceDealDto invoiceDealDto = new InvoiceDealDto();
+        invoiceDealDto.setIds(accDeduIds);
+
+        SDK.getLogAPI().consoleInfo("处理账单:" + accDeduIds);
+
+        String result = InvoiceService.getInstance().invoicePlan(uc, accDeduIds);
+        if (StringUtils.isNotBlank(result) && !result.contains("成功"))
+            return ResponseObject.newErrResponse(result);
+
+        String bindid = result.replace("成功--", "");
+
+        return ResponseObject.newOkResponse().put("BINDID", bindid);
+    }
+
+
 }

+ 7 - 2
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/contractFormBeforeSave.java

@@ -60,9 +60,14 @@ public class contractFormBeforeSave extends InterruptListener {
                     String lastPeriodEndDate = DBSql.getString("SELECT MAX(PERIOD_END_DATE) FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE APPROVE_AND_POST_USER_ID IS NOT NULL AND LENGTH(APPROVE_AND_POST_USER_ID)>1 AND APPROVE_AND_POST_DATE IS NOT NULL AND CONTRACT_ID=? ", new Object[]{orgData.getId()});
 
                     //已审批服务周期,则不能修改合同开始时间
-                    if (StringUtils.isNotEmpty(lastPeriodEndDate)) {
+                    if (StringUtils.isNotEmpty(lastPeriodEndDate) && lastPeriodEndDate.length() >= 10) {
+                        lastPeriodEndDate = lastPeriodEndDate.substring(0, 10);
+
+                        SDK.getLogAPI().consoleInfo("lastPeriodEndDate:" + lastPeriodEndDate);
+                        SDK.getLogAPI().consoleInfo("END_DATE:" + END_DATE);
+
                         LocalDate lastPeriodEndDate1 = getLocalDate(lastPeriodEndDate);
-                        if (!END_DATE.isAfter(lastPeriodEndDate1)) {
+                        if (lastPeriodEndDate1 != null && !END_DATE.isAfter(lastPeriodEndDate1)) {
                             String lastPeriodEndDate_STR = lastPeriodEndDate1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                             throw new BPMNError("500", lastPeriodEndDate_STR + "之后的服务周期已被审批,则合同结束日期不能修改到" + END_DATE_STR + "。");
                         }

+ 99 - 3
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/InvoiceService.java

@@ -51,7 +51,8 @@ public class InvoiceService {
         logger.info("日期范围:" + param.getDateRangeFrom() + "--" + param.getDateRangeTo());
 
         // 1. 基础校验:空值过滤
-        if (StringUtils.isBlank(accDeduIds)) return "参数错误";
+        if (StringUtils.isBlank(accDeduIds))
+            return "参数错误";
 
         String[] dedIdArr = accDeduIds.split(",");
 
@@ -96,7 +97,7 @@ public class InvoiceService {
 
                 //i) 弹出窗口输入账单起止日期,保存时需要校验所选条目是否在账单起止日期内
                 if (itemDate.isBefore(param.getDateRangeFrom()) || itemDate.isAfter(param.getDateRangeTo())) {
-                    return "所选条目有账单起止日期不符合要求";
+                    return "所选条目计费日期必须在输入的账单起止日期内";
                 }
 
                 //  ii) 批量选择条目:计费客户相同、状态必须为----未生成生成账单
@@ -165,8 +166,12 @@ public class InvoiceService {
                 }
             }
         }
+
         logger.info("发票ID:" + invoiceIds.toString());
-        return null;
+
+        String invoiceBINDID = DBSql.getString("SELECT BINDID FROM BO_EU_DNCTT_INVOICE WHERE ID=?", new Object[]{invoiceIds.get(0)});
+
+        return "成功--" + invoiceBINDID;
     }
 
 
@@ -389,4 +394,95 @@ public class InvoiceService {
         return true;
 
     }
+
+
+    /**
+     * 创建发票计划
+     */
+    public String invoicePlan(UserContext uc, String accDeduIds) {
+        // 1. 基础校验:空值过滤
+        if (StringUtils.isBlank(accDeduIds))
+            return "参数错误";
+
+        String[] dedIdArr = accDeduIds.split(",");
+
+        StringBuilder where = new StringBuilder("(");
+        for (int i = 0; i < dedIdArr.length; i++) {
+            where.append("?").append(i < dedIdArr.length - 1 ? "," : ")");
+        }
+        String sqlWhere = where.toString(); // 复用:构建IN条件
+
+        // 2. 初始化基础数据(3张核心表查询)
+        List<RowMap> postedDataList = DBSql.getMaps("SELECT * FROM VIEW_EU_DNV_POSTED_ALL d WHERE d.ID IN " + sqlWhere + "  AND  d.bill_account_id is NOT NULL AND d.ORGID='" + uc.getCompanyModel().getId() + "' ORDER BY ACCOUNT_ID,BILL_ACCOUNT_ID", dedIdArr);
+
+        logger.info("账单个数:" + postedDataList.size());
+
+        postedDataList.forEach(row -> row.forEach((key, value) -> {
+            if (key.toUpperCase().equals("BILL_ACCOUNT_ID")) {
+                if (value == null || StringUtils.isBlank(value.toString())) {
+                    row.put(key.toUpperCase(), row.get("ACCOUNT_ID"));
+                } else {
+                    row.put(key.toUpperCase(), value);
+                }
+            } else {
+                row.put(key.toUpperCase(), value);
+            }
+        }));
+
+        String BILL_ACCOUNT_ID = null;
+        for (RowMap row : postedDataList) {
+            String ITEM_DATE = row.getString("ITEM_DATE");
+            if (StringUtils.isNotBlank(ITEM_DATE)) {
+
+
+                //  ii) 批量选择条目:计费客户相同、状态必须为----未生成生成账单
+                if (StringUtils.isBlank(BILL_ACCOUNT_ID)) BILL_ACCOUNT_ID = row.getString("BILL_ACCOUNT_ID");
+                else {
+                    if (!BILL_ACCOUNT_ID.equals(row.getString("BILL_ACCOUNT_ID"))) {
+                        return "所选条目有账单客户必须相同";
+                    }
+                }
+
+                //RECEIVE_STATUS  4661 未生成生成账单
+                String RECEIVE_STATUS = row.getString("RECEIVE_STATUS");
+                if (RECEIVE_STATUS.equals("4662") == false)
+                    return "所选条目有账单状态必须为已生成生成账单";
+            }
+        }
+
+
+        List<RowMap> accountDedList = DBSql.getMaps("SELECT * FROM VIEW_EU_DNCTT_INVOICE_DETAIL WHERE ID IN " + sqlWhere + " ORDER BY ACCOUNT_ID,BILL_ACCOUNT_ID", dedIdArr);
+
+        ProcessInstance pi = SDK.getProcessAPI().createProcessInstance("obj_a1a00d7c7c0e4eb69acd57291557521d", uc.getUID(), "开票申请");
+
+        BO invoice = new BO();
+        invoice.setBindId(pi.getId());
+        invoice.set("BILL_ACCOUNT_ID", BILL_ACCOUNT_ID);
+        invoice.set("BILL_ACCOUNT_NAME", DBSql.getString("select NAME from bo_eu_dncrm_account where ID=?", new Object[]{BILL_ACCOUNT_ID}));
+        invoice.set("INVOICE_AMOUNT", 0);
+        invoice.set("STATUS_ID", "4471");
+
+        SDK.getBOAPI().create("BO_EU_DNCTT_INVOICE_PLAN", invoice, pi, uc);
+
+        SDK.getProcessAPI().start(pi);
+
+        BigDecimal invoiceAmount = BigDecimal.ZERO;
+
+        for (RowMap row : accountDedList) {
+
+            invoiceAmount = invoiceAmount.add(TypeUtil.convert(row.get("INVOICE_AMOUNT"), BigDecimal.class));
+
+            BO dedBO = new BO();
+            dedBO.setAll(row);
+            dedBO.setBindId(pi.getId());
+            dedBO.set("INVOICE_DETAIL_ID", row.getString("ID"));
+            SDK.getBOAPI().create("BO_EU_DNCTT_INVOICE_PLAN_DETAIL", dedBO, pi, uc);
+        }
+
+        DBSql.update("UPDATE BO_EU_DNCTT_INVOICE_PLAN SET INVOICE_AMOUNT=? WHERE ID=?", new Object[]{invoiceAmount, invoice.getId()});
+
+        return "成功--" + invoice.getBindId();
+    }
+
+
 }

+ 6 - 3
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/service/PaymentPlanService.java

@@ -59,7 +59,7 @@ public class PaymentPlanService {
         BO purchaseOrder = SDK.getBOAPI().get("BO_EU_DNIVT_ORDER", orderId);
         List<BO> orderProducts = SDK.getBOAPI().query("BO_EU_DNIVT_ORDER_PRODUCT").bindId(purchaseOrder.getBindId()).list();
         String VENDOR_ACCOUNT_ID = purchaseOrder.getString("VENDOR_ACCOUNT_ID");//供应商账户ID
-
+        List<String> serviceIds = new ArrayList<>();
         Connection conn = null;
         try {
             conn = DBSql.open();
@@ -80,8 +80,8 @@ public class PaymentPlanService {
                         }
 
                         createServicePaymentPlan(uc, orderId, SERVICE_ID, VENDOR_ACCOUNT_ID, orderProduct, "BO_EU_DNIVT_ORDER_PAYMENT_PLAN", conn);
+                        serviceIds.add(SERVICE_ID);
                     }
-
                 }
             }
 
@@ -128,6 +128,10 @@ public class PaymentPlanService {
             if (conn != null) DBSql.close(conn);
         }
 
+        if (serviceIds.size() > 0)
+            for (String SERVICE_ID : serviceIds)
+                paySplitServiceMonth(uc, SERVICE_ID);
+
     }
 
 
@@ -282,7 +286,6 @@ public class PaymentPlanService {
 
         if (boName.equals("BO_EU_DNIVT_ORDER_PAYMENT_PLAN")) {
             createServicePaymentPlan(uc, orderId, SERVICE_ID, VENDOR_ACCOUNT_ID, orderProduct, "BO_EU_DNIVT_ORDER_PAYMENT_PLAN_MONTH", conn);
-            paySplitServiceMonth(uc, SERVICE_ID);
         }
 
     }