提交 e8f79b5f authored 作者: jiangwujie's avatar jiangwujie

Merge remote-tracking branch 'origin/dev' into dev

......@@ -11,6 +11,6 @@ import lombok.ToString;
@NoArgsConstructor
public class SettlementPlatformAutoConfirmMqParam {
private Integer settlementId; //id
private String settlementNo;
}
package com.clx.performance.vo.pc.owner.settle;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
......@@ -23,6 +25,11 @@ public class OwnerPageSettlementOwnerVO {
private String settlementNo;
@ApiModelProperty(value = "开票标识:1网运单 2普通单")
private Integer invoiceType;
private String invoiceTypeMsg;
public String getInvoiceTypeMsg() {
return SettlementOwnerEnum.InvoiceType.getMsgByCode(invoiceType);
}
@ApiModelProperty(value = "货主编码")
private Long ownerUserNo;
@ApiModelProperty(value = "货主姓名")
......@@ -58,8 +65,18 @@ public class OwnerPageSettlementOwnerVO {
private String createTime;
@ApiModelProperty(value = "状态 10:待锁定 20:待对账 30:待货主确认 40:待货主付款 50:待平台确认付款 60:待平台付款 70:待货主确认付款 80:待邮寄发票 90:已完结")
private Integer status;
private String statusMsg;
public String getStatusMsg() {
return SettlementOwnerEnum.Status.getMsgByCode(status);
}
@ApiModelProperty(value = "结算方式 1装车净重 2卸车净重")
private Integer settlementWay;
private String settlementWayMsg;
public String getSettlementWayMsg() {
return SettlementWayEnum.WayType.getMsgByCode(settlementWay);
}
@ApiModelProperty(value="开票公司id",example = "1")
private Integer invoicingCompanyId; //开票公司id
......
......@@ -237,11 +237,11 @@ public class OrderChildLoanComponent {
log.info("1.1百分百预付不需要考虑借款账户");
return;
}
if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(settlementDriverDetail.getInvoiceType())) {
log.info("2.当前不是网运单,不需要处理借款标识,是否接单冻结的借款金额");
applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, orderChild.getChildNo()));
return;
}
// if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(settlementDriverDetail.getInvoiceType())) {
// log.info("2.当前不是网运单,不需要处理借款标识,是否接单冻结的借款金额");
// applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, orderChild.getChildNo()));
// return;
// }
if (settlementOwnerDetail.getPrepayFreight().compareTo(BigDecimal.ZERO) != 0) {
log.info("3.当前是网运单,但预付运费不为0,说明已经处理");
......
......@@ -6,6 +6,7 @@ import com.clx.performance.param.pc.owner.OwnerPaymentSettlementParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.clx.performance.service.settle.SettlementOwnerDetailService;
import com.clx.performance.service.settle.SettlementOwnerExportService;
import com.clx.performance.service.settle.SettlementOwnerService;
import com.clx.performance.vo.pc.carrier.settle.CarrierSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.OwnerPageSettlementOwnerVO;
......@@ -39,7 +40,7 @@ public class OwnerSettlementOwnerController {
private final SettlementOwnerDetailService settlementOwnerDetailService;
private final SettlementOwnerExportService settlementOwnerExportService;
@ApiOperation(value = "结算单详情",notes = "<br>By:李瑞新")
@GetMapping("/getOwnerSettlementOwnerDetail")
......@@ -114,5 +115,11 @@ public class OwnerSettlementOwnerController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "货主端-导出结算单列表",notes = "<br>By:艾庆国")
@PostMapping("/exportSettlementOwner")
public void exportSettlementOwner(@RequestBody @Validated PageOwnerSettlementParam param) {
settlementOwnerExportService.exportSettlementOwner(param);
}
}
......@@ -16,6 +16,7 @@ import com.clx.performance.dto.OwnerLoanMqDTO;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord;
......@@ -124,6 +125,10 @@ public class EventListenerComponent {
SettlementDriverDetail settlementDriverDetail = param.getSettlementDriverDetail();
OrderChild orderChild = param.getOrderChild();
if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(settlementDriverDetail.getInvoiceType())) {
applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, orderChild.getChildNo()));
}
else {
try {
//生成借款标识
orderChildLoanComponent.childLoanConfirmAfterProcess(settlementDriverDetail, settlementOwnerDetail, orderChild);
......@@ -134,6 +139,7 @@ public class EventListenerComponent {
log.error("处理货主借款监听器执行异常,数据为{},异常信息{}", JSONUtil.parse(param), ExceptionUtil.getMessage(e));
throw e;
}
}
log.info("处理货主借款监听器执行成功");
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
......
......@@ -121,7 +121,7 @@ public class SettlementJob {
for (SettlementOwner item : list) {
settlementMqService.settlementPlatformAutoConfirmUpdate(item.getId());
settlementMqService.settlementPlatformAutoConfirmUpdate(item.getSettlementNo());
}
} catch (Exception e) {
log.warn("结算单平台自动确认更新失败,msg:{}", ExceptionUtils.getStackTrace(e));
......
......@@ -153,18 +153,19 @@ public class OrderChildSyncTransportListener {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
// 未税 卸车减货损不用生成扣除相关流水逻辑
if (Objects.equals(invoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
&& Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
//生成提现记录
networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
}
else if (Objects.equals(invoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
// // 未税 卸车减货损不用生成扣除相关流水逻辑
// if (Objects.equals(invoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
// && Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
// && Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
// settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
// settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
// settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
//
// //生成提现记录
// networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
// }
// else
if (Objects.equals(invoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
//通过风控
List<OwnerRunningWaterRecord> runningWaterRecordList = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderChild.getOrderNo());
......
......@@ -17,6 +17,7 @@ import com.clx.performance.component.OwnerAccountComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderChildOperateRecordDao;
import com.clx.performance.dao.OrderChildPoundAuditDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.OrderCancelDTO;
import com.clx.performance.enums.*;
......@@ -24,6 +25,7 @@ import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildOperateRecord;
import com.clx.performance.model.OrderChildPoundAudit;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.ArtificialCancelOrderParam;
import com.clx.performance.param.pc.ArtificialCancelOrderQueryParam;
......@@ -56,6 +58,9 @@ import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.clx.performance.enums.OrderChildPoundAuditEnum.Status.APPROVED;
import static com.clx.performance.enums.ResultEnum.DATA_ERROR;
@Slf4j
@Service
@AllArgsConstructor
......@@ -90,6 +95,8 @@ public class OrderCancelServiceImpl implements OrderCancelService {
private final OwnerAccountComponent ownerAccountComponent;
private final OrderChildPoundAuditDao orderChildPoundAuditDao;
private final OrderChildOperateRecordDao orderChildOperateRecordDao;
......@@ -599,6 +606,12 @@ public class OrderCancelServiceImpl implements OrderCancelService {
*/
@Override
public void artificialCancelOrder(String orderChildNo, String remark) {
//磅单如果审核通过,该运单不允许取消
List<OrderChildPoundAudit> poundAuditList = orderChildPoundAuditDao.getPoundAuditList(orderChildNo);
if (poundAuditList.stream().anyMatch(item->APPROVED.getCode().equals(item.getStatus()))) {
throw new ServiceSystemException(DATA_ERROR, "该运单磅单已审核通过,不允许取消");
}
LocalDateTime now = LocalDateTime.now();
OrderChild orderChild = orderChildDao.getByChildNo(orderChildNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
//运单状态不在【装车成功】【前往目的地】【到达目的地】【收货待确认】范围中,不允许取消
......
......@@ -153,6 +153,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Autowired
private OrderChildBrokerMqService orderChildBrokerMqService;
@Autowired
private NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -375,13 +378,21 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Transactional(rollbackFor = Exception.class)
@Override
public void payStatusSync(SettlementPayStatusSyncMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderChild orderChild = orderChildDao
.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao
.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (!Objects.equals(settlementOwnerDetail.getInvoiceChannel(), SettlementOwnerDetailEnum.InvoiceChannel.BROKER.getCode())){
return;
}
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderChildSyncTransportRecord orderChildSyncTransportRecord = orderChildSyncTransportRecordDao
.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (!Objects.equals(orderChildSyncTransportRecord.getStatus(),
......@@ -397,9 +408,24 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
if (Objects.equals(result.getSettleStatus(), 1) ) {
if (Objects.equals(orderGoods.getPlatformFreightQuotationTaxType(),QuotationEnum.PlatformFreightQuotationTaxType.NO.getCode())
&& Objects.equals(orderGoods.getSettlementWay(), SettlementWayEnum.WayType.UNLOAD_LOSS.getCode())) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
//生成提现记录
networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
}
PayStatusNotifyDTO payStatusNotifyDTO = new PayStatusNotifyDTO();
payStatusNotifyDTO.setChildNo(mq.getChildNo());
orderChildSyncTransportRecordService.updateStatus(payStatusNotifyDTO);
// 发送mq (结算单平台自动确认)
settlementMqService.settlementPlatformAutoConfirmUpdate(settlementOwnerDetail.getSettlementNo());
}
else {
SettlementOrderChildRisk settlementOrderChildRisk = new SettlementOrderChildRisk();
......@@ -899,7 +925,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Override
public void settlementPlatformAutoConfirm(SettlementPlatformAutoConfirmMqParam mq) {
SettlementOwner settlementOwner = settlementOwnerDao
.findById(mq.getSettlementId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
.findBySettlementNo(mq.getSettlementNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (!Objects.equals(settlementOwner.getStatus(), SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode())){
return;
......
......@@ -138,9 +138,9 @@ public class SettlementMqServiceImpl implements SettlementMqService {
}
@Override
public void settlementPlatformAutoConfirmUpdate(Integer settlementId) {
public void settlementPlatformAutoConfirmUpdate(String settlementNo) {
SettlementPlatformAutoConfirmMqParam mq = new SettlementPlatformAutoConfirmMqParam();
mq.setSettlementId(settlementId);
mq.setSettlementNo(settlementNo);
MqDelay delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
......
package com.clx.performance.service.impl.settle;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.clx.performance.service.settle.SettlementOwnerExportService;
import com.clx.performance.service.settle.SettlementOwnerService;
import com.clx.performance.utils.excel.ExcelData;
import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.owner.settle.OwnerPageSettlementOwnerVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class SettlementOwnerExportServiceImpl implements SettlementOwnerExportService {
@Autowired
private SettlementOwnerService settlementOwnerService;
@Override
public void exportSettlementOwner(PageOwnerSettlementParam param) {
param.setPage(1);
param.setPageSize(1000000);
List<OwnerPageSettlementOwnerVO> list = settlementOwnerService.pageSettlementOwner(param).getRecords();
// 组装表头
List<ExcelField> fieldList = new ArrayList<>();
fieldList.add(new ExcelField(0, "序号", "index", 2000));
fieldList.add(new ExcelField(1, "结算单号", "settlementNo", 5000));
fieldList.add(new ExcelField(2, "订单编号", "orderNo", 5000));
fieldList.add(new ExcelField(3, "开票标识", "invoiceType", 5000));
fieldList.add(new ExcelField(4, "货主编码", "ownerUserNo", 5000));
fieldList.add(new ExcelField(5, "结算方式", "settlementWay", 5000));
fieldList.add(new ExcelField(6, "装车净重", "loadNet", 5000));
fieldList.add(new ExcelField(7, "卸车净重", "unloadNet", 5000));
fieldList.add(new ExcelField(8, "实际净重(吨)", "weight", 5000));
fieldList.add(new ExcelField(9, "应付运费", "freight", 5000));
fieldList.add(new ExcelField(10, "预付运费金额", "prepayFreight", 5000));
fieldList.add(new ExcelField(11, "货损吨数", "lossWeight", 5000));
fieldList.add(new ExcelField(12, "管理费", "invoiceServiceFee", 5000));
fieldList.add(new ExcelField(13, "借款抵扣金额", "loanFreight", 5000));
fieldList.add(new ExcelField(14, "结算金额", "settlementFreight", 5000));
fieldList.add(new ExcelField(15, "开票金额", "invoiceFreight", 5000));
fieldList.add(new ExcelField(16, "创建时间", "createTime", 5000));
fieldList.add(new ExcelField(17, "状态", "status", 5000));
// 组装数据
List<List<ExcelData>> dataList = new ArrayList<>();
for (int i=0; i<list.size(); i++){
OwnerPageSettlementOwnerVO dto = list.get(i);
List<ExcelData> rowData = new ArrayList<>();
rowData.add(new ExcelData(i+1));
rowData.add(new ExcelData(dto.getSettlementNo()));
rowData.add(new ExcelData(dto.getOrderNo()));
rowData.add(new ExcelData(dto.getInvoiceTypeMsg()));
rowData.add(new ExcelData(dto.getOwnerUserNo().toString()));
rowData.add(new ExcelData(dto.getSettlementWayMsg()));
rowData.add(new ExcelData(dto.getLoadNet()));
rowData.add(new ExcelData(dto.getUnloadNet()));
rowData.add(new ExcelData(dto.getWeight()));
rowData.add(new ExcelData(dto.getFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getPrepayFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getLossWeight()));
rowData.add(new ExcelData(dto.getInvoiceServiceFee().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getLoanFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getSettlementFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getInvoiceFreight().movePointLeft(2).setScale(2, RoundingMode.HALF_UP)));
rowData.add(new ExcelData(dto.getCreateTime()));
rowData.add(new ExcelData(dto.getStatusMsg()));
dataList.add(rowData);
}
ExcelSheet excelSheet = new ExcelSheet("货主结算单", "货主结算单", fieldList, dataList);
// 导出
ExcelUtil.export(excelSheet);
}
}
......@@ -19,6 +19,6 @@ public interface SettlementMqService {
void updateInvoiceCompany(Integer id);
void settlementPlatformAutoConfirmUpdate(Integer settlementId);
void settlementPlatformAutoConfirmUpdate(String settlementNo);
}
package com.clx.performance.service.settle;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
public interface SettlementOwnerExportService {
void exportSettlementOwner(PageOwnerSettlementParam param);
}
......@@ -69,6 +69,19 @@ public class ExcelData {
this.dataType = DataType.STRING.value;
}
}
public ExcelData(Long value) {
this(value,null);
}
public ExcelData(Long value, String defaultValue) {
if (null != value) {
this.doubleValue = value;
this.dataType = DataType.NUMERIC.value;
}
else {
this.value = defaultValue;
this.dataType = DataType.STRING.value;
}
}
public ExcelData(BigDecimal value) {
this(value,null);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论