diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index 5606bf6..69c3ea6 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -315,8 +315,7 @@ public class ApiService { case "https://10.1.9.43/iuap-api-auth/yonbip/ctm/api/settlement/feedback": saveResponseBody = pushBill(token, saveUrl, saveRequestBody); jsonObject = JSON.parseObject(saveResponseBody); - code = jsonObject.getString("code"); - if ("200".equals(code)) { + if (jsonObject.getJSONObject("data").getIntValue("successnum") > 0) { if ("TS".equals(dynamic.getString("bankpaystatus"))) { dynamic.set("shkd_pushstatus", "已结算"); } else { diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/PlanningService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/PlanningService.java index 5f2861c..4e2cec6 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/PlanningService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/PlanningService.java @@ -119,7 +119,7 @@ public class PlanningService { * @param amount 调整金额 * @return */ - public static ReportAdjustBillBatchSaveResDTO planAdjustment(String adjustReason, String orgCode, String periodCode, String subjectCode, String entryPeriodCode, String amount) { + public static FpmResponse planAdjustment(String adjustReason, String orgCode, String periodCode, String subjectCode, String entryPeriodCode, String amount) { logger.info("计划调整服务入参:adjustReason={},orgCode={},periodCode={},subjectCode={},entryPeriodCode={},amount={}", adjustReason, orgCode, periodCode, subjectCode, entryPeriodCode, amount); ReportAdjustBillBatchSaveDTO reportAdjustBillBatchSaveDTO = new ReportAdjustBillBatchSaveDTO(); reportAdjustBillBatchSaveDTO.setSystemCode("SYS-005");// 体系编码 @@ -159,8 +159,10 @@ public class PlanningService { String qParam = SerializationUtils.serializeToBase64(reportAdjustBillBatchSaveDTO); // 3. 调用SDK接口 ReportDataSDKService reportDataSDKService = new ReportDataSDKService(); - reportDataSDKService.batchSaveAdjustReport(qParam); - String result = reportDataSDKService.batchSaveReportData(qParam); + String result = reportDataSDKService.batchSaveAdjustReport(qParam); + + logger.info("获取result:{}", result); + // 4. 反序列化响应结果 FpmResponse responseObject = SerializationUtils.deSerializeFromBase64(result); ReportAdjustBillBatchSaveResDTO reportAdjustBillBatchSaveResDTO = responseObject.getData(); @@ -171,8 +173,10 @@ public class PlanningService { logger.info("是否成功:{}\n消息列表:{}", responseObject.isSuccess(), responseObject.getMessage()); if (responseObject.isSuccess()) { logger.info("调整单据编号列表:{}", adjustBillNoList); + }else { + logger.info("失败原因:{}", responseObject.getMessage()); } - return reportAdjustBillBatchSaveResDTO; + return responseObject; } /** diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/Exp/BalanceExpansion.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/Exp/BalanceExpansion.java index bb1327e..e2df5fd 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/Exp/BalanceExpansion.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/Exp/BalanceExpansion.java @@ -23,24 +23,14 @@ public class BalanceExpansion implements IFillBankBalance { @Override public void fillExtBankBalance(DynamicObject bankBalance, String balanceString) { - DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(bankBalance.getDynamicObjectType().getName(), "id,billno,shkd_depositbalance", new QFilter("id", QCP.equals, bankBalance.getPkValue()).toArray()); JSONObject jsonObject = JSON.parseObject(balanceString); logger.info("bankBalance数据:{},balanceString数据:{}", bankBalance, jsonObject); - Object balance = jsonObject.get("depositBalance"); BigDecimal depositBalance = BigDecimal.ZERO; - if (balance != null) { - if (!"".equals(balance.toString())) { - depositBalance = new BigDecimal(balance.toString()); - } - } - - // 只有当新值与旧值不同时才设置并更新 - BigDecimal currentBalance = dynamicObject.getBigDecimal("shkd_depositbalance"); - if (depositBalance.compareTo(currentBalance) != 0) { - bankBalance.set("shkd_depositbalance", depositBalance); - logger.info("新值与旧值不同,新值上存余额为:{},旧值上存余额为:{}", depositBalance, currentBalance); + if (balance != null && !"".equals(balance.toString())) { + depositBalance = new BigDecimal(balance.toString()); } + bankBalance.set("shkd_depositbalance", depositBalance); } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/InterfacePracticePlug.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/InterfacePracticePlug.java index de19ee1..157463d 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/InterfacePracticePlug.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/InterfacePracticePlug.java @@ -53,9 +53,14 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali jsonObject.getString("amount");// 金额 FpmResponse voidFpmResponse = planningWrite(jsonObject.getString("periodCode"), jsonObject.getString("orgCode"), jsonObject.getString("subjectCode"), jsonObject.getString("entryPeriodCode"), jsonObject.getString("amount")); stringBuffer.append("第").append(i + 1).append("条数据写入").append(voidFpmResponse.isSuccess() ? "成功" : "失败") - .append(",返回信息:").append(voidFpmResponse.getMessage()).append("\n"); + .append(",返回信息:").append(voidFpmResponse.getMessage() == null ? "写入计划编制成功" : voidFpmResponse.getMessage()).append("\n"); + } + + if (stringBuffer.toString().contains("成功")) { + return CustomApiResult.success(stringBuffer.toString()); + } else { + return CustomApiResult.fail("404", stringBuffer.toString()); } - return CustomApiResult.fail("404", stringBuffer.toString()); } /** @@ -77,7 +82,7 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali jsonObject.getString("subjectCode");// 计划科目 jsonObject.getString("entryPeriodCode");// 主维度数据分录期间code jsonObject.getString("amount");// 金额 - ReportAdjustBillBatchSaveResDTO resDTO = planAdjustment( + FpmResponse fpmResponse = planAdjustment( jsonObject.getString("adjustReason"), jsonObject.getString("orgCode"), jsonObject.getString("periodCode"), @@ -86,14 +91,23 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali jsonObject.getString("amount") ); - List adjustBillNoList = resDTO.getAdjustBillNoList();// 调整单据编号列表 - if (adjustBillNoList.isEmpty()) { - stringBuffer.append("第").append(i + 1).append("条数据写入").append("失败").append("\n"); - }else { + + if (fpmResponse.isSuccess()) { + ReportAdjustBillBatchSaveResDTO data = fpmResponse.getData(); + List adjustBillNoList = data.getAdjustBillNoList(); stringBuffer.append("第").append(i + 1).append("条数据写入").append("成功,").append("单据编号:").append(adjustBillNoList).append("\n"); + }else { + stringBuffer.append("第").append(i + 1).append("条数据写入").append("失败,失败原因:").append(fpmResponse.getMessage()).append("\n"); } } - return CustomApiResult.fail("404", stringBuffer.toString()); + + logger.info("调整单信息:{}", stringBuffer.toString()); + + if (stringBuffer.toString().contains("成功")) { + return CustomApiResult.success(stringBuffer.toString()); + } else { + return CustomApiResult.fail("404", stringBuffer.toString()); + } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java index 90567f0..5b36fb1 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java @@ -1,46 +1,113 @@ package shkd.sys.sys.plugin.list; +import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.datamodel.ListSelectedRow; import kd.bos.entity.datamodel.ListSelectedRowCollection; +import kd.bos.entity.operate.result.IOperateInfo; +import kd.bos.entity.operate.result.OperationResult; import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.form.events.AfterDoOperationEventArgs; import kd.bos.list.BillList; import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.OperationServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.sdk.plugin.Plugin; +import shkd.sys.sys.mservice.ApiService; import java.util.ArrayList; import java.util.List; +import static kd.bos.servicehelper.workflow.WorkflowServiceHelper.abandonByBusienssKey; + /** * 标准单据列表插件 */ public class PaymentProcessingListPlugin extends AbstractListPlugin implements Plugin { + private static final Log logger = LogFactory.getLog(PaymentProcessingListPlugin.class); + @Override public void itemClick(ItemClickEvent evt) { String itemKey = evt.getItemKey(); - if ("shkd_hitback".equals(itemKey)) { - List billnos = new ArrayList<>(); - //获取列表 - BillList list = this.getControl("billlistap"); - //获取列表选中的行数据 - ListSelectedRowCollection selectedRows = list.getSelectedRows(); + } - if (selectedRows.isEmpty()) this.getView().showTipNotification("请至少选择一条数据"); - if (selectedRows.size() > 1000) this.getView().showTipNotification("请至少选择一条数据"); + @Override + public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) { + String operateKey = afterDoOperationEventArgs.getOperateKey(); + //获取列表 + BillList list = this.getControl("billlistap"); + //获取列表选中的行数据 + ListSelectedRowCollection selectedRows = list.getSelectedRows(); - for (ListSelectedRow listSelectedRow : selectedRows) { - billnos.add(listSelectedRow.getBillNo()); + if ("hitback".equals(operateKey)) { + logger.info("进入打回操作 → hitback"); + if (selectedRows.isEmpty()) { + this.getView().showTipNotification("请选择一条数据"); + return; + } else if (selectedRows.size() > 1) { + this.getView().showTipNotification("涉及流程中断,只能选择一条数据打回"); + return; + } else { + ListSelectedRow listSelectedRow = selectedRows.get(0); + Object primaryKeyValue = listSelectedRow.getPrimaryKeyValue(); + DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(primaryKeyValue, "cas_paybill"); + DynamicObject loadSingle = BusinessDataServiceHelper.loadSingle(dynamicObject.getDynamicObjectType().getName(), "id,billno,name,billstatus,shkd_businessname", new QFilter("id", QCP.equals, dynamicObject.getPkValue()).toArray()); + Object businessname = loadSingle.get("shkd_businessname"); + String billstatus = loadSingle.getString("billstatus"); + if (businessname != null) { + String shkd_businessname = businessname.toString(); + if (("共享系统".equals(shkd_businessname) || "XK".equals(shkd_businessname)) && (("B".equals(billstatus) || "C".equals(billstatus)))) { + try { + abandonByBusienssKey(loadSingle.getPkValue().toString()); + } catch (Exception ignored) { + } + OperationResult operation; + if ("共享系统".equals(shkd_businessname)) { + DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,acttradedate," + + "payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," + + "org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," + + "billstatus,bankpaystatus", new QFilter("billno", QCP.equals, loadSingle.getString("billno")).toArray()); + List dynamicObjects = new ArrayList<>(); + String pushResult = ApiService.paymentSlipsJson(objects[0], "BIPRE", dynamicObjects, null); + logger.info("result信息:{}", pushResult); + if (pushResult.contains("成功")) { + SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0])); + } else { + this.getView().showTipNotification("打回失败,失败原因:调用BIP打回接口失败"); + return; + } + } + + if ("B".equals(dynamicObject.getString("billstatus"))) { + operation = OperationServiceHelper.executeOperate("unsubmit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create()); + } else if ("C".equals(dynamicObject.getString("billstatus"))) { + operation = OperationServiceHelper.executeOperate("unaudit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create()); + } else { + this.getView().showTipNotification("单据不为已提交或已审核状态,无法打回"); + return; + } + List allErrorOrValidateInfo = operation.getAllErrorOrValidateInfo(); + if (!allErrorOrValidateInfo.isEmpty()) { + this.getView().showTipNotification("打回失败,失败原因:撤销(反审核)操作失败 → " + allErrorOrValidateInfo.get(0).getMessage()); + return; + } else { + this.getView().showSuccessNotification("打回成功"); + list.refresh(); + } + } else { + this.getView().showTipNotification("来源系统为(BIP或星空)且单据状态为(提交或审核)才允许打回"); + return; + } + } else { + this.getView().showTipNotification("来源系统为(BIP或星空)且单据状态为(提交或审核)才允许打回"); + } } - - /* DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", - "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + - "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + - "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" - , new QFilter("bizdate", QCP.large_equals, date).and("shkd_pushstatus", QCP.not_equals, "已推送") - .and("billstatus", QCP.equals, "D").toArray());*/ } } } \ No newline at end of file diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/HitBackOperationServicePlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/HitBackOperationServicePlugin.java index 3e5b0c9..211f7cc 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/HitBackOperationServicePlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/HitBackOperationServicePlugin.java @@ -40,60 +40,58 @@ public class HitBackOperationServicePlugin extends AbstractOperationServicePlugI public void beforeExecuteOperationTransaction(BeforeOperationArgs args) { super.beforeExecuteOperationTransaction(args); DynamicObject[] entities = args.getDataEntities(); - List pkValue = new ArrayList<>(); - Arrays.stream(entities).forEach(dynamicObject -> { - pkValue.add(dynamicObject.getPkValue()); - }); - DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill", - "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype," + - "payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," + - "org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," + - "billstatus,bankpaystatus" - , new QFilter("id", QCP.in, pkValue) - .and("billstatus", QCP.in, "B、C") - .and("shkd_businessname", QCP.equals, "共享系统").toArray()); - if (objects == null || objects.length == 0) { - args.setCancelMessage("打回失败\n" + - "1、选择打回单据必须为BIP推送单据\n" + - "2、只能打回提交、已审核的单据\n" + - "(若有其他问题,可找业务老师咨询)" - ); + if (entities.length > 1) { + args.setCancelMessage("涉及流程中断,只能选择一条数据打回"); args.setCancel(true); } else { - StringBuilder stringBuilder = new StringBuilder(); - for (DynamicObject dynamicObject : objects) { - if (!"未结算".equals(dynamicObject.getString("shkd_pushstatus"))) { - stringBuilder.append("单据编号:" + dynamicObject.get("billno") + " 打回失败,该单据结算结果已被推送\n"); - continue; - } - OperationResult operation; - if ("B".equals(dynamicObject.getString("billstatus"))) { - operation = OperationServiceHelper.executeOperate("unsubmit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create()); - }else{ - operation = OperationServiceHelper.executeOperate("unaudit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create()); - } - List allErrorOrValidateInfo = operation.getAllErrorOrValidateInfo(); - if (allErrorOrValidateInfo.isEmpty()) { - List dynamicObjects = new ArrayList<>(); - String result = ApiService.paymentSlipsJson(dynamicObject, "BIPRE", dynamicObjects, null); - logger.info("result信息:{}", result); - if (result.contains("成功")) { - SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0])); + DynamicObject loadSingle = BusinessDataServiceHelper.loadSingle(entities[0].getDynamicObjectType().getName(), "id,billno,name,billstatus,shkd_businessname", new QFilter("id", QCP.equals, entities[0].getPkValue()).toArray()); + Object businessname = loadSingle.get("shkd_businessname"); + String billstatus = loadSingle.getString("billstatus"); + if (businessname != null) { + String shkd_businessname = businessname.toString(); + if (("共享系统".equals(shkd_businessname) || "XK".equals(shkd_businessname)) && (("B".equals(billstatus) || "C".equals(billstatus)))) { + try { + abandonByBusienssKey(loadSingle.getPkValue().toString()); + } catch (Exception ignored) { + } + OperationResult operation; + if ("共享系统".equals(shkd_businessname)) { + DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,acttradedate," + + "payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," + + "org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," + + "billstatus,bankpaystatus", new QFilter("billno", QCP.equals, loadSingle.getString("billno")).toArray()); + List dynamicObjects = new ArrayList<>(); + String pushResult = ApiService.paymentSlipsJson(objects[0], "BIPRE", dynamicObjects, null); + logger.info("result信息:{}", pushResult); + if (pushResult.contains("成功")) { + SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0])); + } else { + args.setCancelMessage("打回失败,失败原因:调用BIP打回接口失败"); + args.setCancel(true); + return; + } + } + + if ("B".equals(loadSingle.getString("billstatus"))) { + operation = OperationServiceHelper.executeOperate("unsubmit", "cas_paybill", new DynamicObject[]{loadSingle}, OperateOption.create()); + } else if ("C".equals(loadSingle.getString("billstatus"))) { + operation = OperationServiceHelper.executeOperate("unaudit", "cas_paybill", new DynamicObject[]{loadSingle}, OperateOption.create()); } else { - stringBuilder.append("单据编号:" + dynamicObject.get("billno") + " 打回失败,调用BIP接口失败\n"); + args.setCancelMessage("单据不为已提交或已审核状态,无法打回"); + args.setCancel(true); + return; + } + List allErrorOrValidateInfo = operation.getAllErrorOrValidateInfo(); + if (!allErrorOrValidateInfo.isEmpty()) { + args.setCancelMessage("打回失败,失败原因:撤销(反审核)操作失败 → " + allErrorOrValidateInfo.get(0).getMessage()); + args.setCancel(true); } } else { - allErrorOrValidateInfo.forEach(operateInfo -> { - DynamicObject object = BusinessDataServiceHelper.loadSingle(operateInfo.getPkValue(), "cas_paybill"); - stringBuilder.append("单据编号:" + object.get("billno") + "," + operateInfo.getMessage() + "\n"); - }); + args.setCancelMessage("来源系统为(BIP或星空)且单据状态为(提交或审核)才允许打回"); + args.setCancel(true); } } - - if (!stringBuilder.isEmpty()) { - args.setCancelMessage(stringBuilder.toString()); - args.setCancel(true); - } } } } \ No newline at end of file diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index 838ffb5..7ed2a9e 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -27,6 +27,7 @@ import java.time.LocalDate; import java.time.Month; import java.time.ZoneId; import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; import java.util.*; import static shkd.sys.sys.mservice.ApiService.*; @@ -36,6 +37,7 @@ import static shkd.sys.sys.mservice.ApiService.*; */ public class PushTaskPlugin extends AbstractTask implements Plugin { private static final Log logger = LogFactory.getLog(PushTaskPlugin.class); + private static final ZoneId DEFAULT_ZONE = ZoneId.systemDefault(); @Override public void execute(RequestContext requestContext, Map map) throws KDException { @@ -150,7 +152,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { */ case "bei_transdetail_cas": DynamicObject[] objects3 = BusinessDataServiceHelper.load("bei_transdetail_cas", "id,bizdate,billno,detailid,oppbank,oppunit,accountbank,description,company,oppbanknumber,bankdetailno,transbalance,description,debitamount,creditamount,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,recedbillentry,receiptno,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber,recedbillentry.e_recedbillid" - , new QFilter("bizdate", QCP.large_equals, getFirstDayOfCurrentMonth()) + , new QFilter("bizdate", QCP.large_equals, getAdjustedFirstDayOfCurrentMonth()) .and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); Arrays.stream(objects3).forEach(dynamicObject -> { @@ -406,14 +408,17 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { * 获取当前月份的第一天 * @return */ - private static Date getFirstDayOfCurrentMonth() { - // 获取当前日期 + private static Date getAdjustedFirstDayOfCurrentMonth() { LocalDate currentDate = LocalDate.now(); - // 获取当前月份的第一天 - LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1); - - // 将LocalDate转换为Date - return Date.from(firstDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant()); + if (currentDate.getDayOfMonth() == 1) { + // 返回上个月最后一天 + LocalDate lastDayOfPreviousMonth = currentDate.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); + return Date.from(lastDayOfPreviousMonth.atStartOfDay(DEFAULT_ZONE).toInstant()); + } else { + // 返回当前月份第一天 + LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1); + return Date.from(firstDayOfMonth.atStartOfDay(DEFAULT_ZONE).toInstant()); + } } } \ No newline at end of file