提交 777c4d56 authored 作者: 艾庆国's avatar 艾庆国

Merge remote-tracking branch 'refs/remotes/origin/v20.9_settlement_20240805' into dev

......@@ -189,6 +189,7 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_CHILD_RISK_PROCESS_ERROR(2111, "风控已处理"),
SETTLEMENT_OWNER_DETAIL_COMPANY_ADD_ERROR(2112, "所选数据存在状态”已处理“的数据,请核实后重新提交"),
SETTLEMENT_OWNER_CONFIRM_SETTLEMENT_ERROR(2113, "运单需重新分配开票公司,请联系结算人员处理"),
/**
......
package com.clx.performance.vo.mq.settle;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementPlatformAutoConfirmMqParam {
private Integer settlementId; //id
}
......@@ -70,4 +70,9 @@ public class OwnerPageSettlementOwnerVO {
@ApiModelProperty(value="是否上报 0-否;1-是",example = "1")
private Integer reportFlag; //是否上报 0-否;1-是
@ApiModelProperty(value="装货净重(单位吨)",example = "1.23")
private BigDecimal loadNet;
@ApiModelProperty(value="卸货净重(单位吨)",example = "1.23")
private BigDecimal unloadNet;
}
......@@ -149,4 +149,17 @@ public class RabbitSettlementConfig {
.with(RabbitKeySettlementConstants.SETTLEMENT_INVOICE_COMPANY_UPDATE_ROUTING_KEY);
}
/**
* 平台自动确认
*/
@Bean
public Queue settlementPlatformAutoConfirmUpdateQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_QUEUE);
}
@Bean
public Binding settlementPlatformAutoConfirmUpdateQueueBinding() {
return BindingBuilder.bind(settlementPlatformAutoConfirmUpdateQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_ROUTING_KEY);
}
}
......@@ -80,4 +80,10 @@ public class RabbitKeySettlementConstants {
public static final String SETTLEMENT_INVOICE_COMPANY_UPDATE_QUEUE = PREFIX +"settlementInvoiceCompany.update"+QUEUE;
public static final String SETTLEMENT_INVOICE_COMPANY_UPDATE_ROUTING_KEY = PREFIX +"settlementInvoiceCompany.update"+QUEUE_ROUTING_KEY;
/**
* 平台自动确认
*/
public static final String SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_QUEUE = PREFIX +"settlementPlatformAutoConfirm.update"+QUEUE;
public static final String SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_ROUTING_KEY = PREFIX +"settlementPlatformAutoConfirm.update"+QUEUE_ROUTING_KEY;
}
......@@ -28,6 +28,14 @@ import java.util.Objects;
@Repository
public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, SettlementOwner, Integer> implements SettlementOwnerDao {
@Override
public boolean updateStatus(SettlementOwner item) {
return update(lUdWrapper()
.eq(SettlementOwner::getId, item.getId())
.eq(SettlementOwner::getStatus, item.getStatus())
);
}
@Override
public boolean updateSettlementPeriodMonth(SettlementOwner item) {
return update(lUdWrapper()
......@@ -97,6 +105,14 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
);
}
@Override
public Optional<SettlementOwner> findById(Integer id) {
return Optional.of(lQrWrapper()
.eq(SettlementOwner::getId, id)
)
.map(super::getOne);
}
@Override
public Optional<SettlementOwner> findBySettlementNo(String settlementNo) {
return Optional.of(lQrWrapper()
......@@ -304,4 +320,14 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
.set(SettlementOwner:: getMergeTime,mergeTime)
);
}
@Override
public List<SettlementOwner> listPlatformToBeConfirmed(LocalDateTime time) {
return list(lUdWrapper()
.ge(SettlementOwner::getCreateTime, time)
.eq(SettlementOwner::getStatus, SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode())
.eq(SettlementOwner::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
);
}
}
......@@ -288,6 +288,7 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
.eq(SettlementOwnerDetail::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
);
}
@Override
public List<SettlementOwnerDetail> listPayStatusSync() {
return list(lUdWrapper()
......
......@@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.SettlementOwnerMapper;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerParam;
import com.msl.common.base.Optional;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
......@@ -14,6 +14,8 @@ import java.util.List;
public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, SettlementOwner, Integer> {
boolean updateStatus(SettlementOwner item);
boolean updateSettlementPeriodMonth(SettlementOwner item);
boolean updateLock(SettlementOwner item);
......@@ -30,6 +32,7 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl
boolean updatePayment(SettlementOwner settlementOwner);
Optional<SettlementOwner> findById(Integer id);
Optional<SettlementOwner> findBySettlementNo(String settlementNo);
IPage<SettlementOwner> pageCarrierSettlementOwner(PageCarrierSettlementOwnerParam param);
......@@ -79,4 +82,7 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl
@Param("settlementNos")List<String> settlementNos,
@Param("mergedBy") String mergedBy,
@Param("mergeTime") LocalDateTime mergeTime);
List<SettlementOwner> listPlatformToBeConfirmed(LocalDateTime time);
}
......@@ -65,6 +65,7 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
List<SettlementOwnerDetail>listInvoiceStatusSync();
List<SettlementOwnerDetail> listPayStatusSync();
List<SettlementOwnerDetail> listInvoiceTypeSync();
IPage<SettlementOwnerDetail> pagePendingSettlementOwnerDetail(PagePendingCarrierSettlementOwnerDetailParam param);
......
package com.clx.performance.job.settlement;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.dao.settle.OrderChildSyncTransportRecordDao;
import com.clx.performance.dao.settle.SettlementOwnerDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementMqService;
import com.msl.common.job.JobLog;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
@AllArgsConstructor
public class SettlementJob {
// 默认30天
private static final Integer EFFECT_TIME = 30;
private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao;
private final SettlementMqService settlementMqService;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementOwnerDao settlementOwnerDao;
private final OrderChildSyncTransportRecordDao orderChildSyncTransportRecordDao;
/**
......@@ -86,4 +95,38 @@ public class SettlementJob {
}
}
/**
* 结算单平台自动确认更新
*/
@XxlJob("settlementPlatformAutoConfirmUpdate")
public void settlementPlatformAutoConfirmUpdate() {
try {
Integer effectTime= null;
String jobParam= XxlJobHelper.getJobParam();
log.info("结算单平台自动确认更新, param:{}", jobParam);
if (StringUtils.isNotBlank(jobParam)) {
JSONObject jsonObject = JSON.parseObject(jobParam);
effectTime = jsonObject.getInteger("effectTime");
}
if (effectTime == null) {
effectTime = EFFECT_TIME;
}
LocalDateTime time = LocalDateTime.now().minusDays(effectTime);
List<SettlementOwner> list = settlementOwnerDao.listPlatformToBeConfirmed(time);
log.info("结算单平台自动确认更新, size:{}", list.size());
if (list.isEmpty()) {return;}
for (SettlementOwner item : list) {
settlementMqService.settlementPlatformAutoConfirmUpdate(item.getId());
}
} catch (Exception e) {
log.warn("结算单平台自动确认更新失败,msg:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("结算单平台自动确认更新失败", e);
}
}
}
package com.clx.performance.listener.settle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.settle.SettlementPlatformAutoConfirmMqParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 平台自动确认更新 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class SettlementPlatformAutoConfirmUpdateListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_PLATFORM_AUTO_CONFIRM_UPDATE_QUEUE)
public void process(Message message) {
try{
log.info("结算-平台自动确认更新, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementPlatformAutoConfirmMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-平台自动确认更新 失败",e);
}
}
private void process(SettlementPlatformAutoConfirmMqParam mq){
settlementMqHandlerService.settlementPlatformAutoConfirm(mq);
}
}
......@@ -42,6 +42,7 @@ import com.clx.performance.utils.spring.ApplicationContextUtils;
import com.clx.performance.vo.mq.*;
import com.clx.performance.vo.mq.settle.SettlementOrderChildRiskProcessMqParam;
import com.clx.performance.vo.mq.settle.SettlementOwnerDetialInvoiceCompanyUpdateMqParam;
import com.clx.performance.vo.mq.settle.SettlementPlatformAutoConfirmMqParam;
import com.clx.performance.vo.pc.broker.TransportVO;
import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
......@@ -58,10 +59,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.*;
@Slf4j
@Service
......@@ -413,7 +411,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementOrderChildRisk.setInvoiceType(settlementOwnerDetail.getInvoiceType());
settlementOrderChildRisk.setPoundAuditTime(settlementOwnerDetail.getPoundAuditTime());
settlementOrderChildRisk.setRiskType(SettlementOrderChildRiskEnum.RiskType.SETTLE_FAIL.getCode());
settlementOrderChildRisk.setRiskRemark(result.getSyncMsg());
settlementOrderChildRisk.setRiskRemark(result.getSettleMsg());
settlementOrderChildRiskDao.saveEntity(settlementOrderChildRisk);
}
}
......@@ -898,6 +896,26 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
@Override
public void settlementPlatformAutoConfirm(SettlementPlatformAutoConfirmMqParam mq) {
SettlementOwner settlementOwner = settlementOwnerDao
.findById(mq.getSettlementId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (!Objects.equals(settlementOwner.getStatus(), SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode())){
return;
}
// 所有运单支付完成,修改状态待货主确认
List<SettlementOwnerDetail> list = settlementOwnerDetailDao.getBySettlementNo(settlementOwner.getSettlementNo());
if (list.isEmpty()) {return;}
Optional<SettlementOwnerDetail> optional = list.stream()
.filter(item -> Objects.equals(item.getPayStatus(), SettlementOwnerDetailEnum.PayStatus.NO.getCode())).findFirst();
if (optional.isPresent()) {return;}
settlementOwner.setStatus(SettlementOwnerEnum.Status.OWNER_TO_BE_CONFIRMED.getCode());
settlementOwnerDao.updateStatus(settlementOwner);
}
private BigDecimal invoiceFreightCalc(Integer settlementWay, BigDecimal invoiceServiceFeeRate, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
......
......@@ -8,6 +8,7 @@ import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.vo.mq.*;
import com.clx.performance.vo.mq.settle.SettlementOrderChildRiskProcessMqParam;
import com.clx.performance.vo.mq.settle.SettlementOwnerDetialInvoiceCompanyUpdateMqParam;
import com.clx.performance.vo.mq.settle.SettlementPlatformAutoConfirmMqParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
......@@ -136,4 +137,16 @@ public class SettlementMqServiceImpl implements SettlementMqService {
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void settlementPlatformAutoConfirmUpdate(Integer settlementId) {
SettlementPlatformAutoConfirmMqParam mq = new SettlementPlatformAutoConfirmMqParam();
mq.setSettlementId(settlementId);
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();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
}
......@@ -27,7 +27,6 @@ import com.clx.performance.model.settle.SettlementLog;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.model.settle.SettlementPlatformAccount;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerDetailCompanyUpdateParam;
import com.clx.performance.param.pc.owner.*;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.PlatformAccountConfigService;
......@@ -61,6 +60,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
* @author liruixin
......@@ -129,6 +129,13 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_ORDER_STATUS_CHANGED);
}
List<SettlementOwnerDetail> settlementOwnerDetails = settlementOwnerDetailDao.getBySettlementNo(settlementOwner.getSettlementNo());
Optional<SettlementOwnerDetail> optional = settlementOwnerDetails.stream().filter(item -> item.getInvoicingCompanyId() == null).findFirst();
if (optional.isPresent()){
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_OWNER_CONFIRM_SETTLEMENT_ERROR,
"运单"+optional.get().getChildNo()+"需重新分配开票公司,请联系结算人员处理");
}
String settlementNo = settlementOwner.getSettlementNo();
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----货主确认结算单
......@@ -183,9 +190,14 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
}
String settlementNo = settlementOwner.getSettlementNo();
if (Objects.equals(settlementOwner.getInvoiceType(), SettlementOwnerEnum.InvoiceType.ORDINARY.getCode())) {
settlementOwner.setStatus(SettlementOwnerEnum.Status.OWNER_TO_BE_CONFIRMED.getCode());
}
else {
settlementOwner.setStatus(SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode());
}
settlementOwnerDao.updateStatus(settlementOwner);
settlementOwnerDao.updateStatusBySettlementNo(settlementNo
,SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode());
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----
settlementLogService.saveSettlementLog(settlementNo,
......
......@@ -4,6 +4,7 @@ import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.vo.mq.*;
import com.clx.performance.vo.mq.settle.SettlementOrderChildRiskProcessMqParam;
import com.clx.performance.vo.mq.settle.SettlementOwnerDetialInvoiceCompanyUpdateMqParam;
import com.clx.performance.vo.mq.settle.SettlementPlatformAutoConfirmMqParam;
public interface SettlementMqHandlerService {
......@@ -28,4 +29,7 @@ public interface SettlementMqHandlerService {
void riskProcess(SettlementOrderChildRiskProcessMqParam mq);
void invoiceCompanyUpdate(SettlementOwnerDetialInvoiceCompanyUpdateMqParam mq);
void settlementPlatformAutoConfirm(SettlementPlatformAutoConfirmMqParam mq);
}
......@@ -19,4 +19,6 @@ public interface SettlementMqService {
void updateInvoiceCompany(Integer id);
void settlementPlatformAutoConfirmUpdate(Integer settlementId);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论