通宇推送nc;

This commit is contained in:
王奎兴
2026-03-09 20:58:27 +08:00
parent 6e52d85cbf
commit 5e28c10342
17 changed files with 590 additions and 279 deletions
@@ -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<ReconciliationPO> reconciliationPOS = reconciliationDomainService.queryList(reconciliationDO);
for (ReconciliationPO reconciliationPO : reconciliationPOS) {
Long reconciliationId = reconciliationPO.getReconciliationId();
List<ReconciliationItem> reconciliationItems = reconciliationItemMapper.selectList(new QueryWrapper<ReconciliationItem>()
.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<ReconciliationItemDTO> 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("对账单审核失败");
}
}
}
}
@@ -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;
}
@@ -34,4 +34,12 @@ public interface ReconciliationMapper extends BaseMapper<Reconciliation>
* 插入对账单并使用传入的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);
}
@@ -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<ReconciliationMapper, Reconc
if(reconciliation.getSynchronousStatus()==1){
throw new ServiceException("该记录已同步,不需要再次同步");
}
try {
Date date = reconciliation.getCreateTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -635,229 +632,8 @@ public class ReconciliationImpl extends ServiceImpl<ReconciliationMapper, Reconc
}
}
}else if(reconciliation.getOrganizationName().contains("通宇")){
if (reconciliation.getIsInvoice() != 2) {
throw new ServiceException("该记录还未开票,不允许同步");
}
if(result.getCode()==200){
String url = "";
SysDepartInterfaceInfoDTO query= new SysDepartInterfaceInfoDTO();
query.setOrganizationId(reconciliation.getOrganizationId());
query.setOrganizationName(reconciliation.getOrganizationName());
query.setInterfaceType("nc");
List<SysDepartInterfaceInfoPo> urlList = thirdPartyServiceFeign.queryList(query);
if (urlList != null && urlList.size() > 0) {
url = urlList.get(0).getInterfaceTypeValue();
} else {
throw new ServiceException("未找到该组织的推送地址!");
}
List<TmsOrder> 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<TmsTransportNote> 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<TmsInvoiceListDetailsVO> ajaxResult2=wlhyServiceFeign.selectInvoiceListById(reconciliation.getInvoiceId());
if(ajaxResult2.getCode()==200){
TmsInvoiceListDetailsVO tmsInvoiceListDetailsVO= ajaxResult2.getData();
if(ObjectUtil.isNotNull(tmsInvoiceListDetailsVO)) {
invoiceNumber=tmsInvoiceListDetailsVO.getTmsMakeOutInvoices().get(0).getInvoiceNumber();
}
}
List<ReconciliationAccount> reconciliationAccountList=reconciliationAccountMapper.selectList(new QueryWrapper<ReconciliationAccount>().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<ReconciliationMapper, Reconc
return true;
}
public boolean synchronousNc_TY(String businessDocumentDetaliId) {
Reconciliation reconciliation=reconciliationMapper.selectById(businessDocumentDetaliId);
if(reconciliation.getSynchronousStatus()==1){
throw new ServiceException("该记录已同步,不需要再次同步");
}
try {
Date date = reconciliation.getCreateTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy");
SimpleDateFormat sdf2 = new SimpleDateFormat("MM");
String dateString = sdf.format(date);
String invoiceId = reconciliation.getInvoiceId();
ReconciliationDTO makeQuery=new ReconciliationDTO();
makeQuery.setInnerNumber(invoiceId);
R<List<TmsMakeOutInvoice>> makeList=wlhyServiceFeign.selectMakeOutInvoiceListByReconciliation(makeQuery);
if (makeList.getCode()==200){
for (TmsMakeOutInvoice make : makeList.getData()) {
List<Ysitem> ysitemList=new ArrayList<Ysitem>();
ReconciliationDTO reconciliationDTO=new ReconciliationDTO();
reconciliationDTO.setInnerNumber(reconciliation.getInnerNumber());
R<List<TmsOrder>> 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<SysDepartInterfaceInfoPo> 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<List<TmsMakeOutInvoiceItem>> itemR = wlhyServiceFeign.selectMakeOutInvoiceItemList(make);
if (itemR.getCode()==200) {
List<TmsMakeOutInvoiceItem> 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<String> 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<ReconciliationMapper, Reconc
}
}
}else if(reconciliation.getOrganizationName().contains("通宇")){
boolean b = synchronousNcSK_TY(businessDocumentDetaliId);
}
} catch (JAXBException e) {
e.printStackTrace();
}
}
return true;
}
public boolean synchronousNcSK_TY(String businessDocumentDetaliId) {
Reconciliation reconciliation=reconciliationMapper.selectById(businessDocumentDetaliId);
if(reconciliation.getSynchronousStatus()==1){
throw new ServiceException("该记录已同步,不需要再次同步");
}
try {
Date date = reconciliation.getCreateTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy");
SimpleDateFormat sdf2 = new SimpleDateFormat("MM");
String dateString = sdf.format(date);
String invoiceId = reconciliation.getInvoiceId();
ReconciliationDTO makeQuery=new ReconciliationDTO();
makeQuery.setInnerNumber(invoiceId);
R<List<TmsMakeOutInvoice>> makeList=wlhyServiceFeign.selectMakeOutInvoiceListByReconciliation(makeQuery);
if (makeList.getCode()==200){
for (TmsMakeOutInvoice make : makeList.getData()) {
List<SKitem> ysitemList=new ArrayList<SKitem>();
ReconciliationDTO reconciliationDTO=new ReconciliationDTO();
reconciliationDTO.setInnerNumber(reconciliation.getInnerNumber());
R<List<TmsOrder>> 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<ReconciliationMapper, Reconc
} else {
throw new ServiceException("未找到该组织的推送地址!");
}
if(result.getCode()==200){
List<TmsOrder> list=result.getData();
R<List<TmsMakeOutInvoiceItem>> itemR = wlhyServiceFeign.selectMakeOutInvoiceItemList(make);
String makerCodeNc = "";
if(itemR.getCode()==200){
List<TmsMakeOutInvoiceItem> 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<ReconciliationMapper, Reconc
item.setObjtype("0");
item.setDirection("1");
item.setScomment("业务部:"+appointShipper+"物流费");
item.setPk_currtype(settlementCurrency);
item.setMoney_cr(String.valueOf(reconciliation.getCollectionAmount()));
item.setMoney_bal(String.valueOf(reconciliation.getCollectionAmount()));
item.setPk_currtype(settlementCurrencyNcCode);
item.setMoney_cr(String.valueOf(totalInvoiceValue));
item.setMoney_bal(String.valueOf(totalInvoiceValue));
ysitemList.add(item);
/* for(TmsOrder tmsOrder:list){
makerCodeNc=tmsOrder.getMakerCodeNc();
SKitem item=new SKitem();
item.setSo_deptid("NG0408");
item.setPk_deptid("NG0408");
item.setCheckdirection("ar");
item.setPk_psndoc(tmsOrder.getSalesmanCodeNc());
item.setCustomer(tmsOrder.getCustomerCodeNc());
item.setPurchaseorder(tmsOrder.getGoodsNumber());
item.setObjtype("0");
item.setDirection("1");
item.setScomment("业务部:"+tmsOrder.getAppointShipper()+"物流费");
item.setPk_currtype(tmsOrder.getSettlementCurrency());
item.setMoney_cr(String.valueOf(tmsOrder.getCollectedFreight()));
item.setMoney_bal(String.valueOf(tmsOrder.getCollectedFreight()));
ysitemList.add(item);
*//* AjaxResult ajaxResult=userServiceFeign.getShipperSummaryData(Long.valueOf(reconciliation.getSettlementPartyId()));
if(ajaxResult.get("code").toString().equals("200")){
Object userShipperPo= ajaxResult.get("data");
JSONObject jsonObject = new JSONObject((Map) userShipperPo);
if(org.apache.commons.lang.StringUtils.isBlank(jsonObject.get("customerNcCode").toString())){
throw new ServiceException("请先维护客户编码");
}
}*//*
}*/
}
}
SKbodys bodys=new SKbodys();
@@ -1248,10 +1265,11 @@ public class ReconciliationImpl extends ServiceImpl<ReconciliationMapper, Reconc
e.printStackTrace();
}
}
}
} catch (JAXBException e) {
e.printStackTrace();
}
} catch (JAXBException e) {
e.printStackTrace();
}
return true;
}
@@ -2,8 +2,10 @@ package com.linke.finance.domain.reconciliation.repository.po;
import com.linke.finance.domain.businessDocument.entity.BusinessDocument;
import com.linke.finance.domain.reconciliationAccount.entity.ReconciliationAccount;
import com.linke.finance.domain.reconciliationItem.entity.ReconciliationItem;
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.Data;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -267,4 +269,5 @@ public class ReconciliationPO extends BaseVOEntity{
private BigDecimal taxFreeFee;
@ApiModelProperty(value = "税额")
private BigDecimal taxAmount;
private List<ReconciliationItem> reconciliationItemDTOList;
}
@@ -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<ReconciliationItemDTO> reconciliationItemDTOList;
@ApiModelProperty("结算币种")
private String settlementCurrency;
}
@@ -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;
}
@@ -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<ReconciliationItem> {
}
@@ -37,6 +37,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="isInvoice" column="is_invoice" />
<result property="invoiceMakeTime" column="invoice_make_time" />
<result property="applyNumber" column="apply_number" />
<result property="taxAmount" column="tax_amount" />
<result property="taxFreeFee" column="tax_free_fee" />
<result property="accountInformation" column="account_information" />
</resultMap>
@@ -359,4 +362,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{taxFreeFee}
)
</insert>
<select id="getInvoiceItemName" parameterType="java.lang.String" resultType="java.lang.String">
select SUBJECT_NAME from "NGWL_TEST_SYSTEM".EXPENSE_ACCOUNT where status = 1 and SUBJECT_CODE = #{invoiceItemId} limit 1
</select>
<select id="getCustomerCodeNc" parameterType="java.lang.String" resultType="java.lang.String">
SELECT CUSTOMER_NC_CODE FROM NGWL_TEST_USER."USER_SHIPPER" where del_flag = 1 and SHIPPER_ID = #{actualInvoiceCustomerId} limit 1
</select>
<select id="getDocumentPreparerNcCode" parameterType="java.lang.String" resultType="java.lang.String">
SELECT DOCUMENT_PREPARER_NC_CODE FROM NGWL_TEST_USER."USER" where del_flag = 1 and user_id = #{salesmanId} limit 1
</select>
<select id="getSettlementCurrencyNcCode" parameterType="java.lang.String" resultType="java.lang.String">
SELECT NC_SYSTEM_CODE FROM NGWL_TEST_WLHY."TMS_SETTLEMENT_EXCHANGE_RATE" where IS_DELETE = '0' and ENGLISH_NAME = #{settlementCurrency} limit 1
</select>
</mapper>
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.linke.finance.domain.reconciliationItem.repository.mapper.ReconciliationItemMapper">
</mapper>