|
|
@@ -40,13 +40,16 @@ import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.YearMonth;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exceptionCustomMsg;
|
|
|
import static cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO.PACKAGE_ID_SYSTEM;
|
|
|
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.COMMON_ERROR;
|
|
|
import static org.aspectj.bridge.MessageUtil.fail;
|
|
|
|
|
|
/**
|
|
|
@@ -132,9 +135,7 @@ public class KingdeeApiImpl implements KingdeeApi {
|
|
|
String FMAINBOOKSTDCURRID = "PRE001";
|
|
|
String fid = "";
|
|
|
List<ReceivableFEntityDetail> FEntityDetailList = new ArrayList<>();
|
|
|
- List<ExpenseOrderItemDO> expenseOrderItemDOS = orderItemMapper.selectList(new LambdaQueryWrapperX<ExpenseOrderItemDO>()
|
|
|
- .eq(ExpenseOrderItemDO::getExpenseOrderId, expenseOrderDO.getId())
|
|
|
- .eq(ExpenseOrderItemDO::getTenantId, tenantId));
|
|
|
+ List<ExpenseOrderItemDO> expenseOrderItemDOS = orderItemMapper.selectListByOrderId(expenseOrderDO.getId(),tenantId);
|
|
|
if (CollectionUtils.isEmpty(expenseOrderItemDOS)) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -142,6 +143,25 @@ public class KingdeeApiImpl implements KingdeeApi {
|
|
|
if(expenseOrderItemDO.getTotalAmount().compareTo(BigDecimal.ZERO) == 0){
|
|
|
return;
|
|
|
}
|
|
|
+ // 设施费不推送应收单
|
|
|
+ if(expenseOrderItemDO.getItemCategoryName() != null && expenseOrderItemDO.getItemCategoryName().contains("设施费")){
|
|
|
+ expenseOrderDO.setActualAmount(expenseOrderDO.getActualAmount().subtract(expenseOrderItemDO.getTotalAmount()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 赠送不推送应收单
|
|
|
+ if((expenseOrderItemDO.getIsFreeGift() != null && expenseOrderItemDO.getIsFreeGift() == 1)){
|
|
|
+ expenseOrderDO.setActualAmount(expenseOrderDO.getActualAmount().subtract(expenseOrderItemDO.getTotalAmount()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 押金不推送应收单
|
|
|
+ if((expenseOrderItemDO.getIsDeposit() != null && expenseOrderItemDO.getIsDeposit() == 1) ||
|
|
|
+ (expenseOrderItemDO.getItemCategoryName() != null &&
|
|
|
+ (expenseOrderItemDO.getItemCategoryName().contains("押金") ||
|
|
|
+ expenseOrderItemDO.getItemCategoryName().contains("预备金") ||
|
|
|
+ expenseOrderItemDO.getItemCategoryName().contains("保证金")))){
|
|
|
+ expenseOrderDO.setActualAmount(expenseOrderDO.getActualAmount().subtract(expenseOrderItemDO.getTotalAmount()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
// 床位费 CI047
|
|
|
// 膳食费 CI048
|
|
|
// 护理费 CI050
|
|
|
@@ -153,6 +173,11 @@ public class KingdeeApiImpl implements KingdeeApi {
|
|
|
if(StringUtils.isBlank(FCOSTID)){
|
|
|
return;
|
|
|
}
|
|
|
+ // 补上长护险费用,还是应该要收的
|
|
|
+ if(FCOSTID.equals("CI051")){
|
|
|
+ expenseOrderDO.setActualAmount(expenseOrderDO.getActualAmount().subtract(expenseOrderItemDO.getTotalAmount()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
// 老人公寓四舍五入调整
|
|
|
BigDecimal roundAmount = expenseOrderItemDO.getTotalAmount();
|
|
|
String count = expenseOrderItemDO.getCount().toString();
|
|
|
@@ -168,24 +193,24 @@ public class KingdeeApiImpl implements KingdeeApi {
|
|
|
.build();
|
|
|
FEntityDetailList.add(entityDetail);
|
|
|
});
|
|
|
- // date PayTime转换成yyyy-MM-dd字符串
|
|
|
- String payTimeStr = DateUtils.formatDate(new Date(), DateUtils.FORMAT_YEAR_MONTH_DAY);
|
|
|
+ BigDecimal totalAmount = FEntityDetailList.stream().map(ReceivableFEntityDetail::getFALLAMOUNTFOR_D).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ YearMonth yearMonth = YearMonth.parse(expenseOrderDO.getBillingMonth());
|
|
|
ReceivableFsubHeadFinc headFinc = ReceivableFsubHeadFinc.builder()
|
|
|
- .FACCNTTIMEJUDGETIME(payTimeStr)
|
|
|
+ .FACCNTTIMEJUDGETIME(yearMonth.atEndOfMonth().toString())
|
|
|
.FMAINBOOKSTDCURRID(KingdeeNumberDTO.builder().FNUMBER(FMAINBOOKSTDCURRID).build())
|
|
|
.FEXCHANGETYPE(KingdeeNumberDTO.builder().FNUMBER("HLTX01_SYS").build())
|
|
|
.FExchangeRate(new BigDecimal("1.0"))
|
|
|
.FTaxAmountFor(new BigDecimal("0.0"))
|
|
|
- .FNoTaxAmountFor(expenseOrderDO.getActualAmount())
|
|
|
+ .FNoTaxAmountFor(totalAmount)
|
|
|
.FISCARRIEDDATE(Boolean.FALSE.toString())
|
|
|
.build();
|
|
|
ReceivableSaveModelDTO saveModelDTO = ReceivableSaveModelDTO.builder()
|
|
|
.FID(fid)
|
|
|
.FBillTypeID(KingdeeNumberDTO.builder().FNUMBER("YSD02_SYS").build())
|
|
|
.FBillNo(expenseOrderDO.getBillOrderNumber())
|
|
|
- .FDATE(payTimeStr)
|
|
|
+ .FDATE(yearMonth.atEndOfMonth().toString())
|
|
|
.FISINIT(Boolean.FALSE.toString())
|
|
|
- .FENDDATE_H(expenseOrderDO.getBillingMonth())
|
|
|
+ .FENDDATE_H(yearMonth.atEndOfMonth().toString())
|
|
|
.FSETTLEORGID(KingdeeNumberDTO.builder().FNUMBER(orgId).build())
|
|
|
.FCUSTOMERID(KingdeeNumberDTO.builder().FNUMBER(customerid).build())
|
|
|
.FCURRENCYID(KingdeeNumberDTO.builder().FNUMBER(FMAINBOOKSTDCURRID).build())
|
|
|
@@ -242,194 +267,6 @@ public class KingdeeApiImpl implements KingdeeApi {
|
|
|
return expenseOrderDOS.size();
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- @TenantIgnore
|
|
|
- public Integer syncArReceivebill(Long tenantId) {
|
|
|
- Integer payStatus = 1;
|
|
|
- List<ExpenseOrderDO> expenseOrderDOS = orderMapper.selectList(new LambdaQueryWrapperX<ExpenseOrderDO>()
|
|
|
- .eq(ExpenseOrderDO::getPayStatus, payStatus)
|
|
|
- .eq(ExpenseOrderDO::getBillingMonth, "2025-05")
|
|
|
- .eq(ExpenseOrderDO::getTenantId, tenantId));
|
|
|
- if (null == expenseOrderDOS) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- // 根据elderId , billingMonth ,payStatus比较相同,保留createdTime最新的数据
|
|
|
- List<ExpenseOrderDO> deduplicate = deduplicate(expenseOrderDOS);
|
|
|
-
|
|
|
- for (ExpenseOrderDO expenseOrderDO : deduplicate) {
|
|
|
- if (expenseOrderDO.getBillingMonth().compareTo("2024-11") < 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- String payTimeStr = DateUtils.formatDate(expenseOrderDO.getPayTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
|
|
|
- ElderlyInfoDO elderlyInfoDO = elderlyInfoMapper.selectById(expenseOrderDO.getElderId());
|
|
|
- if (null == elderlyInfoDO) continue;
|
|
|
- if (StringUtil.isEmptyORNull(elderlyInfoDO.getKingdeeCustomerNumber())) continue;
|
|
|
- if (!elderlyInfoDO.getElderName().equals("吕福元")) continue;
|
|
|
- TenantDO tenantDO = tenantMapper.selectById(expenseOrderDO.getTenantId());
|
|
|
-// String customerid = StringUtil.isNotEmptyORNull(elderlyInfoDO.getCustomerid()) ? elderlyInfoDO.getCustomerid() : "CUST0002";
|
|
|
- String customerid = StringUtil.isNotEmptyORNull(elderlyInfoDO.getKingdeeCustomerNumber()) ? elderlyInfoDO.getKingdeeCustomerNumber() : "CUST0002";
|
|
|
-
|
|
|
- String tenantid = StringUtil.isNotEmptyORNull(tenantDO.getKingdeeOrgid()) ? tenantDO.getKingdeeOrgid() : "106";
|
|
|
-
|
|
|
- String FBillNo = "BILL" + expenseOrderDO.getBillOrderNumber();
|
|
|
-
|
|
|
- // 应收单默认货币
|
|
|
- AtomicReference<String> FMAINBOOKSTDCURRID = new AtomicReference<>("PRE001");
|
|
|
- List<KingdeeRecordDO> kingdeeRecordDOS = kingdeeRecordMapper.selectList(new LambdaQueryWrapperX<KingdeeRecordDO>()
|
|
|
- .eq(KingdeeRecordDO::getFBillNo, FBillNo)
|
|
|
- .eq(KingdeeRecordDO::getSyncState, 1)
|
|
|
- .orderByDesc(KingdeeRecordDO::getId).last("LIMIT 1"));
|
|
|
- String fid = "";
|
|
|
- if (null != kingdeeRecordDOS && kingdeeRecordDOS.size() > 0) {
|
|
|
- KingdeeRecordDO kingdeeRecordDO = kingdeeRecordDOS.get(0);
|
|
|
- fid = kingdeeRecordDO.getFid();
|
|
|
- }
|
|
|
- List<ReceiveBillSaveEntryDTO> freceivebillentryList = new ArrayList<>();
|
|
|
-
|
|
|
- List<ExpenseOrderItemDO> expenseOrderItemDOS = orderItemMapper.selectList(new LambdaQueryWrapperX<ExpenseOrderItemDO>()
|
|
|
- .eq(ExpenseOrderItemDO::getExpenseOrderId, expenseOrderDO.getId())
|
|
|
- .eq(ExpenseOrderItemDO::getPayStatus, expenseOrderDO.getPayStatus()));
|
|
|
- if (null == expenseOrderItemDOS) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- expenseOrderItemDOS.forEach(expenseOrderItemDO -> {
|
|
|
- // 费用类型
|
|
|
- // 床位费 CI047
|
|
|
- // 膳食费 CI109
|
|
|
- // 护理费 CI111
|
|
|
-
|
|
|
- // 风险预备金 CI002
|
|
|
- // 保证金 CI003
|
|
|
- String FCOSTID = "CI047";
|
|
|
- String FSETTLETYPEID = "JSFS04_SYS";
|
|
|
- String FPURPOSEID = "SFKYT01_SYS";
|
|
|
-// String FACCOUNTID = "398460100100148998";
|
|
|
-// String FACCOUNTID = "398460100100153498";
|
|
|
- String FACCOUNTID = "713373400267";
|
|
|
-
|
|
|
- if (BusinessConstants.EXPENSE_ITEM.equals(expenseOrderItemDO.getExpenseSource())) {
|
|
|
- ExpenseItemDO expenseItemDO = expenseItemMapper.selectById(expenseOrderItemDO.getSourceExpenseItemId());
|
|
|
- if (null == expenseItemDO) return;
|
|
|
- OverheadChargeDO overheadChargeDO = overheadChargeMapper.selectById(expenseItemDO.getItemId());
|
|
|
- if (null != overheadChargeDO && StringUtil.isNotEmptyORNull(overheadChargeDO.getKingdeeCostid())) {
|
|
|
- FCOSTID = overheadChargeDO.getKingdeeCostid();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- ExpensePayOrderDO expensePayOrderDO = payOrderMapper.selectById(expenseOrderItemDO.getPayOrderId());
|
|
|
- if (null != expensePayOrderDO) {
|
|
|
- List<ExpensePayOrderItemDO> expensePayOrderItemDOS = payOrderItemMapper.selectList(new LambdaQueryWrapperX<ExpensePayOrderItemDO>()
|
|
|
- .eq(ExpensePayOrderItemDO::getPayOrderId, expensePayOrderDO.getId())
|
|
|
- .eq(ExpensePayOrderItemDO::getTenantId, tenantId).orderByAsc(ExpensePayOrderItemDO::getId));
|
|
|
- if (null != expensePayOrderItemDOS && expensePayOrderItemDOS.size() > 0) {
|
|
|
- ExpensePayOrderItemDO expensePayOrderItemDO = expensePayOrderItemDOS.get(0);
|
|
|
- if (StringUtil.isNotEmptyORNull(expensePayOrderItemDO.getCurrencyCode())) {
|
|
|
- FMAINBOOKSTDCURRID.set(expensePayOrderItemDO.getCurrencyCode());
|
|
|
- }
|
|
|
- if (StringUtil.isNotEmptyORNull(expensePayOrderItemDO.getBankAccount())) {
|
|
|
- FACCOUNTID = expensePayOrderItemDO.getBankAccount();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- BigDecimal roundAmount = expenseOrderItemDO.getRoundAmount();
|
|
|
- if (null == roundAmount) return;
|
|
|
-
|
|
|
- String count = expenseOrderItemDO.getCount().toString();
|
|
|
- // 判断是负数
|
|
|
- if (roundAmount.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
- count = "-" + count;
|
|
|
- }
|
|
|
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DateUtils.FORMAT_YEAR_MONTH_DAY);
|
|
|
- LocalDate billingDate = LocalDate.parse(expenseOrderDO.getBillingMonth() + "-01", formatter);
|
|
|
- LocalDate lastDayOfMonth = billingDate.withDayOfMonth(billingDate.lengthOfMonth());
|
|
|
- // 转换成String
|
|
|
- String lastDayOfMonthStr = lastDayOfMonth.format(formatter);
|
|
|
- ReceiveBillSaveEntryDTO freceivebillentry = ReceiveBillSaveEntryDTO.builder()
|
|
|
- .FSETTLETYPEID(KingdeeNumberDTO.builder().FNUMBER(FSETTLETYPEID).build())
|
|
|
- .FPURPOSEID(KingdeeNumberDTO.builder().FNUMBER(FPURPOSEID).build())
|
|
|
- .FRECTOTALAMOUNTFOR(roundAmount)
|
|
|
- .FRECAMOUNTFOR_E(roundAmount)
|
|
|
- .FRECNOTAXAMOUNTFOR(roundAmount)
|
|
|
- .FSETTLEDISTAMOUNTFOR(new BigDecimal(0.0))
|
|
|
- .FHANDLINGCHARGEFOR(new BigDecimal(0.0))
|
|
|
- .FOVERUNDERAMOUNTFOR(new BigDecimal(0.0))
|
|
|
- .FACCOUNTID(KingdeeNumberDTO.builder().FNUMBER(FACCOUNTID).build())
|
|
|
- .FOPPOSITEBANKACCOUNT("")
|
|
|
- .FOPPOSITEBANKNAME("")
|
|
|
- .FPrice(expenseOrderItemDO.getPrice())
|
|
|
- .FQty(expenseOrderItemDO.getCount())
|
|
|
- .FPOSTDATE(lastDayOfMonthStr)
|
|
|
- .FRECNOTAXAMOUNTFOR(roundAmount)
|
|
|
- .FRECNOTAXAMOUNT(roundAmount)
|
|
|
- .FWRITTENOFFTAXAMOUNTFOR(roundAmount)
|
|
|
- .FWRITTENOFFTAXAMOUNT(roundAmount)
|
|
|
- .FCOSTID(KingdeeNumberDTO.builder().FNUMBER(FCOSTID).build())
|
|
|
- .FCOMMENT(expenseOrderItemDO.getItemName())
|
|
|
- .build();
|
|
|
- freceivebillentryList.add(freceivebillentry);
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
- ReceiveBillSaveModelDTO saveModelDTO = ReceiveBillSaveModelDTO.builder()
|
|
|
- .FID(fid)
|
|
|
- .FBillNo(FBillNo)
|
|
|
- .FBillTypeID(KingdeeNumberDTO.builder().FNUMBER("SKDLX01_SYS").build())
|
|
|
- .FPAYORGID(KingdeeNumberDTO.builder().FNUMBER(tenantid).build())
|
|
|
-// .FSETTLEORGID(KingdeeNumberDTO.builder().FNUMBER(tenantid).build())
|
|
|
-// .FSALEORGID(KingdeeNumberDTO.builder().FNUMBER(tenantid).build())
|
|
|
- .FDATE(expenseOrderDO.getBillingMonth())
|
|
|
- .FCONTACTUNITTYPE("BD_Customer")
|
|
|
- .FCONTACTUNIT(KingdeeNumberDTO.builder().FNUMBER(customerid).build())
|
|
|
- .FPAYUNITTYPE("BD_Customer")
|
|
|
- .FPAYUNIT(KingdeeNumberDTO.builder().FNUMBER(customerid).build())
|
|
|
- .FCURRENCYID(KingdeeNumberDTO.builder().FNUMBER(FMAINBOOKSTDCURRID.get()).build())
|
|
|
- .FEXCHANGERATE(new BigDecimal("1.0"))
|
|
|
- .FSETTLECUR(KingdeeNumberDTO.builder().FNUMBER(FMAINBOOKSTDCURRID.get()).build())
|
|
|
- .FSETTLERATE(new BigDecimal("1.0"))
|
|
|
- .FISINIT(Boolean.FALSE.toString())
|
|
|
- .FISCARRYRATE(Boolean.FALSE.toString())
|
|
|
- .FDOCUMENTSTATUS("Z")
|
|
|
- .FBUSINESSTYPE("1")
|
|
|
- .FCancelStatus("A")
|
|
|
- .FSETTLEMAINBOOKID(KingdeeNumberDTO.builder().FNUMBER(FMAINBOOKSTDCURRID.get()).build())
|
|
|
- .FRECEIVEBILLENTRY(freceivebillentryList)
|
|
|
-
|
|
|
- .FBUSINESSTYPE("FY")
|
|
|
-
|
|
|
-
|
|
|
- .build();
|
|
|
-
|
|
|
- ReceiveBillSaveDTO saveDTO = ReceiveBillSaveDTO.builder()
|
|
|
- .IsDeleteEntry(Boolean.TRUE.toString())
|
|
|
- .IsVerifyBaseDataField(Boolean.FALSE.toString())
|
|
|
- .IsEntryBatchFill(Boolean.TRUE.toString())
|
|
|
- .ValidateFlag(Boolean.TRUE.toString())
|
|
|
- .NumberSearch(Boolean.TRUE.toString())
|
|
|
- .IsAutoAdjustField(Boolean.FALSE.toString())
|
|
|
- .InterationFlags("")
|
|
|
- .IgnoreInterationFlag("")
|
|
|
- .IsControlPrecision(Boolean.FALSE.toString())
|
|
|
- .ValidateRepeatJson(Boolean.FALSE.toString())
|
|
|
- .model(saveModelDTO)
|
|
|
- .build();
|
|
|
-
|
|
|
- Gson gson = new Gson();
|
|
|
- // 将ReceivableSaveDTO转换成json字符串
|
|
|
- String json = gson.toJson(saveDTO);
|
|
|
- System.out.println("json = " + json);
|
|
|
- try {
|
|
|
- String billId = arReceivebillSave(getK3CloudApi(tenantId), json, expenseOrderDO.getBillOrderNumber(), expenseOrderDO.getElderId(),tenantId);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return null;
|
|
|
- }
|
|
|
@Override
|
|
|
@TenantIgnore
|
|
|
public String syncArReceivebillNewBatch(List<Long> expenseOrderIdList) {
|
|
|
@@ -453,146 +290,206 @@ public class KingdeeApiImpl implements KingdeeApi {
|
|
|
ElderlyInfoDO elderlyInfoDO = elderlyInfoMapper.selectById(expenseOrderDO.getElderId());
|
|
|
if (null == elderlyInfoDO) continue;
|
|
|
Long tenantId = expenseOrderDO.getTenantId();
|
|
|
- if(tenantId == null){
|
|
|
+ if (tenantId == null) {
|
|
|
msg.append(elderlyInfoDO.getElderName()).append(",").append(expenseOrderDO.getBillingMonth()).append("账单不存在机构id<br/>");
|
|
|
continue;
|
|
|
}
|
|
|
- if(expenseOrderDO.getIsPushKingdeeReceiveBill()){
|
|
|
+ if (expenseOrderDO.getIsPushKingdeeReceiveBill()) {
|
|
|
msg.append(elderlyInfoDO.getElderName()).append(",").append(expenseOrderDO.getBillingMonth()).append("账单已经推送过金蝶收款单<br/>");
|
|
|
continue;
|
|
|
}
|
|
|
Long elderId = elderlyInfoDO.getId();
|
|
|
- if (StringUtil.isEmptyORNull(elderlyInfoDO.getKingdeeCustomerNumber())) continue;
|
|
|
+ if (StringUtil.isEmptyORNull(elderlyInfoDO.getKingdeeCustomerNumber())) {
|
|
|
+ msg.append(elderlyInfoDO.getElderName()).append("该长者金蝶编号为空\n");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
TenantDO tenantDO = tenantMapper.selectById(expenseOrderDO.getTenantId());
|
|
|
String kingedeeCustomerId = elderlyInfoDO.getKingdeeCustomerNumber();
|
|
|
- String FBillNo = "BILL" + expenseOrderDO.getBillOrderNumber();
|
|
|
+ String baseBillNo = "BILL" + expenseOrderDO.getBillOrderNumber();
|
|
|
String kingedeeTenantId = tenantDO.getKingdeeOrgid();
|
|
|
- // 应收单默认货币
|
|
|
- AtomicReference<String> FMAINBOOKSTDCURRID = new AtomicReference<>("PRE001");
|
|
|
- String fid = "";
|
|
|
- List<ReceiveBillSaveEntryDTO> freceivebillentryList = new ArrayList<>();
|
|
|
- // 费用类型
|
|
|
- // 床位费 C0001
|
|
|
- // 膳食费 CI048
|
|
|
- // 护理费 CI050
|
|
|
- // 长护险 CI051
|
|
|
- // 服务费 CI049
|
|
|
- // 其他 CI046
|
|
|
- // 风险预备金 CI002
|
|
|
- String FSETTLETYPEID = "JSFS04_SYS";
|
|
|
- String FPURPOSEID = "SFKYT01_SYS";
|
|
|
+ String currency = "PRE001";
|
|
|
+
|
|
|
List<EnterpriseBankInfoDO> openAccountList = enterpriseBankInfoMapper.selectList(new LambdaQueryWrapperX<EnterpriseBankInfoDO>()
|
|
|
.eq(EnterpriseBankInfoDO::getTenantId, tenantId));
|
|
|
String FACCOUNTID = "";
|
|
|
- if (null != openAccountList && openAccountList.size() > 0) {
|
|
|
- FACCOUNTID = openAccountList.get(0).getAccountName();
|
|
|
- } else {
|
|
|
- FACCOUNTID = "398460100100153498";
|
|
|
+ if (null != openAccountList && !openAccountList.isEmpty()) {
|
|
|
+ FACCOUNTID = openAccountList.get(0).getBankAccount();
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(FACCOUNTID)) {
|
|
|
+ throw exceptionCustomMsg(COMMON_ERROR, "不存在银行账户,请联系管理员处理");
|
|
|
}
|
|
|
-// BigDecimal payAmount = expenseOrderDO.getPayableAmount();
|
|
|
+
|
|
|
+ BigDecimal normalAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal facilityAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal depositAmount = BigDecimal.ZERO;
|
|
|
+
|
|
|
List<ExpenseOrderItemDO> expenseOrderItemList = orderItemMapper.selectList(new LambdaQueryWrapperX<ExpenseOrderItemDO>()
|
|
|
.eq(ExpenseOrderItemDO::getExpenseOrderId, expenseOrderDO.getId())
|
|
|
.eq(ExpenseOrderItemDO::getPayStatus, BooleanEnum.TRUE.getValue()));
|
|
|
+
|
|
|
for (ExpenseOrderItemDO expenseOrderItemDO : expenseOrderItemList) {
|
|
|
- if(expenseOrderItemDO.getTotalAmount().compareTo(BigDecimal.ZERO) == 0){
|
|
|
+ if (expenseOrderItemDO.getTotalAmount().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (BusinessConstants.LONG_TERM_CARE_INSURANCE.equals(expenseOrderItemDO.getExpenseSource())) {
|
|
|
continue;
|
|
|
}
|
|
|
- if(BusinessConstants.LONG_TERM_CARE_INSURANCE.equals(expenseOrderItemDO.getExpenseSource())){
|
|
|
+ String itemName = StringUtils.defaultString(expenseOrderItemDO.getItemName());
|
|
|
+ if (itemName.contains("设施费")) {
|
|
|
+ facilityAmount = facilityAmount.add(expenseOrderItemDO.getTotalAmount());
|
|
|
continue;
|
|
|
}
|
|
|
String FCOSTID = getFCOSTID(expenseOrderItemDO);
|
|
|
- if(StringUtils.isBlank(FCOSTID)){
|
|
|
+ if ("CI002".equals(FCOSTID)
|
|
|
+ || itemName.contains("风险金")
|
|
|
+ || itemName.contains("预备金")
|
|
|
+ || itemName.contains("保证金")
|
|
|
+ || itemName.contains("押金")) {
|
|
|
+ depositAmount = depositAmount.add(expenseOrderItemDO.getTotalAmount());
|
|
|
continue;
|
|
|
}
|
|
|
- ReceiveBillSaveEntryDTO freceivebillentry = ReceiveBillSaveEntryDTO.builder()
|
|
|
- .FSETTLETYPEID(KingdeeNumberDTO.builder().FNUMBER(FSETTLETYPEID).build())
|
|
|
- .FPURPOSEID(KingdeeNumberDTO.builder().FNUMBER(FPURPOSEID).build())
|
|
|
- .FRECTOTALAMOUNTFOR(expenseOrderItemDO.getTotalAmount())
|
|
|
- .FRECAMOUNTFOR_E(expenseOrderItemDO.getTotalAmount())
|
|
|
- .FRECNOTAXAMOUNTFOR(expenseOrderItemDO.getTotalAmount())
|
|
|
- .FSETTLEDISTAMOUNTFOR(new BigDecimal(0.0))
|
|
|
- .FHANDLINGCHARGEFOR(new BigDecimal(0.0))
|
|
|
- .FOVERUNDERAMOUNTFOR(new BigDecimal(0.0))
|
|
|
- .FACCOUNTID(KingdeeNumberDTO.builder().FNUMBER(FACCOUNTID).build())
|
|
|
- .FOPPOSITEBANKACCOUNT("")
|
|
|
- .FOPPOSITEBANKNAME("")
|
|
|
- .FPrice(expenseOrderItemDO.getActualPrice())
|
|
|
- .FQty(expenseOrderItemDO.getCount())
|
|
|
- .FPOSTDATE(payTimeStr)
|
|
|
- .FRECNOTAXAMOUNTFOR(expenseOrderItemDO.getTotalAmount())
|
|
|
- .FRECNOTAXAMOUNT(expenseOrderItemDO.getTotalAmount())
|
|
|
- .FWRITTENOFFTAXAMOUNTFOR(expenseOrderItemDO.getTotalAmount())
|
|
|
- .FWRITTENOFFTAXAMOUNT(expenseOrderItemDO.getTotalAmount())
|
|
|
- .FCOSTID(KingdeeNumberDTO.builder().FNUMBER(FCOSTID).build())
|
|
|
- .FCOMMENT("")
|
|
|
- .build();
|
|
|
- freceivebillentryList.add(freceivebillentry);
|
|
|
+ normalAmount = normalAmount.add(expenseOrderItemDO.getTotalAmount());
|
|
|
}
|
|
|
- ReceiveBillSaveModelDTO saveModelDTO = ReceiveBillSaveModelDTO.builder()
|
|
|
- .FID(fid)
|
|
|
- .FBillNo(FBillNo)
|
|
|
- .FBillTypeID(KingdeeNumberDTO.builder().FNUMBER("SKDLX01_SYS").build())
|
|
|
- .FPAYORGID(KingdeeNumberDTO.builder().FNUMBER(kingedeeTenantId).build())
|
|
|
- .FDATE(payTimeStr)
|
|
|
- .FCONTACTUNITTYPE("BD_Customer")
|
|
|
- .FCONTACTUNIT(KingdeeNumberDTO.builder().FNUMBER(kingedeeCustomerId).build())
|
|
|
- .FPAYUNITTYPE("BD_Customer")
|
|
|
- .FPAYUNIT(KingdeeNumberDTO.builder().FNUMBER(kingedeeCustomerId).build())
|
|
|
- .FCURRENCYID(KingdeeNumberDTO.builder().FNUMBER(FMAINBOOKSTDCURRID.get()).build())
|
|
|
- .FEXCHANGERATE(new BigDecimal("1.0"))
|
|
|
- .FSETTLECUR(KingdeeNumberDTO.builder().FNUMBER(FMAINBOOKSTDCURRID.get()).build())
|
|
|
- .FSETTLERATE(new BigDecimal("1.0"))
|
|
|
- .FISINIT(Boolean.FALSE.toString())
|
|
|
- .FISCARRYRATE(Boolean.FALSE.toString())
|
|
|
- .FDOCUMENTSTATUS("Z")
|
|
|
- .FBUSINESSTYPE("1")
|
|
|
- .FCancelStatus("A")
|
|
|
- .FSETTLEMAINBOOKID(KingdeeNumberDTO.builder().FNUMBER(FMAINBOOKSTDCURRID.get()).build())
|
|
|
- .FRECEIVEBILLENTRY(freceivebillentryList)
|
|
|
- .FBUSINESSTYPE("FY")
|
|
|
- .build();
|
|
|
- ReceiveBillSaveDTO saveDTO = ReceiveBillSaveDTO.builder()
|
|
|
- .IsDeleteEntry(Boolean.TRUE.toString())
|
|
|
- .IsVerifyBaseDataField(Boolean.FALSE.toString())
|
|
|
- .IsEntryBatchFill(Boolean.TRUE.toString())
|
|
|
- .ValidateFlag(Boolean.TRUE.toString())
|
|
|
- .NumberSearch(Boolean.TRUE.toString())
|
|
|
- .IsAutoAdjustField(Boolean.FALSE.toString())
|
|
|
- .InterationFlags("")
|
|
|
- .IgnoreInterationFlag("")
|
|
|
- .IsControlPrecision(Boolean.FALSE.toString())
|
|
|
- .ValidateRepeatJson(Boolean.FALSE.toString())
|
|
|
- .model(saveModelDTO)
|
|
|
- .build();
|
|
|
- Gson gson = new Gson();
|
|
|
- // 将ReceivableSaveDTO转换成json字符串
|
|
|
- String json = gson.toJson(saveDTO);
|
|
|
- System.out.println("json = " + json);
|
|
|
+
|
|
|
+ boolean needPushNormal = normalAmount.compareTo(BigDecimal.ZERO) != 0;
|
|
|
+ boolean needPushFacility = facilityAmount.compareTo(BigDecimal.ZERO) != 0;
|
|
|
+ boolean needPushDeposit = depositAmount.compareTo(BigDecimal.ZERO) != 0;
|
|
|
+ if (!needPushNormal && !needPushFacility && !needPushDeposit) {
|
|
|
+ msg.append(elderlyInfoDO.getElderName()).append(",").append(expenseOrderDO.getBillingMonth()).append("账单无可推送收款明细<br/>");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String remark = "";
|
|
|
+ boolean allSuccess = true;
|
|
|
try {
|
|
|
- String billId = arReceivebillSave(getK3CloudApi(tenantId), json, expenseOrderDO.getBillOrderNumber(), elderId,tenantId);
|
|
|
+ if (needPushNormal) {
|
|
|
+ YearMonth billingMonth = YearMonth.parse(expenseOrderDO.getBillingMonth());
|
|
|
+ remark = "生活费" + billingMonth.getMonthValue() + "月";
|
|
|
+ List<ReceiveBillSaveEntryDTO> normalEntryList = Collections.singletonList(
|
|
|
+ buildReceiveBillEntry(FACCOUNTID, payTimeStr, normalAmount, "CI001", "SFKYT01_SYS", remark)
|
|
|
+ );
|
|
|
+ String billId = pushReceiveBill(tenantId, elderId, expenseOrderDO.getBillOrderNumber(), baseBillNo,
|
|
|
+ "SKDLX01_SYS", kingedeeTenantId, kingedeeCustomerId, payTimeStr, currency, normalEntryList,remark);
|
|
|
+ if (StringUtils.isBlank(billId)) {
|
|
|
+ allSuccess = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (needPushFacility) {
|
|
|
+ remark = "一次性设施购置费";
|
|
|
+ List<ReceiveBillSaveEntryDTO> facilityEntryList = Collections.singletonList(
|
|
|
+ buildReceiveBillEntry(FACCOUNTID, payTimeStr, facilityAmount, "CI005", "SFKYT02_SYS", remark)
|
|
|
+ );
|
|
|
+ String billId = pushReceiveBill(tenantId, elderId, expenseOrderDO.getBillOrderNumber() + "-SSF", baseBillNo + "-SSF",
|
|
|
+ "SKDLX01_SYS", kingedeeTenantId, kingedeeCustomerId, payTimeStr, currency, facilityEntryList,remark);
|
|
|
+ if (StringUtils.isBlank(billId)) {
|
|
|
+ allSuccess = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (needPushDeposit) {
|
|
|
+ remark = "医疗押金";
|
|
|
+ List<ReceiveBillSaveEntryDTO> depositEntryList = Collections.singletonList(
|
|
|
+ buildReceiveBillEntry(FACCOUNTID, payTimeStr, depositAmount, "CI002", "SFKYT41_SYS", remark)
|
|
|
+ );
|
|
|
+ String billId = pushReceiveBill(tenantId, elderId, expenseOrderDO.getBillOrderNumber() + "-YJ", baseBillNo + "-YJ",
|
|
|
+ "SKDLX02_SYS", kingedeeTenantId, kingedeeCustomerId, payTimeStr, currency, depositEntryList,remark);
|
|
|
+ if (StringUtils.isBlank(billId)) {
|
|
|
+ allSuccess = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
msg.append(elderlyInfoDO.getElderName()).append(",").append(expenseOrderDO.getBillingMonth()).append("账单推送金蝶收款单");
|
|
|
- if(StringUtils.isBlank(billId)){
|
|
|
+ if (!allSuccess) {
|
|
|
msg.append("失败。<br/>");
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
msg.append("成功。<br/>");
|
|
|
expenseOrderDO.setIsPushKingdeeReceiveBill(Boolean.TRUE);
|
|
|
successSet.add(expenseOrderDO);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- // 把异常前的成功记录更新为已推送
|
|
|
- if(successSet.size() > 0){
|
|
|
+ if (successSet.size() > 0) {
|
|
|
orderMapper.updateBatch(successSet);
|
|
|
}
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
- // 把异常前的成功记录更新为已推送
|
|
|
- if(successSet.size() > 0){
|
|
|
+ if (successSet.size() > 0) {
|
|
|
orderMapper.updateBatch(successSet);
|
|
|
}
|
|
|
return msg.toString();
|
|
|
}
|
|
|
|
|
|
+ private ReceiveBillSaveEntryDTO buildReceiveBillEntry(String accountId, String payTimeStr, BigDecimal amount,
|
|
|
+ String costId, String purposeId, String comment) {
|
|
|
+ return ReceiveBillSaveEntryDTO.builder()
|
|
|
+ .FSETTLETYPEID(KingdeeNumberDTO.builder().FNUMBER("JSFS04_SYS").build())
|
|
|
+ .FPURPOSEID(KingdeeNumberDTO.builder().FNUMBER(purposeId).build())
|
|
|
+ .FRECTOTALAMOUNTFOR(amount)
|
|
|
+ .FRECAMOUNTFOR_E(amount)
|
|
|
+ .FRECNOTAXAMOUNTFOR(amount)
|
|
|
+ .FSETTLEDISTAMOUNTFOR(BigDecimal.ZERO)
|
|
|
+ .FHANDLINGCHARGEFOR(BigDecimal.ZERO)
|
|
|
+ .FOVERUNDERAMOUNTFOR(BigDecimal.ZERO)
|
|
|
+ .FACCOUNTID(KingdeeNumberDTO.builder().FNUMBER(accountId).build())
|
|
|
+ .FOPPOSITEBANKACCOUNT("")
|
|
|
+ .FOPPOSITEBANKNAME("")
|
|
|
+ .FPrice(amount)
|
|
|
+ .FQty(1)
|
|
|
+ .FPOSTDATE(payTimeStr)
|
|
|
+ .FRECNOTAXAMOUNT(amount)
|
|
|
+ .FWRITTENOFFTAXAMOUNTFOR(amount)
|
|
|
+ .FWRITTENOFFTAXAMOUNT(amount)
|
|
|
+ .FCOSTID(KingdeeNumberDTO.builder().FNUMBER(costId).build())
|
|
|
+ .F_PAEZ_Base(KingdeeNumberDTO.builder().FNUMBER(costId).build())
|
|
|
+ .FCOMMENT(comment)
|
|
|
+ .build();
|
|
|
+ }
|
|
|
+
|
|
|
+ private String pushReceiveBill(Long tenantId, Long elderId, String recordBillNo, String kdBillNo,
|
|
|
+ String billTypeId, String kingedeeTenantId, String kingedeeCustomerId, String payTimeStr,
|
|
|
+ String currency, List<ReceiveBillSaveEntryDTO> entryList,String remark) throws Exception {
|
|
|
+ ReceiveBillSaveModelDTO saveModelDTO = ReceiveBillSaveModelDTO.builder()
|
|
|
+ .FID("")
|
|
|
+ .FBillNo(kdBillNo)
|
|
|
+ .FBillTypeID(KingdeeNumberDTO.builder().FNUMBER(billTypeId).build())
|
|
|
+ .FPAYORGID(KingdeeNumberDTO.builder().FNUMBER(kingedeeTenantId).build())
|
|
|
+ .FDATE(payTimeStr)
|
|
|
+ .FCONTACTUNITTYPE("BD_Customer")
|
|
|
+ .FCONTACTUNIT(KingdeeNumberDTO.builder().FNUMBER(kingedeeCustomerId).build())
|
|
|
+ .FPAYUNITTYPE("BD_Customer")
|
|
|
+ .FPAYUNIT(KingdeeNumberDTO.builder().FNUMBER(kingedeeCustomerId).build())
|
|
|
+ .FCURRENCYID(KingdeeNumberDTO.builder().FNUMBER(currency).build())
|
|
|
+ .FEXCHANGERATE(new BigDecimal("1.0"))
|
|
|
+ .FSETTLECUR(KingdeeNumberDTO.builder().FNUMBER(currency).build())
|
|
|
+ .FSETTLERATE(new BigDecimal("1.0"))
|
|
|
+ .FISINIT(Boolean.FALSE.toString())
|
|
|
+ .FISCARRYRATE(Boolean.FALSE.toString())
|
|
|
+ .FDOCUMENTSTATUS("Z")
|
|
|
+ .FBUSINESSTYPE("FY")
|
|
|
+ .FCancelStatus("A")
|
|
|
+ .FREMARK(remark)
|
|
|
+ .FSETTLEMAINBOOKID(KingdeeNumberDTO.builder().FNUMBER(currency).build())
|
|
|
+ .FRECEIVEBILLENTRY(entryList)
|
|
|
+ .build();
|
|
|
+ ReceiveBillSaveDTO saveDTO = ReceiveBillSaveDTO.builder()
|
|
|
+ .IsDeleteEntry(Boolean.TRUE.toString())
|
|
|
+ .IsVerifyBaseDataField(Boolean.FALSE.toString())
|
|
|
+ .IsEntryBatchFill(Boolean.TRUE.toString())
|
|
|
+ .ValidateFlag(Boolean.TRUE.toString())
|
|
|
+ .NumberSearch(Boolean.TRUE.toString())
|
|
|
+ .IsAutoAdjustField(Boolean.FALSE.toString())
|
|
|
+ .InterationFlags("")
|
|
|
+ .IgnoreInterationFlag("")
|
|
|
+ .IsControlPrecision(Boolean.FALSE.toString())
|
|
|
+ .ValidateRepeatJson(Boolean.FALSE.toString())
|
|
|
+ .model(saveModelDTO)
|
|
|
+ .build();
|
|
|
+ Gson gson = new Gson();
|
|
|
+ String json = gson.toJson(saveDTO);
|
|
|
+ System.out.println("json = " + json);
|
|
|
+ return arReceivebillSave(getK3CloudApi(tenantId), json, recordBillNo, elderId, tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public K3CloudApi getK3CloudApi(Long tenantId) {
|
|
|
SocialTypeEnum environment = SocialTypeEnum.KINGDEE_PRODUCT;
|