|
|
@@ -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();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|