提交 441a8fe5 authored 作者: 杨启发's avatar 杨启发

Merge branch 'refs/heads/v20.9_settlement_20240805' into dev

package com.clx.performance.param.pc.owner;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class ConfirmBatchInvoiceParam {
@NotEmpty(message = "运单号不能为空")
@ApiModelProperty(value = "运单号")
private List<String> childNoList;
}
......@@ -27,7 +27,7 @@ public class TransportVO {
@ApiModelProperty(value = "同步失败原因", example = "1", dataType = "String")
private String syncMsg;
@ApiModelProperty(value = "结算状态 0 未结算 1 已结算 2结算中 ", example = "1234124", dataType = "String")
@ApiModelProperty(value = "结算状态 0 未结算 1 已结算 2结算中 3结算失败 ", example = "1234124", dataType = "String")
private Integer settleStatus;
@ApiModelProperty(value = "结算方", example = "1", dataType = "String")
private Integer settleOrg;
......
......@@ -7,6 +7,7 @@ import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.util.List;
@Getter
......@@ -15,8 +16,8 @@ import java.math.BigDecimal;
@NoArgsConstructor
public class UploadBatchInvoiceFileResultVO {
@ApiModelProperty(value="校验结果,0:数据无误,1:数据有误")
private Integer verifyResult;
@ApiModelProperty(value="校验结果,true:数据无误,false:数据有误")
private Boolean verifyResult;
@ApiModelProperty(value="错误文件地址")
private String errorFileUrl;
......@@ -29,4 +30,7 @@ public class UploadBatchInvoiceFileResultVO {
@ApiModelProperty(value="开票金额")
private BigDecimal invoiceFreightSum;
@ApiModelProperty(value="运单号")
private List<String> childNoList;
}
\ No newline at end of file
......@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerDetailCompanyUpdateParam;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.*;
import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePendingSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementOwnerDetailVO;
......@@ -86,10 +83,17 @@ public class CarrierSettlementOwnerDetailController {
@ApiOperation(value = "上传批量开票文件",notes = "<br>By:杨启发")
@PostMapping("/uploadBatchInvoiceFile")
public Result<UploadBatchInvoiceFileResultVO> uploadBatchInvoiceFile(@RequestParam("file") MultipartFile file) throws IOException {
public Result<UploadBatchInvoiceFileResultVO> uploadBatchInvoiceFile(@RequestPart("file") MultipartFile file) throws IOException {
return Result.ok(settlementOwnerDetailService.uploadBatchInvoiceFile(file));
}
@ApiOperation(value = "确认批量开票",notes = "<br>By:杨启发")
@PostMapping("/confirmBatchInvoice")
public Result<Object> confirmBatchInvoice(@RequestBody @Validated ConfirmBatchInvoiceParam param) {
settlementOwnerDetailService.confirmBatchInvoice(param.getChildNoList());
return Result.ok();
}
@ApiOperation(value = "导出货主结算单运单明细",notes = "<br>By:姜文业")
@PostMapping("/exportOwnerSettlementOrderDetailList")
public void exportCarrierSettlementOwnerPageList(@RequestBody @Validated PageOwnerSettlementOwnerDetailParam param, HttpServletResponse response) throws Exception {
......
......@@ -3,6 +3,8 @@ package com.clx.performance.dto.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class InvoiceData {
......@@ -13,9 +15,14 @@ public class InvoiceData {
private String invoiceType;
@ExcelProperty("开票金额")
private Double invoiceFreight;
private BigDecimal invoiceFreight;
@ExcelProperty("备注")
private String remark;
/**
* 装货净重(单位吨)
*/
private BigDecimal loadNet;
}
......@@ -2,20 +2,45 @@ package com.clx.performance.listener.excel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.excel.InvoiceData;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import lombok.AllArgsConstructor;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.List;
import static com.clx.performance.enums.settle.SettlementOwnerDetailEnum.InvoiceStatus.NO;
import static com.clx.performance.enums.settle.SettlementOwnerEnum.InvoiceType.ORDINARY;
@AllArgsConstructor
public class InvoiceDataListener extends AnalysisEventListener<InvoiceData> {
private final List<InvoiceData> invoiceDataList;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;;
@Override
public void invoke(InvoiceData invoiceData, AnalysisContext context) {
// 每解析一行都会调用一次,逐行校验数据
PageInvoiceOwnerSettlementOwnerDetailParam param = new PageInvoiceOwnerSettlementOwnerDetailParam();
param.setInvoiceStatus(NO.getCode());
param.setChildNo(invoiceData.getChildNo());
//param.setInvoiceType(ORDINARY.getCode());
IPage<SettlementOwnerDetail> page = settlementOwnerDetailDao.pageInvoiceOwnerSettlementOrderDetailList(param);
List<SettlementOwnerDetail> records = page.getRecords();
if (CollectionUtils.isEmpty(records)) {
invoiceData.setRemark("校验失败(运单编号不匹配)");
}else if(!ORDINARY.getCode().equals(records.get(0).getInvoiceType())){
invoiceData.setRemark("校验失败(开票标识非普通单)");
}else if(records.get(0).getInvoiceFreight().compareTo(invoiceData.getInvoiceFreight().multiply(new BigDecimal(100))) != 0){
invoiceData.setRemark("校验失败(开票金额不匹配)");
}else {
invoiceData.setRemark("校验通过");
invoiceData.setLoadNet(records.get(0).getLoadNet());
}
invoiceDataList.add(invoiceData);
}
......
......@@ -19,6 +19,8 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
@Slf4j
@Service
public class OrderChildBrokerMqHandlerServiceImpl implements OrderChildBrokerMqHandlerService {
......@@ -75,6 +77,10 @@ public class OrderChildBrokerMqHandlerServiceImpl implements OrderChildBrokerMqH
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(settlementOwnerDetail.getReportFlag(), com.clx.order.enums.OrderEnum.ReportFlag.NO.getCode())){
return;
}
try{
// 更新broker
orderChildBrokerService.orderChildUpdate(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
......
......@@ -427,7 +427,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementMqService.settlementPlatformAutoConfirmUpdate(settlementOwnerDetail.getSettlementNo());
}
else {
else if (Objects.equals(result.getSettleStatus(), 3) ) {
SettlementOrderChildRisk settlementOrderChildRisk = new SettlementOrderChildRisk();
settlementOrderChildRisk.setChildNo(orderChild.getChildNo());
settlementOrderChildRisk.setTruckNo(orderChild.getTruckNo());
......
......@@ -38,12 +38,8 @@ import com.clx.performance.vo.pc.owner.settle.CountOwnerSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.PageOwnerSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.UploadBatchInvoiceFileResultVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
......@@ -52,6 +48,15 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import com.msl.common.result.Result;
import com.msl.document.api.feign.FileUploadFeign;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
......@@ -84,6 +89,9 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
@Autowired
private OrderChildBrokerMqService orderChildBrokerMqService;
@Autowired
private FileUploadFeign fileUploadFeign;
@Override
......@@ -681,20 +689,33 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
@Override
public UploadBatchInvoiceFileResultVO uploadBatchInvoiceFile(MultipartFile file) throws IOException {
List<InvoiceData> invoiceDataList = new ArrayList<>();
EasyExcel.read(file.getInputStream(), InvoiceData.class, new InvoiceDataListener(invoiceDataList)).sheet().doRead();
// 解析上传的Excel文件
EasyExcel.read(file.getInputStream(), InvoiceData.class, new InvoiceDataListener(invoiceDataList,settlementOwnerDetailDao)).sheet().doRead();
boolean verifyResult = invoiceDataList.stream().allMatch(item -> "校验通过".equals(item.getRemark()));
Result<String> uploadResult = null;
if (!verifyResult) {
// 将校验后的数据写入新的Excel文件
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
EasyExcel.write(outputStream, InvoiceData.class).sheet("校验结果").doWrite(invoiceDataList);
// 将文件上传到OSS
uploadResult = fileUploadFeign.uploadBytes(outputStream.toByteArray(), null, null);
}
UploadBatchInvoiceFileResultVO vo = new UploadBatchInvoiceFileResultVO();
vo.setVerifyResult(0);
vo.setErrorFileUrl("");
vo.setOrderChildSum(0);
vo.setLoadWeightSum(new BigDecimal("0"));
vo.setInvoiceFreightSum(new BigDecimal("0"));
List<String> childNoList = new ArrayList<>();
vo.setVerifyResult(verifyResult);
vo.setErrorFileUrl(uploadResult==null?null:uploadResult.getData());
vo.setOrderChildSum(invoiceDataList.size());
vo.setLoadWeightSum(invoiceDataList.stream().map(InvoiceData::getLoadNet).reduce(BigDecimal.ZERO,BigDecimal::add));
vo.setInvoiceFreightSum(invoiceDataList.stream().map(InvoiceData::getInvoiceFreight).reduce(BigDecimal.ZERO,BigDecimal::add));
vo.setChildNoList(invoiceDataList.stream().map(InvoiceData::getChildNo).collect(Collectors.toList()));
return vo;
}
@Override
public void confirmBatchInvoice(List<String> childNoList) {
settlementOwnerDetailDao.updateSettlementByChildNoList(childNoList);
// 发送mq (运单更新)
orderChildBrokerMqService.orderChildUpdate(childNoList);
return vo;
}
}
......@@ -20,6 +20,7 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
/**
* @author liruixin
......@@ -55,4 +56,6 @@ public interface SettlementOwnerDetailService {
SXSSFWorkbook exportInvoiceOwnerSettlementOrderDetail(PageInvoiceOwnerSettlementOwnerDetailParam param);
UploadBatchInvoiceFileResultVO uploadBatchInvoiceFile(MultipartFile file) throws IOException;
void confirmBatchInvoice(List<String> childNoList);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论