|
|
@@ -1,8 +1,10 @@
|
|
|
package com.zhongshu.card.server.core.service.pay;
|
|
|
|
|
|
import com.github.microservice.components.data.base.page.PageableModel;
|
|
|
+import com.github.microservice.core.util.bean.BeanUtil;
|
|
|
import com.github.microservice.pay.client.model.ledger.GeneralLedgerQueryModel;
|
|
|
import com.github.microservice.pay.client.model.ledger.GeneralLedgerTreeModel;
|
|
|
+import com.github.microservice.pay.client.model.ledger.TransactionLogModel;
|
|
|
import com.github.microservice.pay.client.model.ledger.transaction.*;
|
|
|
import com.github.microservice.pay.client.ret.ResultContent;
|
|
|
import com.github.microservice.pay.client.ret.ResultState;
|
|
|
@@ -12,6 +14,7 @@ import com.github.microservice.pay.client.type.ledger.LedgerEntry;
|
|
|
import com.github.microservice.pay.client.type.ledger.TransactionStatus;
|
|
|
import com.github.microservice.pay.client.type.ledger.TransactionType;
|
|
|
import com.github.microservice.types.payment.PaymentChannelType;
|
|
|
+import com.github.microservice.types.payment.PaymentType;
|
|
|
import com.zhongshu.card.client.model.pay.*;
|
|
|
import com.zhongshu.card.client.type.PeriodType;
|
|
|
import com.zhongshu.card.client.type.SettleStatus;
|
|
|
@@ -19,9 +22,15 @@ import com.zhongshu.card.client.utils.DateUtils;
|
|
|
import com.zhongshu.card.server.core.domain.pay.PayAccount;
|
|
|
import com.zhongshu.card.server.core.service.base.SuperService;
|
|
|
import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
|
|
|
+import com.zhongshu.card.server.core.util.ExcelUtils;
|
|
|
+import com.zhongshu.card.server.core.util.excel.CommonExeclParam;
|
|
|
+import com.zhongshu.card.server.core.util.excel.CommonExeclTd;
|
|
|
+import jakarta.servlet.http.HttpServletRequest;
|
|
|
+import jakarta.servlet.http.HttpServletResponse;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.bson.Document;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
import org.springframework.data.domain.Sort;
|
|
|
@@ -34,6 +43,7 @@ import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import static org.springframework.integration.IntegrationPatternType.filter;
|
|
|
+import static org.springframework.integration.IntegrationPatternType.inbound_gateway;
|
|
|
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
@@ -305,6 +315,76 @@ public class OrgOverviewService extends SuperService {
|
|
|
return ResultContent.buildContent(transactionLogService.aggregate(queryModel).getContent().getPages());
|
|
|
}
|
|
|
|
|
|
+ public void exportCreditBill(HttpServletRequest request, HttpServletResponse response, PeriodDetailQueryModel periodDetailQueryModel){
|
|
|
+ String projectOid = periodDetailQueryModel.getProjectOid();
|
|
|
+ if (StringUtils.isBlank(projectOid)) {
|
|
|
+ projectOid = getCurrentProjectOid();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> oidList = organizationUserService.getUserOrgListOids(getCurrentUserId(), projectOid);
|
|
|
+ if (oidList==null || oidList.isEmpty()){
|
|
|
+ throw new RuntimeException("未加入机构");
|
|
|
+ }
|
|
|
+
|
|
|
+ PayAccount payAccount = payAccountService.getOrgChildren(projectOid, oidList.get(0), PaymentChannelType.WaitSettle);
|
|
|
+
|
|
|
+ GeneralLedgerQueryTransactionLogModel queryModel = new GeneralLedgerQueryTransactionLogModel();
|
|
|
+
|
|
|
+ queryModel.setStartTime(periodDetailQueryModel.getStartTime());
|
|
|
+ queryModel.setEndTime(periodDetailQueryModel.getEndTime());
|
|
|
+ queryModel.setGeneralLedgerId(new String[]{payAccount.getLedgerId()});
|
|
|
+
|
|
|
+ Map<String, Object> filter = new HashMap<>();
|
|
|
+ filter.put("transactionType",new Document("$ne", "Settle"));
|
|
|
+ queryModel.setFilter(filter);
|
|
|
+ List<TransactionLogModel> list = transactionLogService.aggregateNotPage(queryModel).getContent().getList();
|
|
|
+
|
|
|
+ buildBillExcel(request, response, periodDetailQueryModel.getCreateDate(), list);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void buildBillExcel(HttpServletRequest request, HttpServletResponse response, String title, List<TransactionLogModel> list) {
|
|
|
+ CommonExeclParam execlParam = new CommonExeclParam();
|
|
|
+ execlParam.setTitle(String.format("%s收入账单", title));
|
|
|
+ execlParam.setStartRow(2);
|
|
|
+
|
|
|
+ List<Map<String, Object>> data = list.stream().map(it -> {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("id", it.getId());
|
|
|
+ map.put("orderNo", it.getOrderNumber());
|
|
|
+ map.put("createDate", DateUtils.paresTime(it.getCreateTime(), DateUtils.FORMAT_LONG));
|
|
|
+ if (it.getMeta()!=null) {
|
|
|
+ if (it.getMeta().get("paymentType") != null){
|
|
|
+ PaymentType paymentType = PaymentType.valueOf(it.getMeta().get("paymentType").toString());
|
|
|
+ map.put("paymentType", paymentType.getRemark());
|
|
|
+ }
|
|
|
+ if (it.getMeta().get("summary") !=null){
|
|
|
+ map.put("summary", it.getMeta().get("summary").toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ LedgerEntry ledgerEntry = it.getLedgerEntry();
|
|
|
+ if (ledgerEntry.equals(LedgerEntry.Credit)) {
|
|
|
+ map.put("ledgerEntry", "收入");
|
|
|
+ } else if (ledgerEntry.equals(LedgerEntry.Debit)) {
|
|
|
+ map.put("ledgerEntry", "支出");
|
|
|
+ }
|
|
|
+ map.put("remark", it.getRemark());
|
|
|
+ map.put("amount", it.getAmount());
|
|
|
+ return map;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ execlParam.setDatas(data);
|
|
|
+ List<CommonExeclTd> tds = new ArrayList<>();
|
|
|
+ tds.add(CommonExeclTd.build("账单流水编号", "id"));
|
|
|
+ tds.add(CommonExeclTd.build("关联订单编号", "orderNo"));
|
|
|
+ tds.add(CommonExeclTd.build("创建时间", "createDate"));
|
|
|
+ tds.add(CommonExeclTd.build("支付方式", "paymentType"));
|
|
|
+ tds.add(CommonExeclTd.build("账单类型", "ledgerEntry"));
|
|
|
+ tds.add(CommonExeclTd.build("记账摘要", "summary"));
|
|
|
+ tds.add(CommonExeclTd.build("金额(元)", "amount"));
|
|
|
+
|
|
|
+ execlParam.setTds(tds);
|
|
|
+ ExcelUtils.commonExecuteExcel(request, response, execlParam);
|
|
|
+ }
|
|
|
+
|
|
|
public Object querySettleBill(Pageable pageable, PeriodQueryModel param){
|
|
|
String projectOid = param.getProjectOid();
|
|
|
if (StringUtils.isBlank(param.getProjectOid())){
|
|
|
@@ -389,6 +469,40 @@ public class OrgOverviewService extends SuperService {
|
|
|
return ResultContent.buildContent(transactionLogService.aggregate(queryModel).getContent().getPages());
|
|
|
}
|
|
|
|
|
|
+ public void exportSettleBill(HttpServletRequest request, HttpServletResponse response, SettleDetailQueryModel settleDetailQueryModel) {
|
|
|
+ String projectOid = settleDetailQueryModel.getProjectOid();
|
|
|
+ if (StringUtils.isBlank(projectOid)) {
|
|
|
+ projectOid = getCurrentProjectOid();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> oidList = organizationUserService.getUserOrgListOids(getCurrentUserId(), projectOid);
|
|
|
+ if (oidList == null || oidList.isEmpty()) {
|
|
|
+ throw new RuntimeException("未加入机构");
|
|
|
+ }
|
|
|
+
|
|
|
+ PayAccount payAccount = payAccountService.getOrgChildren(projectOid, oidList.get(0), PaymentChannelType.WaitSettle);
|
|
|
+
|
|
|
+ GeneralLedgerQueryTransactionLogModel queryModel = new GeneralLedgerQueryTransactionLogModel();
|
|
|
+
|
|
|
+ queryModel.setGeneralLedgerId(new String[]{payAccount.getLedgerId()});
|
|
|
+
|
|
|
+ Map<String, Object> filter = new HashMap<>();
|
|
|
+
|
|
|
+ String createDate = settleDetailQueryModel.getCreateDate();
|
|
|
+ if (StringUtils.isBlank(createDate)) {
|
|
|
+ throw new RuntimeException("createDate不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ String formatCreateTime = DateUtils.paresTime(DateUtils.timeToLong(createDate, DateUtils.pattern), DateUtils.pattern);
|
|
|
+
|
|
|
+ filter.put("meta.settleStatus", SettleStatus.Settle);
|
|
|
+ filter.put("meta.settleTime", formatCreateTime);
|
|
|
+ filter.put("transactionType", new Document("$ne", "Settle"));
|
|
|
+ queryModel.setFilter(filter);
|
|
|
+ List<TransactionLogModel> list = transactionLogService.aggregateNotPage(queryModel).getContent().getList();
|
|
|
+ buildBillExcel(request, response, settleDetailQueryModel.getCreateDate(), list);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
public Object queryWithdrawBill(Pageable pageable, PeriodQueryModel param){
|
|
|
String projectOid = param.getProjectOid();
|
|
|
@@ -475,6 +589,41 @@ public class OrgOverviewService extends SuperService {
|
|
|
return ResultContent.buildContent(transactionLogService.aggregate(queryModel).getContent().getPages());
|
|
|
}
|
|
|
|
|
|
+ public void exportWithdrawBill(HttpServletRequest request, HttpServletResponse response, SettleDetailQueryModel settleDetailQueryModel){
|
|
|
+ String projectOid = settleDetailQueryModel.getProjectOid();
|
|
|
+ if (StringUtils.isBlank(projectOid)) {
|
|
|
+ projectOid = getCurrentProjectOid();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> oidList = organizationUserService.getUserOrgListOids(getCurrentUserId(), projectOid);
|
|
|
+ if (oidList==null || oidList.isEmpty()){
|
|
|
+ throw new RuntimeException("未加入机构");
|
|
|
+ }
|
|
|
+
|
|
|
+ PayAccount payAccount = payAccountService.getOrgChildren(projectOid, oidList.get(0), PaymentChannelType.Settle);
|
|
|
+
|
|
|
+ GeneralLedgerQueryTransactionLogModel queryModel = new GeneralLedgerQueryTransactionLogModel();
|
|
|
+
|
|
|
+ queryModel.setGeneralLedgerId(new String[]{payAccount.getLedgerId()});
|
|
|
+
|
|
|
+ Map<String, Object> filter = new HashMap<>();
|
|
|
+
|
|
|
+ String createDate = settleDetailQueryModel.getCreateDate();
|
|
|
+ if (StringUtils.isBlank(createDate)){
|
|
|
+ throw new RuntimeException("createDate不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ Long startTime = DateUtils.timeToLong(createDate, DateUtils.pattern);
|
|
|
+
|
|
|
+ queryModel.setStartTime(startTime);
|
|
|
+ queryModel.setEndTime(startTime + 24*60*60*1000L);
|
|
|
+
|
|
|
+ filter.put("transactionType",new Document("$in", List.of(TransactionType.Withdrawal, TransactionType.WithdrawRefund)));
|
|
|
+ queryModel.setFilter(filter);
|
|
|
+ List<TransactionLogModel> list = transactionLogService.aggregateNotPage(queryModel).getContent().getList();
|
|
|
+ buildBillExcel(request, response, settleDetailQueryModel.getCreateDate(), list);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private BigDecimal changeRate(Long todayAmount, Long yesterdayAmount) {
|
|
|
BigDecimal amountChangeRate = BigDecimal.ZERO;
|