提交 8eccc390 authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/v7.6_small_version_fix_20231204' into test

# Conflicts: # performance-web/src/main/java/com/clx/performance/service/impl/OrderChildServiceImpl.java
package com.clx.performance.param.pc.breakcontract.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @ClassName BatchUpdatePayDriverSettlementParam
* @Description
* @Author kavin
* @Date 2023/12/4 19:58
* @Version 1.0
*/
@Getter
@Setter
public class BatchUpdatePayDriverBreakContractSettlementParam {
@ApiModelProperty("结算单id集合")
@NotNull(message = "ids不能为空")
private List<Integer> ids;
}
package com.clx.performance.param.pc.driver;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @ClassName BatchUpdatePayDriverSettlementParam
* @Description
* @Author kavin
* @Date 2023/12/4 19:58
* @Version 1.0
*/
@Getter
@Setter
public class BatchUpdatePayDriverSettlementParam {
@ApiModelProperty("结算单id集合")
@NotNull(message = "ids不能为空")
private List<Integer> ids;
}
......@@ -30,4 +30,8 @@ public class PageCarrierSettlementOwnerParam extends PageParam {
@ApiModelProperty("结算方式 1装车净重 2卸车净重")
private Integer settlementWay;
@ApiModelProperty("订单编号")
private String orderNo;
}
......@@ -181,4 +181,13 @@ public class OrderChildVO {
@ApiModelProperty("最晚装货时间")
private String lastLoadTime;
//运单详情增加字段
@ApiModelProperty(value = "亏吨重量", example = "1.23")
private BigDecimal lossWeight;
@ApiModelProperty(value = "亏吨扣款", example = "1.23")
@MoneyOutConvert
private BigDecimal lossAmount;
}
\ No newline at end of file
......@@ -49,7 +49,6 @@
<dependency>
<groupId>com.clx.cy</groupId>
<artifactId>message-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
......
......@@ -265,7 +265,7 @@ public class OrderCancelComponent implements InitializingBean {
String orderNo = orderGoods.getOrderNo();
Optional<FeignOrderInfoVO> optional = orderService.getOrderInfo(orderNo);
if(!optional.isPresent()){
log.error("通过订单号未查询到对应的订单信息,订单号:{}",orderNo);
log.warn("通过订单号未查询到对应的订单信息,订单号:{}",orderNo);
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
FeignOrderInfoVO orderInfo = optional.get();
......@@ -318,7 +318,7 @@ public class OrderCancelComponent implements InitializingBean {
}
Result<Object> result = orderFeign.rollbackOrderWeight(rollbackOrderWeightParam);
if (!result.succeed()) {
log.error("订单号:{} 的订单做吨数调整,对应货单号:{} 调整失败,调整吨数:{},调整类型:{}",
log.warn("订单号:{} 的订单做吨数调整,对应货单号:{} 调整失败,调整吨数:{},调整类型:{}",
orderNo,orderGoods.getOrderGoodsNo(),weight,updateTypeMsg);
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "远程调用更新订单余量失败");
}
......
......@@ -136,6 +136,9 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
} else {
OrderGoods update = new OrderGoods();
update.setId(orderGoods.getId());
update.setOrderGoodsStatus(OrderGoodsStatusEnum.Status.COMPLETED.getCode());
//大于35吨的归还吨数在这里处理
if(orderGoods.getResidueTransportWeight().compareTo(new BigDecimal("35")) >= 0){
RollbackOrderWeightParam param = new RollbackOrderWeightParam();
......@@ -155,10 +158,11 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
}
}
orderFeign.rollbackOrderWeight(param);
//更新剩余吨数
update.setResidueTransportWeight(BigDecimal.ZERO);
}
//更新已完结
orderGoodsDao.updateOrderGoodsStatusByOrderGoodsNo(orderGoodsNo, OrderGoodsStatusEnum.Status.COMPLETED.getCode());
orderGoodsDao.updateEntityByKey(update);
log.info("删除redis ORDER_GOODS_STATUS_LAZY id: {}", orderGoodsId.getValue());
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.EXPIRE.getCode());
......
......@@ -64,6 +64,7 @@ public class AppGoodsOrderController {
@ApiOperation(value = "APP首页搜索", notes = "<br>By:胡宇帆")
@PostMapping("/indexOrderGoodsListSearch")
@UnitCovert(param = false)
public Result<PageData<OrderGoodsAPPVO>> indexOrderGoodsListSearch(@RequestBody AppGoodsOrderSearchParam param) {
IPage<OrderGoodsAPPVO> page = orderGoodsService.indexOrderGoodsListSearch(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
......
package com.clx.performance.controller.pc.breakcontract.carrier;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.breakcontract.carrier.BatchUpdatePayDriverBreakContractSettlementParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam;
import com.clx.performance.service.breakcontract.BreakContractSettlementDriverService;
import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementDriverDetailVO;
......@@ -58,4 +59,12 @@ public class CarrierBreakContractSettlementDriverController {
return Result.ok(breakContractSettlementDriverService.getDetailBySettlementNo(settlementNo));
}
@ApiOperation(value = "批量结算车主违约结算单",notes = "<br>By:刘海泉")
@PostMapping("/updateBatchPayDriverBreakContractSettlement")
public Result<Object> updateBatchPayDriverBreakContractSettlement(@RequestBody @Validated BatchUpdatePayDriverBreakContractSettlementParam param) {
breakContractSettlementDriverService.updateBatchPayDriverBreakContractSettlement(param);
return Result.ok();
}
}
package com.clx.performance.controller.pc.carrier;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.driver.BatchUpdatePayDriverSettlementParam;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.clx.performance.service.settle.SettlementDriverService;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO;
......@@ -36,6 +37,11 @@ public class CarrierSettlementDriverController {
return Result.page(page.getRecords(),page.getTotal(),page.getPages());
}
@ApiOperation(value = "批量结算车主结算单",notes = "<br>By:刘海泉")
@PostMapping("/updateBatchPayDriverSettlement")
public Result<Object> updateBatchPayDriverSettlement(@RequestBody @Validated BatchUpdatePayDriverSettlementParam param) {
settlementDriverService.updateBatchPayDriverSettlement(param);
return Result.ok();
}
}
......@@ -12,6 +12,8 @@ import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
......@@ -65,4 +67,14 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
query.orderByDesc(SettlementDriverDetail :: getCreateTime);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
@Override
public List<SettlementDriverDetail> listUnPay(LocalDateTime beginTime) {
return baseMapper.listUnPay(beginTime);
}
@Override
public List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids) {
return baseMapper.findByDriverSettlementIds(ids);
}
}
......@@ -105,6 +105,9 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
if(Objects.nonNull(param.getSettlementWay())){
query.like(SettlementOwner :: getSettlementWay,param.getSettlementWay());
}
if(StringUtils.isNotBlank(param.getOrderNo())){
query.eq(SettlementOwner :: getOrderNo,param.getOrderNo());
}
query.orderByDesc(SettlementOwner :: getCreateTime);
return baseMapper.selectPage(Page.of(param.getPage(),param.getPageSize()),query);
......
......@@ -7,6 +7,9 @@ import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailPara
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 车主运单计费明细
......@@ -23,4 +26,8 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai
IPage<SettlementDriverDetail> pageSettlementDriverDetail(PageCarrierSettlementDriverDetailParam param);
List<SettlementDriverDetail> listUnPay(LocalDateTime beginTime);
List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids);
}
......@@ -4,6 +4,7 @@ import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.service.breakcontract.BreakContractJobHandlerService;
import com.clx.performance.utils.JobHandlerService;
import com.msl.common.utils.DateUtils;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -26,24 +27,18 @@ public class BreakContractSettlementJob {
private BreakContractJobHandlerService breakContractJobHandlerService;
/**
* 违约结算单支付 (每10分钟)
* @Scheduled(cron = "0 0/10 * * * ?")
* 车主违约结算单支付 (每天凌晨2点)
*/
@XxlJob("breakContractSettlementPay")
public void breakContractSettlementPay() {
LocalDateTime beginTime = LocalDateTime.now().minusHours(1);
LocalDateTime beginTime = LocalDateTime.now().minusMonths(1);
log.info("查询未结算的车主违约结算单,查询开始时间:{}", DateUtils.formatDateTime(beginTime));
jobHandlerService.handler("违约结算单-支付", ()->{
List<BreakContractSettlementDriver> list = breakContractSettlementDriverDao.listUnpay(beginTime);
log.info("违约结算单支付,数量:{}", list.size());
log.info("车主违约结算单支付,数量:{}", list.size());
for (BreakContractSettlementDriver item : list) {
jobHandlerService.subHandler("违约结算单-支付", item.getId(), breakContractJobHandlerService::pay);
jobHandlerService.subHandler("车主违约结算单-支付", item.getId(), breakContractJobHandlerService::pay);
}
});
}
}
package com.clx.performance.job;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.utils.JobHandlerService;
import com.msl.common.utils.DateUtils;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Component
public class DriverSettlementJob {
@Autowired
private JobHandlerService jobHandlerService;
@Autowired
private SettlementDriverDetailDao settlementDriverDetailDao;
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
/**
* 车主结算单支付 (每天凌晨2点)
*/
@XxlJob("driverSettlementPay")
public void driverSettlementPay() {
LocalDateTime beginTime = LocalDateTime.now().minusMonths(1);
log.info("查询未结算的车主结算单,查询开始时间:{}", DateUtils.formatDateTime(beginTime));
jobHandlerService.handler("车主结算单-支付", ()->{
List<SettlementDriverDetail> list = settlementDriverDetailDao.listUnPay(beginTime);
log.info("车主结算单支付,数量:{}", list.size());
for (SettlementDriverDetail item : list) {
jobHandlerService.subHandler("车主结算单-支付", item, settlementMqHandlerService::paySettlementDriver);
}
});
}
}
......@@ -50,7 +50,6 @@ public class LargeScreenListener {
@RabbitListener(queues = RabbitKeyConstants.ORDER_LARGE_SCREEN_QUEUE)
public void onMessage(String message) {
try {
log.info("接入数据大屏====================================================");
FeignOrderVO orderVO = JSONUtil.toBean(message, FeignOrderVO.class);
log.info("处理数据大屏标准地址路线监听器执行,订单Id为{},发货地标准地址ID为{},收货地标准地址ID为{}", orderVO.getOrderNo(), orderVO.getSendSystemAddressId(), orderVO.getReveiveSystemAddressId());
......
......@@ -2,9 +2,21 @@ package com.clx.performance.mapper.settle;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.sqlProvider.settle.SettlementDriverDetailSqlProvider;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import java.time.LocalDateTime;
import java.util.List;
@Mapper
public interface SettlementDriverDetailMapper extends BaseMapper<SettlementDriverDetail> {
@SelectProvider(type = SettlementDriverDetailSqlProvider.class, method = "listUnPay")
List<SettlementDriverDetail> listUnPay(@Param("beginTime") LocalDateTime beginTime);
@SelectProvider(type = SettlementDriverDetailSqlProvider.class, method = "findByDriverSettlementIds")
List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids);
}
\ No newline at end of file
package com.clx.performance.service.breakcontract;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.breakcontract.carrier.BatchUpdatePayDriverBreakContractSettlementParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam;
import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementDriverDetailVO;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverVO;
......@@ -19,4 +20,6 @@ public interface BreakContractSettlementDriverService {
SXSSFWorkbook exportCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param);
CarrierBreakContractSettlementDriverDetailVO getDetailBySettlementNo(String settlementNo);
void updateBatchPayDriverBreakContractSettlement(BatchUpdatePayDriverBreakContractSettlementParam param);
}
......@@ -60,7 +60,7 @@ public class LargeScreenServiceImpl implements LargeScreenService {
public List<JSONObject> emptyCarList() {
List<String> data = driverFeign.driverTruckList().getData();
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
String now = DateUtils.formatDateTime(LocalDateTime.now()).get();
List<OrderChild> orderChildList = orderChildDao.selectListWithEmptyCarList();
if (CollectionUtils.isEmpty(orderChildList)) {
return null;
......@@ -99,7 +99,7 @@ public class LargeScreenServiceImpl implements LargeScreenService {
public List<JSONObject> weightCarList() {
List<String> data = driverFeign.driverTruckList().getData();
String now = DateUtils.formatDateTime(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss").get();
String now = DateUtils.formatDateTime(LocalDateTime.now()).get();
List<OrderChild> orderChildList = orderChildDao.selectListWithEmptyCarList();
if (CollectionUtils.isEmpty(orderChildList)) {
return null;
......
......@@ -161,6 +161,7 @@ public class OrderChildServiceImpl implements OrderChildService {
@Autowired
private ZjxlGpsService zjxlGpsService;
@Override
public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) {
......@@ -1309,9 +1310,29 @@ public class OrderChildServiceImpl implements OrderChildService {
if (sendAndReceiveAddress.isPresent()) {
result.setReceiveAddressInfo(addressStruct.convert(sendAndReceiveAddress.get().getReceiveAddress()));
}
//亏吨吨数
result.setLossWeight(calcLossWeight(orderChild));
//亏吨扣款
result.setLossAmount(calcLossAmount(result.getLossWeight(),orderChild.getLossPrice()));
return result;
}
//计算亏吨吨数
private BigDecimal calcLossWeight(OrderChild orderChild){
if (Objects.nonNull(orderChild.getUnloadNet())){
return orderChild.getUnloadNet().subtract(orderChild.getLoadNet()).compareTo(BigDecimal.ZERO) < 0 ?
orderChild.getLoadNet().subtract(orderChild.getUnloadNet()) : BigDecimal.ZERO;
}
return null;
}
//计算亏吨金额
private BigDecimal calcLossAmount(BigDecimal lossWeight, BigDecimal lossPrice){
if (Objects.nonNull(lossWeight)){
return lossWeight.multiply(lossPrice).setScale(0, RoundingMode.HALF_UP);
}
return null;
}
@Override
public IPage<OrderChildVO> pageOrderChild(PageOrderChildOfDriverParam param) {
......@@ -1429,27 +1450,26 @@ public class OrderChildServiceImpl implements OrderChildService {
* 更新货单吨数
*/
@Override
public void updateOrderGoodsAmountLoad(OrderGoods orderGoods,String childNo, BigDecimal dif, Integer orderGoodsStatus) {
public void updateOrderGoodsAmountLoad(OrderGoods orderGoods, String childNo, BigDecimal dif, Integer orderGoodsStatus) {
//防止状态倒退
if (orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.CANCEL.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.COMPLETED.getCode())
|| orderGoods.getOrderGoodsStatus().equals(OrderGoodsStatusEnum.Status.SUCCESS.getCode())
){
) {
orderGoodsStatus = orderGoods.getOrderGoodsStatus();
}
if(dif.compareTo(BigDecimal.ZERO) != 0 ){
//判断是从订单借吨还是直接货单进行扣减(货单剩余吨数小于本运单的修改后的吨数差值)
if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) {
//货单吨数不够扣减,从订单进行借吨数
orderGoodsService.borrowWeight(orderGoods,childNo,orderGoods.getResidueTransportWeight(),dif,
dif.subtract(orderGoods.getResidueTransportWeight()),
OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode());
}else{
// 货单吨数够扣减,直接更新货单剩余吨数和已拉运吨数和状态
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, orderGoodsStatus);
if (dif.compareTo(BigDecimal.ZERO) != 0) {
//判断是从订单借吨还是直接货单进行扣减(货单剩余吨数小于本运单的修改后的吨数差值)
if (orderGoods.getResidueTransportWeight().compareTo(dif) < 0) {
//货单吨数不够扣减,从订单进行借吨数
orderGoodsService.borrowWeight(orderGoods, childNo, orderGoods.getResidueTransportWeight(), dif,
dif.subtract(orderGoods.getResidueTransportWeight()), orderGoodsStatus);
} else {
// 货单吨数够扣减,直接更新货单剩余吨数和已拉运吨数和状态
orderGoodsDao.updateOrderGoodsReduceWeightAndStatus(orderGoods.getId(), dif, orderGoodsStatus);
}
}
}
}
/**
* 更新定向单状态 (接单)
......
......@@ -3,9 +3,12 @@ package com.clx.performance.service.impl.breakcontract;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.param.pc.breakcontract.carrier.BatchUpdatePayDriverBreakContractSettlementParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam;
import com.clx.performance.service.breakcontract.BreakContractJobHandlerService;
import com.clx.performance.service.breakcontract.BreakContractSettlementDriverService;
import com.clx.performance.struct.breakcontract.BreakContractSettlementDriverStruct;
import com.clx.performance.utils.excel.ExcelData;
......@@ -14,13 +17,16 @@ import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.breakcontract.carrier.CarrierBreakContractSettlementDriverDetailVO;
import com.clx.performance.vo.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @author liruixin
......@@ -34,6 +40,7 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe
private final BreakContractSettlementDriverDao breakContractSettlementDriverDao;
private final BreakContractSettlementDriverStruct breakContractSettlementStruct;
private BreakContractJobHandlerService breakContractJobHandlerService;
@Override
public IPage<PageCarrierBreakContractSettlementDriverVO> pageCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param) {
......@@ -106,4 +113,24 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe
CarrierBreakContractSettlementDriverDetailVO vo = breakContractSettlementStruct.convertDetail(settlement);
return vo;
}
@Override
public void updateBatchPayDriverBreakContractSettlement(BatchUpdatePayDriverBreakContractSettlementParam param) {
if(CollectionUtils.isEmpty(param.getIds())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"参数不能为空");
}
List<BreakContractSettlementDriver> list = breakContractSettlementDriverDao.listInField(BreakContractSettlementDriver :: getId,param.getIds());
if(CollectionUtils.isEmpty(list)){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
list.forEach(item->{
if(!Objects.equals(item.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.NO.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"所选数据有误,请重新选择");
}
});
list.forEach(item->breakContractJobHandlerService.pay(item.getId()));
}
}
......@@ -3,15 +3,24 @@ package com.clx.performance.service.impl.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.SettlementDriverDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.pc.driver.BatchUpdatePayDriverSettlementParam;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.clx.performance.service.settle.SettlementDriverService;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.struct.settle.SettlementDriverStruct;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
/**
* @author liruixin
......@@ -24,7 +33,10 @@ public class SettlementDriverServiceImpl implements SettlementDriverService {
SettlementDriverDao settlementDriverDao;
SettlementDriverDetailDao settlementDriverDetailDao;
SettlementDriverStruct settlementDriverStruct;
SettlementMqHandlerService settlementMqHandlerService;
@Override
......@@ -34,4 +46,21 @@ public class SettlementDriverServiceImpl implements SettlementDriverService {
page.getRecords());
return new Page<CarrierPageSettlementDriverVO>().setRecords(list).setTotal(page.getTotal()).setPages(page.getPages());
}
@Override
public void updateBatchPayDriverSettlement(BatchUpdatePayDriverSettlementParam param) {
if(CollectionUtils.isEmpty(param.getIds())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"参数不能为空");
}
List<SettlementDriverDetail> list = settlementDriverDetailDao.findByDriverSettlementIds(param.getIds());
if(CollectionUtils.isEmpty(list)){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
list.forEach(item->{
if(!Objects.equals(item.getStatus(), SettlementDriverEnum.Status.WAIT_SETTLEMENT.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"所选数据有误,请重新选择");
}
});
list.forEach(item-> settlementMqHandlerService.paySettlementDriver(item));
}
}
......@@ -41,13 +41,11 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@Slf4j
@Service
......@@ -207,7 +205,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
/**
* 车主结算单自动支付
*/
private void paySettlementDriver(SettlementDriverDetail detail){
public void paySettlementDriver(SettlementDriverDetail detail){
DriverInfoFeignVo driverInfoFeignVo = driverService.getDriverInfo(detail.getDriverUserNo()).orElseThrow(ResultCodeEnum.FAIL);
PayParam noCheckPwd = null ;
if(detail.getSettlementFreight().compareTo(BigDecimal.ZERO) > 0){
......
......@@ -28,6 +28,7 @@ import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
* @author liruixin
......@@ -179,25 +180,24 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
fieldList.add(new ExcelField(0, "序号", "index", 2000));
fieldList.add(new ExcelField(1, "运单编号", "childNo", 5000));
fieldList.add(new ExcelField(2, "货主编码", "ownerUserNno", 5000));
fieldList.add(new ExcelField(3, "货物名称", "goodsName", 5000));
fieldList.add(new ExcelField(4, "实际净重(吨)", "weight", 5000));
fieldList.add(new ExcelField(5, "平台运费报价", "freightPrice", 5000));
fieldList.add(new ExcelField(6, "实际运费金额", "freight", 5000));
fieldList.add(new ExcelField(7, "货损吨数", "lossWeight", 5000));
fieldList.add(new ExcelField(8, "货损单价", "lossPrice", 5000));
fieldList.add(new ExcelField(9, "货损金额", "lossFreight", 5000));
fieldList.add(new ExcelField(10, "预付运费金额", "prepayFreight", 5000));
fieldList.add(new ExcelField(11, "结算金额", "settlementFreight", 5000));
fieldList.add(new ExcelField(12, "开票金额", "invoiceFreight", 5000));
fieldList.add(new ExcelField(13, "开票标识", "invoiceType", 5000));
fieldList.add(new ExcelField(14, "订单编号", "orderNo", 5000));
fieldList.add(new ExcelField(15, "结算单号", "settlementNo", 15000));
fieldList.add(new ExcelField(16, "结算子单号", "settlementSubNo", 15000));
fieldList.add(new ExcelField(17, "创建时间", "createTime", 5000));
fieldList.add(new ExcelField(18, "是否已付尾款", "finalPaymentStatus", 5000));
fieldList.add(new ExcelField(19, "是否已开票", "invoiceStatus", 5000));
fieldList.add(new ExcelField(3, "结算方式", "settlementWay", 5000));
fieldList.add(new ExcelField(4, "货物名称", "goodsName", 5000));
fieldList.add(new ExcelField(5, "实际净重(吨)", "weight", 5000));
fieldList.add(new ExcelField(6, "平台运费报价", "freightPrice", 5000));
fieldList.add(new ExcelField(7, "实际运费金额", "freight", 5000));
fieldList.add(new ExcelField(8, "货损吨数", "lossWeight", 5000));
fieldList.add(new ExcelField(9, "货损单价", "lossPrice", 5000));
fieldList.add(new ExcelField(10, "货损金额", "lossFreight", 5000));
fieldList.add(new ExcelField(11, "预付运费金额", "prepayFreight", 5000));
fieldList.add(new ExcelField(12, "结算金额", "settlementFreight", 5000));
fieldList.add(new ExcelField(13, "开票金额", "invoiceFreight", 5000));
fieldList.add(new ExcelField(14, "开票标识", "invoiceType", 5000));
fieldList.add(new ExcelField(15, "订单编号", "orderNo", 5000));
fieldList.add(new ExcelField(16, "结算单号", "settlementNo", 15000));
fieldList.add(new ExcelField(17, "结算子单号", "settlementSubNo", 15000));
fieldList.add(new ExcelField(18, "创建时间", "createTime", 5000));
fieldList.add(new ExcelField(19, "是否已付尾款", "finalPaymentStatus", 5000));
fieldList.add(new ExcelField(20, "是否已开票", "invoiceStatus", 5000));
// 组装数据
List<List<ExcelData>> dataList = new ArrayList<>();
......@@ -206,11 +206,13 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
PageOwnerSettlementOwnerDetailVO dto = list.get(i);
List<ExcelData> rowData = new ArrayList<>();
Optional<SettlementWayEnum.WayType> byCode = SettlementWayEnum.WayType.getByCode(dto.getSettlementWay());
String settlementWay = byCode.isPresent()?byCode.get().getMsg():"";
rowData.add(new ExcelData(i+1));
rowData.add(new ExcelData(dto.getChildNo()));
rowData.add(new ExcelData(dto.getOwnerUserNo()+""));
rowData.add(new ExcelData(settlementWay));
rowData.add(new ExcelData(dto.getGoodsName()));
rowData.add(new ExcelData(dto.getWeight()));
rowData.add(new ExcelData(dto.getFreightPrice().movePointLeft(2)));
rowData.add(new ExcelData(dto.getFreight().movePointLeft(2)));
......@@ -220,7 +222,6 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
rowData.add(new ExcelData(dto.getPrepayFreight().movePointLeft(2)));
rowData.add(new ExcelData(dto.getSettlementFreight().movePointLeft(2)));
rowData.add(new ExcelData(dto.getInvoiceFreight().movePointLeft(2)));
rowData.add(new ExcelData(dto.getInvoiceTypeMsg()));
rowData.add(new ExcelData(dto.getOrderNo()));
rowData.add(new ExcelData(dto.getSettlementNo()));
......@@ -228,8 +229,6 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
rowData.add(new ExcelData(dto.getCreateTime()));
rowData.add(new ExcelData(dto.getFinalPaymentStatusMsg()));
rowData.add(new ExcelData(dto.getInvoiceStatusMsg()));
dataList.add(rowData);
}
......
package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.driver.BatchUpdatePayDriverSettlementParam;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO;
......@@ -11,4 +12,6 @@ import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverVO;
*/
public interface SettlementDriverService {
IPage<CarrierPageSettlementDriverVO> pageCarrierSettlementDriver(PageCarrierSettlementDriverParam param);
void updateBatchPayDriverSettlement(BatchUpdatePayDriverSettlementParam param);
}
package com.clx.performance.service.settle;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
......@@ -11,4 +12,6 @@ public interface SettlementMqHandlerService {
void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg);
void paySettlementDriver(SettlementDriverDetail detail);
}
package com.clx.performance.sqlProvider.settle;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import org.apache.ibatis.jdbc.SQL;
import java.util.List;
import java.util.stream.Collectors;
public class SettlementDriverDetailSqlProvider {
public String listUnPay() {
return new SQL(){{
SELECT("a.* ");
FROM("settlement_owner_detail a ");
LEFT_OUTER_JOIN("settlement_driver b on a.settlement_no = b.settlement_no");
WHERE("b.create_time >= #{beginTime}");
WHERE("b.status = " + SettlementDriverEnum.Status.WAIT_SETTLEMENT.getCode());
ORDER_BY("b.create_time");
}}.toString();
}
public String findByDriverSettlementIds(List<Integer> ids) {
return new SQL(){{
SELECT("a.* ");
FROM("settlement_owner_detail a ");
LEFT_OUTER_JOIN("settlement_driver b on a.settlement_no = b.settlement_no");
WHERE("b.id IN ( " + ids.stream().map(code -> "'"+code+"'").collect(Collectors.joining(","))+ ")" );
ORDER_BY("b.create_time");
}}.toString();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论