From 5e28c10342dfd564d70906e5b2e208d6387b43c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com> Date: Mon, 9 Mar 2026 20:58:27 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E5=AE=87=E6=8E=A8=E9=80=81nc=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mhd/system/api/WlhyServiceFeign.java | 10 +- .../system/api/domain/TmsMakeOutInvoice.java | 10 +- .../api/domain/TmsMakeOutInvoiceItem.java | 77 +++ .../factory/RemoteWlhyFallbackFactory.java | 18 +- .../core/domain/dto/ReconciliationDTO.java | 5 + .../domain/dto/ReconciliationItemDTO.java | 52 ++ .../common/core/domain/entity/TmsOrder.java | 7 +- .../ReconciliationApplicationService.java | 24 +- .../reconciliation/entity/Reconciliation.java | 4 +- .../mapper/ReconciliationMapper.java | 10 +- .../persistence/ReconciliationImpl.java | 558 +++++++++--------- .../repository/po/ReconciliationPO.java | 3 + .../repository/todo/ReconciliationDO.java | 5 + .../entity/ReconciliationItem.java | 54 ++ .../mapper/ReconciliationItemMapper.java | 7 + .../reconciliation/ReconciliationMapper.xml | 18 + .../ReconciliationItemMapper.xml | 7 + 17 files changed, 590 insertions(+), 279 deletions(-) create mode 100644 mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/TmsMakeOutInvoiceItem.java create mode 100644 mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/dto/ReconciliationItemDTO.java create mode 100644 mhd_finance/src/main/java/com/linke/finance/domain/reconciliationItem/entity/ReconciliationItem.java create mode 100644 mhd_finance/src/main/java/com/linke/finance/domain/reconciliationItem/repository/mapper/ReconciliationItemMapper.java create mode 100644 mhd_finance/src/main/resources/mapper/reconciliationItem/ReconciliationItemMapper.xml diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java index abbe2d014..23a2e70ca 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java @@ -516,6 +516,14 @@ public interface WlhyServiceFeign { @PostMapping(value = "/feign/outBoundSummary/getOrderListByReconciliation") public R> getOrderListByReconciliation(@RequestBody ReconciliationDTO reconciliationDTO); + @ApiOperation(value = "查询对账单对应的发票明细", notes = "查询对账单对应的发票明细") + @PostMapping(value = "/feign/outBoundSummary/selectMakeOutInvoiceListByReconciliation") + public R> selectMakeOutInvoiceListByReconciliation(@RequestBody ReconciliationDTO reconciliationDTO); + + @ApiOperation(value = "查询对账单对应的发票明细子项", notes = "查询对账单对应的发票明细子项") + @PostMapping(value = "/feign/outBoundSummary/selectMakeOutInvoiceItemList") + public R> selectMakeOutInvoiceItemList(@RequestBody TmsMakeOutInvoice tmsMakeOutInvoice); + @GetMapping(value = "/ntocc/tmsSettlementExchangeRate/queryById") public Result queryById(@RequestParam(name="id",required=true) String id); @@ -529,4 +537,4 @@ public interface WlhyServiceFeign { @GetMapping("/feign/order/cancelIssueDocuments") public AjaxResult cancelIssueDocuments(@RequestParam(name="executeOrderId") String executeOrderId); -} +} \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/TmsMakeOutInvoice.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/TmsMakeOutInvoice.java index 9d39b3b26..8b3ed17f3 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/TmsMakeOutInvoice.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/TmsMakeOutInvoice.java @@ -127,4 +127,12 @@ public class TmsMakeOutInvoice implements Serializable { private String actualInvoiceCustomerId; @ApiModelProperty(value = "实际开票客户名称") private String actualInvoiceCustomerName; -} + @ApiModelProperty(value = "无税费用") + private BigDecimal taxFreeFee; + @ApiModelProperty(value = "税额") + private BigDecimal taxAmount; + @ApiModelProperty(value = "税率") + private Double taxRate; + @ApiModelProperty(value = "费用类别") + private String feeType; +} \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/TmsMakeOutInvoiceItem.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/TmsMakeOutInvoiceItem.java new file mode 100644 index 000000000..09099f195 --- /dev/null +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/TmsMakeOutInvoiceItem.java @@ -0,0 +1,77 @@ +package com.mhd.system.api.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mhd.common.core.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * @Description: 销项发票表 + * @Author: lfs + * @Date: 2020-02-19 08:50:47 + * @Version: V1.0 + */ +@Data +@TableName("tms_make_out_invoice_item") +public class TmsMakeOutInvoiceItem implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ID_WORKER_STR) + private String id; + /**makeId*/ + @ApiModelProperty(value = "makeId") + private String makeId; + /**发票金额*/ + @ApiModelProperty(value = "发票金额") + private BigDecimal invoiceValue; + /**发票备注*/ + @ApiModelProperty(value = "发票备注") + @Excel(name = "发票备注", width = 15) + private String remark; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private String createBy; + /**创建日期*/ + @ApiModelProperty(value = "创建日期") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; + /**更新人*/ + @ApiModelProperty(value = "更新人") + private String updateBy; + /**更新日期*/ + @ApiModelProperty(value = "更新日期") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + /**是否删除(0-否,1-是)*/ + @ApiModelProperty(value = "是否删除(0-否,1-是)") + private Integer isDelete; + + @ApiModelProperty(value = "开票项目") + private String invoiceItem; + @ApiModelProperty(value = "开票项目名称") + private String invoiceItemName; + @ApiModelProperty(value = "实际开票客户id") + private String actualInvoiceCustomerId; + @ApiModelProperty(value = "实际开票客户名称") + private String actualInvoiceCustomerName; + @ApiModelProperty(value = "无税费用") + private BigDecimal taxFreeFee; + @ApiModelProperty(value = "税额") + private BigDecimal taxAmount; + @ApiModelProperty(value = "税率") + private Double taxRate; + @ApiModelProperty(value = "费用类别") + private String feeType; +} \ No newline at end of file diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWlhyFallbackFactory.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWlhyFallbackFactory.java index 1d6b20828..1ef64cb38 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWlhyFallbackFactory.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/factory/RemoteWlhyFallbackFactory.java @@ -519,6 +519,22 @@ public class RemoteWlhyFallbackFactory implements FallbackFactory> selectMakeOutInvoiceListByReconciliation(ReconciliationDTO reconciliationDTO) { + R> res = new R<>(); + res.setMsg("查询失败"+cause.getMessage()); + res.setCode(R.FAIL); + return res; + } + + @Override + public R> selectMakeOutInvoiceItemList(TmsMakeOutInvoice tmsMakeOutInvoice) { + R> res = new R<>(); + res.setMsg("查询失败"+cause.getMessage()); + res.setCode(R.FAIL); + return res; + } + @Override public Result queryById(String id) { return null; @@ -535,4 +551,4 @@ public class RemoteWlhyFallbackFactory implements FallbackFactory reconciliationItemDTOList; + @ApiModelProperty("结算币种") + private String settlementCurrency; } \ No newline at end of file diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/dto/ReconciliationItemDTO.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/dto/ReconciliationItemDTO.java new file mode 100644 index 000000000..be95a13b5 --- /dev/null +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/dto/ReconciliationItemDTO.java @@ -0,0 +1,52 @@ +package com.mhd.common.core.domain.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.mhd.common.core.annotation.Excel; +import com.mhd.common.core.web.domain.BaseVOEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + + +/** + * 对账单对象 reconciliation + * + * @author gen + * @date 2024-01-23 + */ + +@Data +public class ReconciliationItemDTO extends BaseVOEntity { + private static final long serialVersionUID = 1L; + @ApiModelProperty("id") + @TableId(type = IdType.AUTO) + private Long id; + @ApiModelProperty("对账单表id") + private Long reconciliationId; + /**发票金额*/ + @ApiModelProperty(value = "发票金额") + @Excel(name = "发票金额", width = 15) + private BigDecimal invoiceValue; + /**发票备注*/ + @ApiModelProperty(value = "发票备注") + @Excel(name = "发票备注", width = 15) + private String remark; + @ApiModelProperty(value = "开票项目") + private String invoiceItem; + @ApiModelProperty(value = "开票项目名称") + private String invoiceItemName; + @ApiModelProperty(value = "实际开票客户id") + private String actualInvoiceCustomerId; + @ApiModelProperty(value = "实际开票客户名称") + private String actualInvoiceCustomerName; + @ApiModelProperty(value = "无税费用") + private BigDecimal taxFreeFee; + @ApiModelProperty(value = "税额") + private BigDecimal taxAmount; + @ApiModelProperty(value = "税率") + private Double taxRate; + @ApiModelProperty(value = "费用类别") + private String feeType; +} \ No newline at end of file diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/TmsOrder.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/TmsOrder.java index 0f66f92ff..3585deb4f 100644 --- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/TmsOrder.java +++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/TmsOrder.java @@ -527,7 +527,10 @@ public class TmsOrder implements Serializable { @ApiModelProperty("制单人编码nc") private String makerCodeNc; - + @ApiModelProperty("业务员ID") + private String salesmanId; + @ApiModelProperty("业务员") + private String salesmanName; @ApiModelProperty("业务员编码nc") private String salesmanCodeNc; @@ -563,4 +566,4 @@ public class TmsOrder implements Serializable { @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private java.util.Date documentDate; -} +} \ No newline at end of file diff --git a/mhd_finance/src/main/java/com/linke/finance/application/server/reconciliation/ReconciliationApplicationService.java b/mhd_finance/src/main/java/com/linke/finance/application/server/reconciliation/ReconciliationApplicationService.java index 20270d1b2..f7da13365 100644 --- a/mhd_finance/src/main/java/com/linke/finance/application/server/reconciliation/ReconciliationApplicationService.java +++ b/mhd_finance/src/main/java/com/linke/finance/application/server/reconciliation/ReconciliationApplicationService.java @@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceResponse; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -21,6 +20,8 @@ import com.linke.finance.domain.reconciliationAccount.entity.ReconciliationAccou import com.linke.finance.domain.reconciliationAccount.repository.mapper.ReconciliationAccountMapper; import com.linke.finance.domain.reconciliationAccount.repository.todo.ReconciliationAccountDO; import com.linke.finance.domain.reconciliationAccount.service.ReconciliationAccountDomainService; +import com.linke.finance.domain.reconciliationItem.entity.ReconciliationItem; +import com.linke.finance.domain.reconciliationItem.repository.mapper.ReconciliationItemMapper; import com.linke.finance.domain.revenueExpensesRecord.entity.RevenueExpensesRecord; import com.linke.finance.domain.revenueExpensesRecord.service.RevenueExpensesRecordDomainService; import com.linke.finance.domain.tmsReceipt.repository.mapper.TmsReceiptMapper; @@ -33,6 +34,7 @@ import com.linke.finance.interfaces.assembler.reconciliationAccount.Reconciliati import com.mhd.common.core.constant.SubjectConstants; import com.mhd.common.core.domain.dto.ReconciliationAccountDTO; import com.mhd.common.core.domain.dto.ReconciliationDTO; +import com.mhd.common.core.domain.dto.ReconciliationItemDTO; import com.mhd.common.core.domain.entity.TmsOrder; import com.mhd.common.core.domain.entity.Verification; import com.mhd.common.core.domain.po.OrganizationPo; @@ -93,6 +95,8 @@ public class ReconciliationApplicationService { @Autowired private ReconciliationAccountMapper reconciliationAccountMapper; + @Autowired + private ReconciliationItemMapper reconciliationItemMapper; /** @@ -180,6 +184,13 @@ public class ReconciliationApplicationService { return reconciliationPOS;*/ List reconciliationPOS = reconciliationDomainService.queryList(reconciliationDO); for (ReconciliationPO reconciliationPO : reconciliationPOS) { + + Long reconciliationId = reconciliationPO.getReconciliationId(); + List reconciliationItems = reconciliationItemMapper.selectList(new QueryWrapper() + .lambda().eq(ReconciliationItem::getReconciliationId, reconciliationId)); + + reconciliationPO.setReconciliationItemDTOList(reconciliationItems); + String innerNumber = reconciliationPO.getInnerNumber(); if (innerNumber != null && !innerNumber.trim().isEmpty()) { ReconciliationDTO reconciliationDTO = new ReconciliationDTO(); @@ -310,6 +321,15 @@ public class ReconciliationApplicationService { } reconciliationDO = reconciliationDomainService.insert(reconciliationDO); + List reconciliationItemDTOList = reconciliationDO.getReconciliationItemDTOList(); + if (reconciliationItemDTOList != null && reconciliationItemDTOList.size() > 0) { + for (ReconciliationItemDTO reconciliationItemDTO : reconciliationItemDTOList) { + ReconciliationItem reconciliationItem = new ReconciliationItem(); + BeanUtils.copyProperties(reconciliationItemDTO, reconciliationItem); + reconciliationItem.setReconciliationId(reconciliationDO.getReconciliationId()); + reconciliationItemMapper.insert(reconciliationItem); + } + } if(reconciliationDO==null){ throw new ServiceException("订单出账-生成应收账单失败!"); } @@ -840,4 +860,4 @@ public class ReconciliationApplicationService { throw new ServiceException("对账单审核失败"); } } -} +} \ No newline at end of file diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/entity/Reconciliation.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/entity/Reconciliation.java index 934ae0aa5..a7551095e 100644 --- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/entity/Reconciliation.java +++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/entity/Reconciliation.java @@ -234,7 +234,6 @@ public class Reconciliation extends BaseVOEntity{ @ApiModelProperty("nc同步状态 0-未同步 1-已同步") private Integer skSynchronousStatus; - @ApiModelProperty(value = "nc同步时间") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @@ -260,4 +259,7 @@ public class Reconciliation extends BaseVOEntity{ @ApiModelProperty(value = "税额") private BigDecimal taxAmount; + + @ApiModelProperty("结算币种") + private String settlementCurrency; } \ No newline at end of file diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/mapper/ReconciliationMapper.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/mapper/ReconciliationMapper.java index ec8588aff..22fe00328 100644 --- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/mapper/ReconciliationMapper.java +++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/mapper/ReconciliationMapper.java @@ -34,4 +34,12 @@ public interface ReconciliationMapper extends BaseMapper * 插入对账单并使用传入的createTime值 */ void insertWithCreateTime(Reconciliation reconciliation); -} + + String getInvoiceItemName(@Param("invoiceItemId") String invoiceItemId); + + String getCustomerCodeNc(@Param("actualInvoiceCustomerId") String actualInvoiceCustomerId); + + String getDocumentPreparerNcCode(@Param("salesmanId") String salesmanId); + + String getSettlementCurrencyNcCode(@Param("settlementCurrency") String settlementCurrency); +} \ No newline at end of file diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java index eb7c8c8a3..20df7591f 100644 --- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java +++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java @@ -45,9 +45,7 @@ import com.mhd.common.core.web.domain.AjaxResult; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.UserServiceFeign; import com.mhd.system.api.WlhyServiceFeign; -import com.mhd.system.api.domain.TmsInvoiceList; -import com.mhd.system.api.domain.TmsInvoiceListDetailsVO; -import com.mhd.system.api.domain.TmsTransportNote; +import com.mhd.system.api.domain.*; import com.mhd.system.api.model.LoginUser; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; @@ -422,7 +420,6 @@ public class ReconciliationImpl extends ServiceImpl urlList = thirdPartyServiceFeign.queryList(query); - if (urlList != null && urlList.size() > 0) { - url = urlList.get(0).getInterfaceTypeValue(); - } else { - throw new ServiceException("未找到该组织的推送地址!"); - } - List list=result.getData(); - if(ObjectUtil.isNotNull(list)){ - makerCodeNc=list.get(0).getMakerCodeNc(); - String salesmanCodeNc=list.get(0).getSalesmanCodeNc(); - String customerCodeNc=list.get(0).getCustomerCodeNc(); - String appointShipper=list.get(0).getAppointShipper(); - String settlementCurrency=list.get(0).getSettlementCurrency(); - makerCodeNc=list.get(0).getMakerCodeNc(); - String goodsNumber=list.get(0).getGoodsName(); - for(TmsOrder tmsOrder:list){ - R ajaxResult1=wlhyServiceFeign.selectByOrderNum(tmsOrder.getGoodsNumber()); - if(ajaxResult1.getCode()==200){ - TmsTransportNote tmsTransportNote= ajaxResult1.getData(); - if(ObjectUtil.isNotNull(tmsTransportNote)){ - if(ObjectUtil.isNotNull(tmsTransportNote.getIsPaper())){ - date=tmsTransportNote.getConfirmReceiptTime(); - if(null==date){ - date=new Date(); - } - dateString = sdf.format(date); - }else{ - throw new ServiceException("运单还没签收, 先签收"); - } - }else{ - throw new ServiceException("未查询到关联运单, 请核对"); - } - - } - - } - String invoiceNumber=reconciliation.getApplyNumber(); - R ajaxResult2=wlhyServiceFeign.selectInvoiceListById(reconciliation.getInvoiceId()); - if(ajaxResult2.getCode()==200){ - TmsInvoiceListDetailsVO tmsInvoiceListDetailsVO= ajaxResult2.getData(); - if(ObjectUtil.isNotNull(tmsInvoiceListDetailsVO)) { - invoiceNumber=tmsInvoiceListDetailsVO.getTmsMakeOutInvoices().get(0).getInvoiceNumber(); - } - - } - List reconciliationAccountList=reconciliationAccountMapper.selectList(new QueryWrapper().lambda() - .eq(ReconciliationAccount::getReconciliationId,businessDocumentDetaliId) - .eq(ReconciliationAccount::getDelFlag,1)); - if (ObjectUtil.isNotNull(reconciliationAccountList)&&reconciliationAccountList.size()>0){ - for (ReconciliationAccount reconciliationAccount:reconciliationAccountList){ - if(reconciliationAccount.getAmount().compareTo(BigDecimal.ZERO)>0){ - Ysitem item=new Ysitem(); - item.setSo_deptid("NG0408"); - item.setPk_deptid("NG0408"); - item.setPk_psndoc(salesmanCodeNc); - item.setCustomer(customerCodeNc); - item.setObjtype("0"); - item.setDirection("1"); - item.setScomment("业务部:应收"+appointShipper+reconciliationAccount.getSubjectName()+invoiceNumber); - // item.setPk_currtype("CNY"); - item.setPk_currtype(settlementCurrency); - item.setPurchaseorder(""); - item.setTaxrate("0"); - item.setQuantity_de("0"); - item.setMoney_de(String.valueOf(reconciliationAccount.getAmount())); - item.setMoney_bal(String.valueOf(reconciliationAccount.getAmount())); - if(reconciliationAccount.getRate().compareTo(BigDecimal.ZERO)>0){ - BigDecimal tax_de=reconciliationAccount.getAmount().multiply(reconciliationAccount.getRate().divide(BigDecimal.valueOf(100))).setScale(2,BigDecimal.ROUND_HALF_UP); - BigDecimal notax_de=reconciliationAccount.getAmount().subtract(tax_de); - item.setNotax_de(String.valueOf(notax_de)); - item.setLocal_tax_de(String.valueOf(notax_de)); - item.setTax_de(String.valueOf(tax_de)); - }else{ - BigDecimal tax_de=BigDecimal.ZERO; - BigDecimal notax_de=reconciliationAccount.getAmount().subtract(tax_de); - item.setNotax_de(String.valueOf(notax_de)); - item.setLocal_tax_de(String.valueOf(notax_de)); - item.setTax_de(String.valueOf(tax_de)); - } - item.setPrice(String.valueOf(reconciliationAccount.getAmount())); - item.setTaxprice(String.valueOf(reconciliationAccount.getAmount())); - item.setDef75("T10"); - item.setInvoiceno(invoiceNumber); - ysitemList.add(item); - } - } - }else{ - throw new ServiceException("未查询到账单的费用科目信息, 请核对"); - } - - Ysbodys bodys=new Ysbodys(); - bodys.setItem(ysitemList); - Ysbillhead billhead=new Ysbillhead(); - billhead.setPk_group("CNK"); - billhead.setPk_org("NG04"); - billhead.setSett_org("NG04"); - billhead.setCreationtime(dateString); - billhead.setCreator(makerCodeNc); - billhead.setPk_billtype("F0"); - billhead.setPk_tradetype("D0"); - billhead.setBillclass("ys"); - billhead.setIsinit("N"); - date=reconciliation.getCreateTime(); - dateString = sdf.format(date); - billhead.setBilldate(dateString); - billhead.setSyscode("0"); - billhead.setBillno(""); - billhead.setDef59(list.get(0).getContractNo()); - billhead.setSrc_syscode("0"); - billhead.setBillstatus("0"); - billhead.setBillmaker(makerCodeNc); - billhead.setPk_busitype(""); - billhead.setBillyear(sdf1.format(date)); - billhead.setBillperiod(sdf2.format(date)); - billhead.setEffectstatus("0"); - billhead.setDef28("nqyw"); - billhead.setDef29(reconciliation.getInnerNumber()); - billhead.setBodys(bodys); - Ysbill bill=new Ysbill(); - bill.setId("ys"+String.valueOf(reconciliation.getReconciliationId())); - bill.setBillhead(billhead); - Ysufinterface ufinterface=new Ysufinterface(); - ufinterface.setAccount("NKNC"); - ufinterface.setBilltype("F0"); - ufinterface.setBusinessunitcode(""); - ufinterface.setFilename(""); - ufinterface.setIsexchange("Y"); - ufinterface.setOrgcode("NG04"); - ufinterface.setReceiver("NG04"); - ufinterface.setReplace("Y"); - ufinterface.setRoottag(""); - ufinterface.setSender("nqyw"); - ufinterface.setBill(bill); - JAXBContext jaxbContext = JAXBContext.newInstance(Ysufinterface.class); - Marshaller marshaller = jaxbContext.createMarshaller(); - marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // 格式化输出,可选 - StringWriter sw = new StringWriter(); - marshaller.marshal(ufinterface, sw); - String xmlString = sw.toString(); // 这是要发送的XML字符串 - System.out.println(xmlString); - NcLog ncLog=new NcLog(); - ncLog.setOrderId(reconciliation.getReconciliationId()); - ncLog.setRequestBody(xmlString); - ncLog.setResponeBody(""); - ncLog.setType(0L); - ncLog.setOrganizationId(reconciliation.getOrganizationId()); - ncLog.setOrganizationName(reconciliation.getOrganizationName()); - ncLog.setTopOrganizationId(reconciliation.getTopOrganizationId()); - ncLogMapper.insert(ncLog); - reconciliation.setSynchronousStatus(1); - reconciliation.setSynchronousTime(new Date()); - reconciliation.setNcId("ys"+String.valueOf(reconciliation.getReconciliationId())); - //reconciliationMapper.updateById(reconciliation); - CloseableHttpClient httpClient = HttpClients.createDefault(); - HttpPost httpPost = new HttpPost(url); - StringEntity postingString = new StringEntity(xmlString, "UTF-8"); - httpPost.setEntity(postingString); - httpPost.setHeader("Content-type", "application/xml"); - try { - CloseableHttpResponse response = httpClient.execute(httpPost); - String responseString = EntityUtils.toString(response.getEntity()); - System.out.println(responseString); - ncLog.setResponeBody(responseString); - // 创建DOM解析器 - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document document = builder.parse(new InputSource(new StringReader(responseString))); - - // 获取根元素 - Element root = document.getDocumentElement(); - - // 获取ufinterface元素的属性 - String billtype = root.getAttribute("billtype"); - String filename = root.getAttribute("filename"); - System.out.println("billtype: " + billtype); - System.out.println("filename: " + filename); - - // 获取sendresult节点 - NodeList sendResultList = root.getElementsByTagName("sendresult"); - if (sendResultList.getLength() > 0) { - Element sendResult = (Element) sendResultList.item(0); - - // 获取子元素内容 - String bdocid = sendResult.getElementsByTagName("bdocid").item(0).getTextContent(); - String resultcode = sendResult.getElementsByTagName("resultcode").item(0).getTextContent(); - String content = sendResult.getElementsByTagName("content").item(0).getTextContent(); - - System.out.println("bdocid: " + bdocid); - System.out.println("resultcode: " + resultcode); - System.out.println("content: " + content); - if(resultcode.equals("1")){ - reconciliation.setSynchronousStatus(1); - }else{ - reconciliation.setSynchronousStatus(2); - } - } - ncLogMapper.updateById(ncLog); - reconciliationMapper.updateById(reconciliation); - response.close(); - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - httpClient.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - } + boolean b = synchronousNc_TY(businessDocumentDetaliId); } - - } catch (JAXBException e) { e.printStackTrace(); } @@ -865,6 +641,231 @@ public class ReconciliationImpl extends ServiceImpl> makeList=wlhyServiceFeign.selectMakeOutInvoiceListByReconciliation(makeQuery); + if (makeList.getCode()==200){ + for (TmsMakeOutInvoice make : makeList.getData()) { + List ysitemList=new ArrayList(); + ReconciliationDTO reconciliationDTO=new ReconciliationDTO(); + reconciliationDTO.setInnerNumber(reconciliation.getInnerNumber()); + R> result=wlhyServiceFeign.getOrderListByReconciliation(reconciliationDTO); + TmsOrder order = null; + if (result.getCode()==200){ + order = result.getData()!=null && result.getData().size()>0?result.getData().get(0):null; + } + if (order==null){ + throw new ServiceException("未找到对应订单信息"); + } + String url = ""; + SysDepartInterfaceInfoDTO query= new SysDepartInterfaceInfoDTO(); + query.setOrganizationId(reconciliation.getOrganizationId()); + query.setOrganizationName(reconciliation.getOrganizationName()); + query.setInterfaceType("nc"); + List urlList = thirdPartyServiceFeign.queryList(query); + if (urlList != null && urlList.size() > 0) { + url = urlList.get(0).getInterfaceTypeValue(); + } else { + throw new ServiceException("未找到该组织的推送地址!"); + } + + String makerCodeNc=order.getMakerCodeNc(); + String salesmanCodeNc=order.getSalesmanCodeNc(); + //String customerCodeNc=order.getCustomerCodeNc(); + String appointShipper=make.getActualInvoiceCustomerName(); + String actualInvoiceCustomerId = make.getActualInvoiceCustomerId(); + String customerCodeNc = reconciliationMapper.getCustomerCodeNc(actualInvoiceCustomerId); + String settlementCurrency=order.getSettlementCurrency(); + String salesmanId = order.getSalesmanId(); + String documentPreparerNcCode = reconciliationMapper.getDocumentPreparerNcCode(salesmanId); + makerCodeNc= documentPreparerNcCode; + String settlementCurrencyNcCode = reconciliationMapper.getSettlementCurrencyNcCode(settlementCurrency); + String invoiceNumber=make.getInvoiceNumber(); + R> itemR = wlhyServiceFeign.selectMakeOutInvoiceItemList(make); + if (itemR.getCode()==200) { + List data = itemR.getData(); + for (TmsMakeOutInvoiceItem item1 : data) { + if(item1.getInvoiceValue().compareTo(BigDecimal.ZERO)>0){ + Ysitem item=new Ysitem(); + item.setSo_deptid("NG0408"); + item.setPk_deptid("NG0408"); + //业务员nc + item.setPk_psndoc(salesmanCodeNc); + //客户nc + item.setCustomer(customerCodeNc); + item.setObjtype("0"); + item.setDirection("1"); + String invoiceItem = item1.getInvoiceItem(); + List names = new ArrayList<>(); + if (invoiceItem != null && !invoiceItem.isEmpty()) { + String[] items = invoiceItem.split(","); + for (String s : items) { + String invoiceItemName1 = reconciliationMapper.getInvoiceItemName(s); + names.add(invoiceItemName1); + } + } + String invoiceItemName = String.join(",", names); + item.setScomment("业务部:应收"+appointShipper+invoiceItemName+invoiceNumber); + // item.setPk_currtype("CNY"); + item.setPk_currtype(settlementCurrencyNcCode); + item.setPurchaseorder(""); + item.setTaxrate("0"); + item.setQuantity_de("0"); + item.setMoney_de(String.valueOf(item1.getInvoiceValue())); + item.setMoney_bal(String.valueOf(item1.getInvoiceValue())); + BigDecimal tax_de=item1.getTaxAmount(); + BigDecimal notax_de=item1.getTaxFreeFee(); + item.setNotax_de(String.valueOf(notax_de)); + item.setLocal_tax_de(String.valueOf(notax_de)); + item.setTax_de(String.valueOf(tax_de)); + item.setPrice(String.valueOf(item1.getInvoiceValue())); + item.setTaxprice(String.valueOf(item1.getInvoiceValue())); + item.setDef75("T10"); + item.setInvoiceno(invoiceNumber); + ysitemList.add(item); + } + } + } + + Ysbodys bodys=new Ysbodys(); + bodys.setItem(ysitemList); + Ysbillhead billhead=new Ysbillhead(); + billhead.setPk_group("CNK"); + billhead.setPk_org("NG04"); + billhead.setSett_org("NG04"); + billhead.setCreationtime(dateString); + billhead.setCreator(makerCodeNc); + billhead.setPk_billtype("F0"); + billhead.setPk_tradetype("D0"); + billhead.setBillclass("ys"); + billhead.setIsinit("N"); + date=reconciliation.getCreateTime(); + dateString = sdf.format(date); + billhead.setBilldate(dateString); + billhead.setSyscode("0"); + billhead.setBillno(""); + billhead.setDef59(""); + billhead.setSrc_syscode("0"); + billhead.setBillstatus("0"); + billhead.setBillmaker(makerCodeNc); + billhead.setPk_busitype(""); + billhead.setBillyear(sdf1.format(date)); + billhead.setBillperiod(sdf2.format(date)); + billhead.setEffectstatus("0"); + billhead.setDef28("nqyw"); + billhead.setDef29(reconciliation.getInnerNumber()); + billhead.setBodys(bodys); + Ysbill bill=new Ysbill(); + bill.setId("ys"+String.valueOf(reconciliation.getReconciliationId())); + bill.setBillhead(billhead); + Ysufinterface ufinterface=new Ysufinterface(); + ufinterface.setAccount("NKNC"); + ufinterface.setBilltype("F0"); + ufinterface.setBusinessunitcode(""); + ufinterface.setFilename(""); + ufinterface.setIsexchange("Y"); + ufinterface.setOrgcode("NG04"); + ufinterface.setReceiver("NG04"); + ufinterface.setReplace("Y"); + ufinterface.setRoottag(""); + ufinterface.setSender("nqyw"); + ufinterface.setBill(bill); + JAXBContext jaxbContext = JAXBContext.newInstance(Ysufinterface.class); + Marshaller marshaller = jaxbContext.createMarshaller(); + marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); + marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // 格式化输出,可选 + StringWriter sw = new StringWriter(); + marshaller.marshal(ufinterface, sw); + String xmlString = sw.toString(); // 这是要发送的XML字符串 + System.out.println(xmlString); + NcLog ncLog=new NcLog(); + ncLog.setOrderId(reconciliation.getReconciliationId()); + ncLog.setRequestBody(xmlString); + ncLog.setResponeBody(""); + ncLog.setType(0L); + ncLog.setOrganizationId(reconciliation.getOrganizationId()); + ncLog.setOrganizationName(reconciliation.getOrganizationName()); + ncLog.setTopOrganizationId(reconciliation.getTopOrganizationId()); + ncLogMapper.insert(ncLog); + reconciliation.setSynchronousStatus(1); + reconciliation.setSynchronousTime(new Date()); + reconciliation.setNcId("ys"+String.valueOf(reconciliation.getReconciliationId())); + //reconciliationMapper.updateById(reconciliation); + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(url); + StringEntity postingString = new StringEntity(xmlString, "UTF-8"); + httpPost.setEntity(postingString); + httpPost.setHeader("Content-type", "application/xml"); + try { + CloseableHttpResponse response = httpClient.execute(httpPost); + String responseString = EntityUtils.toString(response.getEntity()); + System.out.println(responseString); + ncLog.setResponeBody(responseString); + // 创建DOM解析器 + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.parse(new InputSource(new StringReader(responseString))); + + // 获取根元素 + Element root = document.getDocumentElement(); + + // 获取ufinterface元素的属性 + String billtype = root.getAttribute("billtype"); + String filename = root.getAttribute("filename"); + System.out.println("billtype: " + billtype); + System.out.println("filename: " + filename); + + // 获取sendresult节点 + NodeList sendResultList = root.getElementsByTagName("sendresult"); + if (sendResultList.getLength() > 0) { + Element sendResult = (Element) sendResultList.item(0); + + // 获取子元素内容 + String bdocid = sendResult.getElementsByTagName("bdocid").item(0).getTextContent(); + String resultcode = sendResult.getElementsByTagName("resultcode").item(0).getTextContent(); + String content = sendResult.getElementsByTagName("content").item(0).getTextContent(); + + System.out.println("bdocid: " + bdocid); + System.out.println("resultcode: " + resultcode); + System.out.println("content: " + content); + if(resultcode.equals("1")){ + reconciliation.setSynchronousStatus(1); + }else{ + reconciliation.setSynchronousStatus(2); + } + } + ncLogMapper.updateById(ncLog); + reconciliationMapper.updateById(reconciliation); + response.close(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + httpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + } catch (JAXBException e) { + e.printStackTrace(); + } + return true; + } + @Override public boolean synchronousNcSK(String businessDocumentDetaliIds) { String [] businessDocumentDetaliIdArray=businessDocumentDetaliIds.split(","); @@ -1062,7 +1063,43 @@ public class ReconciliationImpl extends ServiceImpl> makeList=wlhyServiceFeign.selectMakeOutInvoiceListByReconciliation(makeQuery); + if (makeList.getCode()==200){ + for (TmsMakeOutInvoice make : makeList.getData()) { + List ysitemList=new ArrayList(); + ReconciliationDTO reconciliationDTO=new ReconciliationDTO(); + reconciliationDTO.setInnerNumber(reconciliation.getInnerNumber()); R> result=wlhyServiceFeign.getOrderListByReconciliation(reconciliationDTO); + TmsOrder order = null; + if (result.getCode()==200){ + order = result.getData()!=null && result.getData().size()>0?result.getData().get(0):null; + } + if (order==null){ + throw new ServiceException("未找到对应订单信息"); + } String url = ""; SysDepartInterfaceInfoDTO query= new SysDepartInterfaceInfoDTO(); query.setOrganizationId(reconciliation.getOrganizationId()); @@ -1074,14 +1111,26 @@ public class ReconciliationImpl extends ServiceImpl list=result.getData(); + R> itemR = wlhyServiceFeign.selectMakeOutInvoiceItemList(make); + String makerCodeNc = ""; + if(itemR.getCode()==200){ + List list=itemR.getData(); if(ObjectUtil.isNotNull(list)){ - String salesmanCodeNc=list.get(0).getSalesmanCodeNc(); - String customerCodeNc=list.get(0).getCustomerCodeNc(); - String appointShipper=list.get(0).getAppointShipper(); - String settlementCurrency=list.get(0).getSettlementCurrency(); - makerCodeNc="luoyx"; + // 汇总 list 中 invoiceValue 的总值 + BigDecimal totalInvoiceValue = list.stream() + .map(TmsMakeOutInvoiceItem::getInvoiceValue) + .filter(java.util.Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + String salesmanCodeNc=order.getSalesmanCodeNc(); + String salesmanId = order.getSalesmanId(); + //String customerCodeNc=order.getCustomerCodeNc(); + String appointShipper=make.getActualInvoiceCustomerName(); + String actualInvoiceCustomerId = make.getActualInvoiceCustomerId(); + String customerCodeNc = reconciliationMapper.getCustomerCodeNc(actualInvoiceCustomerId); + String documentPreparerNcCode = reconciliationMapper.getDocumentPreparerNcCode(salesmanId); + String settlementCurrency=order.getSettlementCurrency(); + String settlementCurrencyNcCode = reconciliationMapper.getSettlementCurrencyNcCode(settlementCurrency); + makerCodeNc=documentPreparerNcCode; SKitem item=new SKitem(); item.setSo_deptid("NG0408"); item.setPk_deptid("NG0408"); @@ -1092,42 +1141,10 @@ public class ReconciliationImpl extends ServiceImpl reconciliationItemDTOList; } \ No newline at end of file diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/todo/ReconciliationDO.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/todo/ReconciliationDO.java index 9eeabe0bb..f32007dc3 100644 --- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/todo/ReconciliationDO.java +++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/todo/ReconciliationDO.java @@ -3,6 +3,7 @@ package com.linke.finance.domain.reconciliation.repository.todo; import com.linke.finance.domain.reconciliation.entity.ReconciliationOrderDetail; import com.mhd.common.core.annotation.Excel; import com.mhd.common.core.domain.dto.ReconciliationAccountDTO; +import com.mhd.common.core.domain.dto.ReconciliationItemDTO; import lombok.AllArgsConstructor; import lombok.Data; import java.util.Date; @@ -297,4 +298,8 @@ public class ReconciliationDO extends BaseVOEntity{ private BigDecimal taxFreeFee; @ApiModelProperty(value = "税额") private BigDecimal taxAmount; + + private List reconciliationItemDTOList; + @ApiModelProperty("结算币种") + private String settlementCurrency; } \ No newline at end of file diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliationItem/entity/ReconciliationItem.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliationItem/entity/ReconciliationItem.java new file mode 100644 index 000000000..bc36ded61 --- /dev/null +++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliationItem/entity/ReconciliationItem.java @@ -0,0 +1,54 @@ +package com.linke.finance.domain.reconciliationItem.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.mhd.common.core.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import com.mhd.common.core.web.domain.BaseVOEntity; +import java.math.BigDecimal; +import lombok.Data; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + + +/** + * 对账单对象 reconciliation + * + * @author gen + * @date 2024-01-23 + */ + +@Data +public class ReconciliationItem extends BaseVOEntity { + private static final long serialVersionUID = 1L; + @ApiModelProperty("id") + @TableId(type = IdType.AUTO) + private Long id; + @ApiModelProperty("对账单表id") + private Long reconciliationId; + /**发票金额*/ + @ApiModelProperty(value = "发票金额") + @Excel(name = "发票金额", width = 15) + private BigDecimal invoiceValue; + /**发票备注*/ + @ApiModelProperty(value = "发票备注") + @Excel(name = "发票备注", width = 15) + private String remark; + @ApiModelProperty(value = "开票项目") + private String invoiceItem; + @ApiModelProperty(value = "开票项目名称") + private String invoiceItemName; + @ApiModelProperty(value = "实际开票客户id") + private String actualInvoiceCustomerId; + @ApiModelProperty(value = "实际开票客户名称") + private String actualInvoiceCustomerName; + @ApiModelProperty(value = "无税费用") + private BigDecimal taxFreeFee; + @ApiModelProperty(value = "税额") + private BigDecimal taxAmount; + @ApiModelProperty(value = "税率") + private Double taxRate; + @ApiModelProperty(value = "费用类别") + private String feeType; +} \ No newline at end of file diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliationItem/repository/mapper/ReconciliationItemMapper.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliationItem/repository/mapper/ReconciliationItemMapper.java new file mode 100644 index 000000000..d28332763 --- /dev/null +++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliationItem/repository/mapper/ReconciliationItemMapper.java @@ -0,0 +1,7 @@ +package com.linke.finance.domain.reconciliationItem.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.linke.finance.domain.reconciliationItem.entity.ReconciliationItem; + +public interface ReconciliationItemMapper extends BaseMapper { +} \ No newline at end of file diff --git a/mhd_finance/src/main/resources/mapper/reconciliation/ReconciliationMapper.xml b/mhd_finance/src/main/resources/mapper/reconciliation/ReconciliationMapper.xml index 48f89613d..974dd1a7e 100644 --- a/mhd_finance/src/main/resources/mapper/reconciliation/ReconciliationMapper.xml +++ b/mhd_finance/src/main/resources/mapper/reconciliation/ReconciliationMapper.xml @@ -37,6 +37,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -359,4 +362,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{taxFreeFee} ) + + + + + + + \ No newline at end of file diff --git a/mhd_finance/src/main/resources/mapper/reconciliationItem/ReconciliationItemMapper.xml b/mhd_finance/src/main/resources/mapper/reconciliationItem/ReconciliationItemMapper.xml new file mode 100644 index 000000000..8810f3974 --- /dev/null +++ b/mhd_finance/src/main/resources/mapper/reconciliationItem/ReconciliationItemMapper.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file