提交 33a92a84 authored 作者: liruixin's avatar liruixin

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

......@@ -47,6 +47,21 @@ public enum SettlementDriverEnum {
}
}
@Getter
@AllArgsConstructor
public enum PrepayFreightFlag {
PAYED(1, "已预付"),
NO_PAY(0, "未预付");
private final Integer code;
private final String msg;
public static Optional<PrepayFreightFlag> getByCode(int code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.getCode(), code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(PrepayFreightFlag::getMsg).orElse(null);
}
}
}
......@@ -111,4 +111,26 @@ public enum SettlementOwnerEnum {
}
}
@Getter
@AllArgsConstructor
public enum MergeSettlementFlag {
//1:普通结算单 2:合并结算单
COMMON(1, "普通结算单"),
MERGE(2, "合并结算单"),
;
private final int code;
private final String name;
public static Optional<MergeSettlementFlag> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
}
}
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @ClassName JudgeTruckStatusParam
* @Description
* @Author kavin
* @Date 2023/12/15 14:11
* @Version 1.0
*/
@Getter
@Setter
public class JudgeTruckStatusParam {
@NotNull(message = "车牌号集合不能为空")
@ApiModelProperty("车牌号集合")
List<String> truckNoList;
}
......@@ -5,6 +5,8 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import java.time.LocalDateTime;
@Getter
@Setter
......@@ -18,4 +20,6 @@ public class NetworkDriverAccountParam {
private String mobile;
private LocalDateTime creteTime;
}
package com.clx.performance.param.pc.owner;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @ClassName MergeOwnerSettlementParam
* @Description
* @Author kavin
* @Date 2023/12/18 17:29
* @Version 1.0
*/
@Getter
@Setter
public class MergeOwnerSettlementParam {
@NotNull(message = "合并结算单id集合不能为空")
@ApiModelProperty("合并结算单id集合")
List<Integer> list;
}
package com.clx.performance.vo.pc.carrier.settle;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
/**
* @ClassName SettlementMergeDetailVO
* @Description
* @Author kavin
* @Date 2023/12/19 14:18
* @Version 1.0
*/
@Getter
@Setter
public class SettlementMergeDetailVO {
@ApiModelProperty("id")
private Integer id;
@ApiModelProperty("结算子单号")
private String settlementNo; //结算单编号
@ApiModelProperty("结算单号")
private String settlementSubNo; //结算子单号
@ApiModelProperty("操作人")
private String mergedBy; //合并人
@ApiModelProperty("合并结算单时间")
private String mergeTime; //合并结算单时间
}
package com.clx.performance.controller.pc;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.param.pc.OrderGoodsTruckListParam;
import com.clx.performance.param.pc.PageTruckListParam;
import com.clx.performance.param.pc.PageVicinityTruckListParam;
import com.clx.performance.param.pc.TruckTraceParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.service.TruckService;
import com.clx.performance.vo.pc.OrderGoodsTruckListVO;
import com.clx.performance.vo.pc.PageTruckListVO;
......@@ -84,4 +81,12 @@ public class TruckController {
List<TruckTraceVO> list = truckService.getTruckTrace(param);
return Result.ok(list);
}
@ApiOperation(value = "判断车辆状态", notes = "<br>By:刘海泉")
@PostMapping("/judgeTruckStatus")
public Result<List<String>> judgeTruckStatus(@RequestBody @Validated JudgeTruckStatusParam param) {
List<String> list = truckService.judgeTruckStatus(param);
return Result.ok(list);
}
}
......@@ -10,14 +10,13 @@ import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
@Slf4j
@RestController
......@@ -47,4 +46,12 @@ public class CarrierBreakContractDriverRecordController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "获取运单的用车需求(是否自由车辆)",notes = "<br>By:刘海泉")
@GetMapping("/getChildTruckDemand")
public Result<Integer> getChildTruckDemand(@ApiParam("运单编号") @NotBlank(message = "运单编号不能为空") String childNo) {
return Result.ok(breakContractDriverRecordService.getChildTruckDemand(childNo));
}
}
......@@ -22,7 +22,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
@Slf4j
@RestController
@RequestMapping(value="/pc/carrier/settlementOwner")
......@@ -129,5 +128,10 @@ public class CarrierSettlementOwnerController {
return Result.ok(settlementOwnerService.getCarrierSettlementPlatformAccount(settlementNo));
}
@ApiOperation(value = "合并结算单",notes = "<br>By:刘海泉")
@PostMapping("/mergeOwnerSettlement")
public Result<Object> mergeOwnerSettlement(@RequestBody @Validated MergeOwnerSettlementParam param) {
settlementOwnerService.mergeOwnerSettlement(param);
return Result.ok();
}
}
......@@ -27,7 +27,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
@Slf4j
@RestController
@RequestMapping(value="/pc/owner/settlementOwner")
......@@ -105,6 +104,4 @@ public class OwnerSettlementOwnerController {
}
}
......@@ -12,6 +12,7 @@ import com.msl.common.base.Optional;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
......@@ -53,9 +54,8 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
@Override
public List<SettlementOwner> getMergeSettlementNos(String settlementNo) {
return super.list(lQrWrapper()
.eq(SettlementOwner::getSettlementNo, settlementNo)
.eq(SettlementOwner::getMergeStatus, SettlementOwnerEnum.MergeStatus.YES.getCode())
.orderByDesc(SettlementOwner::getId));
.eq(SettlementOwner::getSettlementSubNo, settlementNo)
.orderByDesc(SettlementOwner::getCreateTime));
}
@Override
......@@ -98,6 +98,7 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
@Override
public IPage<SettlementOwner> pageCarrierSettlementOwner(PageCarrierSettlementOwnerParam param) {
LambdaQueryWrapper<SettlementOwner> query = new LambdaQueryWrapper<>();
query.eq(SettlementOwner :: getMergeStatus,SettlementOwnerEnum.MergeStatus.NO.getCode());
if(Objects.nonNull(param.getOwnerUserNo())){
query.eq(SettlementOwner :: getOwnerUserNo,param.getOwnerUserNo());
}
......@@ -134,6 +135,7 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
public IPage<SettlementOwner> pageSettlementOwner(Long userNo,PageOwnerSettlementParam param) {
LambdaQueryWrapper<SettlementOwner> query = new LambdaQueryWrapper<>();
query.eq(SettlementOwner :: getOwnerUserNo,userNo);
query.eq(SettlementOwner :: getMergeStatus,SettlementOwnerEnum.MergeStatus.NO.getCode());
if(StringUtils.isNotBlank(param.getOrderNo())){
query.eq(SettlementOwner :: getOrderNo,param.getOrderNo());
}
......@@ -227,4 +229,17 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
);
}
@Override
public void updateSettlementMerge(@Param("settlementNo")String settlementNo,
@Param("settlementNos")List<String> settlementNos,
@Param("mergedBy") String mergedBy,
@Param("mergeTime") LocalDateTime mergeTime) {
update(lUdWrapper()
.in(SettlementOwner :: getSettlementNo,settlementNos)
.set(SettlementOwner::getSettlementSubNo, settlementNo)
.set(SettlementOwner::getMergeStatus, SettlementOwnerEnum.MergeStatus.YES.getCode())
.set(SettlementOwner:: getMergedBy,mergedBy)
.set(SettlementOwner:: getMergeTime,mergeTime)
);
}
}
......@@ -144,4 +144,13 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
query.eq(StringUtils.isNotBlank(param.getSettlementSubNo()),SettlementOwnerDetail :: getSettlementSubNo,param.getSettlementSubNo());
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
@Override
public void updateSettlementMerge(String settlementNo, List<String> settlementNos) {
update(lUdWrapper()
.in(SettlementOwnerDetail::getSettlementNo, settlementNos)
.setSql("settlement_sub_no = settlement_no")
.set(SettlementOwnerDetail :: getSettlementNo,settlementNo)
);
}
}
......@@ -61,6 +61,8 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl
@Param("fromStatus")Integer fromStatus,
@Param("toStatus")Integer toStatus);
void updateSettlementMerge(@Param("settlementNo")String settlementNo,
@Param("settlementNos")List<String> settlementNos,
@Param("mergedBy") String mergedBy,
@Param("mergeTime") LocalDateTime mergeTime);
}
......@@ -44,4 +44,6 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
void updateFinalPaymentStatusBySettlementNoForOnline(String settlementNo, Integer finalPaymentStatus);
List<SettlementOwnerDetail> selectListByOrderNo(String orderNo);
void updateSettlementMerge(String settlementNo, List<String> settlementNos);
}
......@@ -13,6 +13,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
......@@ -43,7 +44,13 @@ public class NetworkDriverAccountSyncJob {
param.setDriverUserName(vo.getName());
param.setDriverUserNo(vo.getUserNo());
param.setMobile(vo.getMobile());
try {
Thread.sleep(2000L);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
networkDriverAccountService.createNetworkDriverAccount(param);
}
}
......
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.settle.NetworkDriverAccount;
import com.clx.performance.param.pc.PageNetworkAccountListParam;
import com.clx.performance.sqlProvider.settle.NetworkDriverAccountProvider;
import com.clx.performance.vo.pc.IntegralRecordVO;
import com.clx.performance.vo.pc.NetworkDriverAccountVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
......@@ -19,7 +20,7 @@ import org.apache.ibatis.annotations.Update;
public interface NetworkDriverAccountMapper extends BaseMapper<NetworkDriverAccount> {
@SelectProvider(type = NetworkDriverAccountProvider.class, method = "networkAccountList")
IPage<NetworkDriverAccountVO> networkAccountList(Page<NetworkDriverAccountVO> page, PageNetworkAccountListParam param);
IPage<NetworkDriverAccountVO> networkAccountList(@Param("page")Page<NetworkDriverAccountVO> page, @Param("param")PageNetworkAccountListParam param);
@Update("update network_driver_account set usable_balance = usable_balance + #{account.usableBalance}"
+ ",account_balance = account_balance + #{account.accountBalance}"
......
package com.clx.performance.mapper.settle;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.settle.SettlementOwner;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SettlementOwnerMapper extends BaseMapper<SettlementOwner> {
}
\ No newline at end of file
......@@ -66,6 +66,7 @@ public class SettlementOwner implements HasKey<Integer> {
private Integer status; //状态
private String remark; //备注
private Integer mergeStatus; //是否合并 0-否,1-是
private Integer mergeSettlementFlag; //合并结算单标志 1:普通结算单 2:合并结算单
private String mergedBy; //合并人
private LocalDateTime mergeTime; //合并结算单时间
private LocalDateTime createTime; //创建时间
......
......@@ -2,10 +2,7 @@ package com.clx.performance.service;
import com.clx.performance.dto.zjxl.TruckCoordinateDTO;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.param.pc.OrderGoodsTruckListParam;
import com.clx.performance.param.pc.PageTruckListParam;
import com.clx.performance.param.pc.PageVicinityTruckListParam;
import com.clx.performance.param.pc.TruckTraceParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.vo.pc.OrderGoodsTruckListVO;
import com.clx.performance.vo.pc.PageTruckListVO;
import com.clx.performance.vo.pc.TruckTraceVO;
......@@ -37,4 +34,6 @@ public interface TruckService {
List<OrderGoodsTruckListVO> getOrderGoodsTruckList(OrderGoodsTruckListParam param);
List<TruckTraceVO> getTruckTrace(TruckTraceParam param);
List<String> judgeTruckStatus(JudgeTruckStatusParam param);
}
......@@ -32,4 +32,5 @@ public interface BreakContractDriverRecordService {
BigDecimal getBreakContractFigure(String childNo);
Integer getChildTruckDemand(String childNo);
}
......@@ -68,6 +68,10 @@ import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@Slf4j
@Service
......
......@@ -11,10 +11,7 @@ import com.clx.performance.enums.DriverTruckEnum;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.job.TruckTraceJob;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.param.pc.OrderGoodsTruckListParam;
import com.clx.performance.param.pc.PageTruckListParam;
import com.clx.performance.param.pc.PageVicinityTruckListParam;
import com.clx.performance.param.pc.TruckTraceParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.service.TruckService;
import com.clx.performance.utils.RedisGeoUntil;
import com.clx.performance.utils.zjxl.ZjxlGpsService;
......@@ -268,9 +265,7 @@ public class TruckServiceImpl implements TruckService {
}
Map<String,Integer> truckStatusMap = new HashMap<>();
result.getData().stream().forEach(item->{
truckStatusMap.put(item.getTruckNo(),item.getTruckOrderStatus());
});
result.getData().forEach(item-> truckStatusMap.put(item.getTruckNo(),item.getTruckOrderStatus()));
return truckStatusMap;
}
......@@ -399,4 +394,18 @@ public class TruckServiceImpl implements TruckService {
}
return result;
}
@Override
public List<String> judgeTruckStatus(JudgeTruckStatusParam param) {
Map<String,Integer> truckStatusMap = this.getTruckStatusMap();
Set<String> set = new HashSet<>(param.getTruckNoList());
List<OrderGoodsTruckBind> binds = orderGoodsTruckBindDao.judgeTruckIsBindDxOrder(set);
List<String> occupyTruckList = binds.stream().map(OrderGoodsTruckBind::getTruckNo).collect(Collectors.toList());
param.getTruckNoList().forEach(truckNo->{
if (!occupyTruckList.contains(truckNo) && Objects.equals(DriverTruckEnum.TruckOrderStatus.ORDER_HEAVY.getCode(), truckStatusMap.get(truckNo))) {
occupyTruckList.add(truckNo);
}
});
return occupyTruckList;
}
}
......@@ -8,6 +8,7 @@ import com.clx.performance.dao.breakcontract.BreakContractDriverRecordDao;
import com.clx.performance.dao.breakcontract.BreakContractDriverRuleDao;
import com.clx.performance.enums.BreakContractRecordEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.TruckDemandEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.breakcontract.BreakContractDriverRecord;
......@@ -134,6 +135,12 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
@Override
public void saveDriverRecordOfOrderChildCancel(OrderChild orderChild, Long createBy, String createName) {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo())
.orElseThrow(PerformanceResultEnum.ORDER_GOODS_NO_FOUND);
//自由车辆的货单,不产生违约
if(Objects.equals(orderGoods.getTruckDemand(), TruckDemandEnum.TruckType.OWNER_CAR.getCode())){
return;
}
BreakContractDriverRecord record = new BreakContractDriverRecord();
BreakContractDriverRule rule = breakContractDriverRuleDao.getEntityByKey(1).orNull();
......@@ -170,7 +177,11 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
BreakContractDriverRecord record = new BreakContractDriverRecord();
// 1小时内不违约
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_GOODS_NO_FOUND);
//自由车辆的货单,不产生违约
if(Objects.equals(orderGoods.getTruckDemand(), TruckDemandEnum.TruckType.OWNER_CAR.getCode())){
return;
}
if (!orderChild.getPayTime().plusHours(1).isBefore(orderGoods.getLastArriveReceiveTime())){return;}
BreakContractDriverRule rule = breakContractDriverRuleDao.getEntityByKey(1).orNull();
......@@ -204,7 +215,11 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
@Override
public void saveDriverRecordOfArriveReceiveAddress(OrderChild orderChild, Long createBy, String createName) {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_GOODS_NO_FOUND);
//自由车辆的货单,不产生违约
if(Objects.equals(orderGoods.getTruckDemand(), TruckDemandEnum.TruckType.OWNER_CAR.getCode())){
return;
}
if (!orderChild.getArriveReceiveTime().isAfter(orderGoods.getLastArriveReceiveTime())) {return;}
BreakContractDriverRule rule = breakContractDriverRuleDao.getEntityByKey(1).orNull();
......@@ -239,6 +254,11 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
@Override
public BigDecimal getBreakContractFigure(String childNo) {
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
//自由车辆违约金额返回0元
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_GOODS_NO_FOUND);
if(Objects.equals(TruckDemandEnum.TruckType.OWNER_CAR.getCode(),orderGoods.getTruckDemand())){
return new BigDecimal("0.00");
}
BreakContractDriverRule rule = breakContractDriverRuleDao.getEntityByKey(1).orNull();
if (rule == null) {return BigDecimal.ZERO;}
......@@ -292,4 +312,13 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
return money.movePointRight(2);
}
@Override
public Integer getChildTruckDemand(String childNo) {
OrderChild child = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(child.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_GOODS_NO_FOUND);
if(Objects.equals(orderGoods.getTruckDemand(),TruckDemandEnum.TruckType.OWNER_CAR.getCode())){
return 1;
}
return 0;
}
}
......@@ -140,7 +140,7 @@ public class BreakContractSettlementDriverServiceImpl implements BreakContractSe
}
public static String formatPayMsg(Integer settlementStatus,String payMsg) {
if (!Objects.equals(settlementStatus, BreakContractSettlementDriverEnum.SettleStatus.YES.getCode())) {
if (!Objects.equals(settlementStatus, BreakContractSettlementDriverEnum.SettleStatus.YES.getCode()) || StringUtils.equals("success",payMsg)) {
return null;
}
return payMsg;
......
......@@ -21,6 +21,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
......
......@@ -73,9 +73,9 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
NetworkDriverAccount networkDriverAccount = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, settlementDriverDetail.getDriverUserNo()).get();
log.info("查询出NetworkDriverAccount{}", JSONUtil.parse(networkDriverAccount));
NetworkDriverAccount build = NetworkDriverAccount.builder().id(networkDriverAccount.getId())
.usableBalance(settlementDriverDetail.getFreight())
.usableBalance(settlementDriverDetail.getSettlementFreight())
.frozenBalance(BigDecimal.ZERO)
.accountBalance(settlementDriverDetail.getFreight()).build();
.accountBalance(settlementDriverDetail.getSettlementFreight()).build();
while (true) {
NetworkDriverAccount account = networkDriverAccountDao.getEntityByKey(build.getId()).get();
build.setModifiedTime(account.getModifiedTime());
......@@ -86,7 +86,8 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
NetworkDriverRunningWaterRecord entity = NetworkDriverRunningWaterRecord.builder()
.mobile(networkDriverAccount.getMobile())
.usableBalance(account.getUsableBalance())
.alterationBalance(settlementDriverDetail.getFreight()).accountBalance(account.getAccountBalance())
.alterationBalance(settlementDriverDetail.getSettlementFreight())
.accountBalance(account.getAccountBalance())
.frozenBalance(account.getFrozenBalance()).createBy("系统")
.fundType(NetworkDriverAccountEnum.FundType.INCOME.getCode())
.fundTypeMsg(NetworkDriverAccountEnum.FundType.INCOME.getMsg())
......@@ -118,9 +119,9 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
NetworkDriverAccount networkDriverAccount = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, settlementDriverDetail.getDriverUserNo()).get();
log.info("查询出NetworkDriverAccount{}", JSONUtil.parse(networkDriverAccount));
NetworkDriverAccount build = NetworkDriverAccount.builder().id(networkDriverAccount.getId())
.frozenBalance(settlementDriverDetail.getFreight())
.frozenBalance(settlementDriverDetail.getSettlementFreight())
.accountBalance(BigDecimal.ZERO)
.usableBalance(settlementDriverDetail.getFreight()).build();
.usableBalance(settlementDriverDetail.getSettlementFreight()).build();
while (true) {
NetworkDriverAccount account = networkDriverAccountDao.getEntityByKey(build.getId()).get();
build.setModifiedTime(account.getModifiedTime());
......@@ -131,7 +132,8 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
NetworkDriverRunningWaterRecord entity = NetworkDriverRunningWaterRecord.builder()
.usableBalance(account.getUsableBalance())
.mobile(networkDriverAccount.getMobile())
.alterationBalance(settlementDriverDetail.getFreight()).accountBalance(account.getAccountBalance())
.alterationBalance(settlementDriverDetail.getSettlementFreight())
.accountBalance(account.getAccountBalance())
.frozenBalance(account.getFrozenBalance()).createBy("系统")
.fundType(NetworkDriverAccountEnum.FundType.FROZEN.getCode())
.fundTypeMsg(NetworkDriverAccountEnum.FundType.FROZEN.getMsg())
......@@ -159,9 +161,9 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
NetworkDriverAccount networkDriverAccount = networkDriverAccountDao.getOneByField(NetworkDriverAccount::getDriverUserNo, settlementDriverDetail.getDriverUserNo()).get();
log.info("查询出NetworkDriverAccount{}", JSONUtil.parse(networkDriverAccount));
NetworkDriverAccount build = NetworkDriverAccount.builder().id(networkDriverAccount.getId())
.frozenBalance(settlementDriverDetail.getFreight().negate())
.frozenBalance(settlementDriverDetail.getSettlementFreight().negate())
.usableBalance(BigDecimal.ZERO)
.accountBalance(settlementDriverDetail.getFreight()).build();
.accountBalance(settlementDriverDetail.getSettlementFreight()).build();
while (true) {
NetworkDriverAccount account = networkDriverAccountDao.getEntityByKey(build.getId()).get();
build.setModifiedTime(account.getModifiedTime());
......@@ -174,7 +176,8 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
NetworkDriverRunningWaterRecord entity = NetworkDriverRunningWaterRecord.builder()
.usableBalance(account.getUsableBalance())
.mobile(networkDriverAccount.getMobile())
.alterationBalance(settlementDriverDetail.getFreight()).accountBalance(account.getAccountBalance())
.alterationBalance(settlementDriverDetail.getSettlementFreight())
.accountBalance(account.getAccountBalance())
.frozenBalance(account.getFrozenBalance()).createBy("系统")
.fundType(NetworkDriverAccountEnum.FundType.EXPENDITURE.getCode())
.fundTypeMsg(NetworkDriverAccountEnum.FundType.EXPENDITURE.getMsg())
......@@ -197,7 +200,7 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
@Override
public void generateNetworkDriverRunningWaterRecord(SettlementDriverDetail settlementDriverDetail, Integer runningWaterType) {
if (NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode().equals(runningWaterType)) {
log.info("执行生成网络货运钱包相关,参数userNo:{},money{},runningWaterType:{}", settlementDriverDetail.getDriverUserNo(), settlementDriverDetail.getPrepayFreight(), runningWaterType);
log.info("执行生成网络货运钱包相关,参数userNo:{},money{},runningWaterType:{}", settlementDriverDetail.getDriverUserNo(), settlementDriverDetail.getSettlementFreight(), runningWaterType);
strategyMap.get(NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode()).accept(settlementDriverDetail);
strategyMap.get(NetworkDriverAccountEnum.RunningWaterStatus.CASE_OUT_FROZEN.getCode()).accept(settlementDriverDetail);
}
......@@ -227,8 +230,8 @@ public class NetworkDriverRunningWaterRecordServiceImpl implements NetworkDriver
.driverUserName(settlementDriverDetail.getDriverName()).mobile(bankCardVO.getMobile())
.status(NetworkDriverAccountEnum.CaseOutRecordStatus.WAIT_PLATFORM_PAY.getCode())
.statusMsg(NetworkDriverAccountEnum.CaseOutRecordStatus.WAIT_PLATFORM_PAY.getMsg())
.bank(bankCardVO.getBank()).collectionBankCode(bankCardVO.getBankCode())
.payee(bankCardVO.getName()).alterationBalance(settlementDriverDetail.getFreight())
.bank(bankCardVO.getBank()).collectionBankCode(bankCardVO.getCardNo())
.payee(bankCardVO.getName()).alterationBalance(settlementDriverDetail.getSettlementFreight())
.orderNo(settlementDriverDetail.getOrderNo()).orderGoodsNo(settlementDriverDetail.getOrderGoodsNo())
.childNo(settlementDriverDetail.getChildNo())
.platform("网运平台").createBy("系统").build();
......
......@@ -71,7 +71,7 @@ public class SettlementDriverServiceImpl implements SettlementDriverService {
}
public static String formatPayMsg(Integer settlementStatus,String payMsg) {
if (!Objects.equals(settlementStatus, SettlementDriverEnum.Status.SETTLED.getCode())) {
if (!Objects.equals(settlementStatus, SettlementDriverEnum.Status.SETTLED.getCode()) || StringUtils.equals("success",payMsg)) {
return null;
}
return payMsg;
......
......@@ -18,7 +18,6 @@ import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementPlatformEnum;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.feign.TransportFeignService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriver;
......@@ -149,7 +148,8 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
if (!settlementDriverDetail.getInvoiceType().equals(SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
paySettlementDriver(settlementDriverDetail);
} else {
if (settlementDriverDetail.getPrepayFreight().compareTo(BigDecimal.ZERO) > 0) {
if (settlementDriverDetail.getPrepayFreightFlag().equals(SettlementDriverEnum.PrepayFreightFlag.PAYED.getCode())
&& settlementDriverDetail.getPrepayFreight().compareTo(BigDecimal.ZERO) > 0) {
settlementDriverDetail.setSettlementNo(settlementNo);
//插入同步网络货运待支付记录
childSyncTransportRecordService.addOrderChildSyncTransportRecord(settlementDriverDetail);
......@@ -449,7 +449,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
/**
* 创建结算单号
*/
private String settlementNoGenerate(){
public String settlementNoGenerate(){
return uniqueOrderNumService.getUniqueOrderNum(com.msl.common.utils.LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), com.msl.common.utils.LocalDateTimeUtils.DATE_DAY));
}
......
......@@ -19,6 +19,7 @@ import com.clx.performance.model.settle.SettlementPlatformAccount;
import com.clx.performance.param.pc.owner.*;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.settle.SettlementLogService;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.service.settle.SettlementOwnerService;
import com.clx.performance.struct.settle.SettlementLogStruct;
import com.clx.performance.struct.settle.SettlementOwnerStruct;
......@@ -40,6 +41,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
......@@ -71,6 +73,9 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
private final OwnerAccountService ownerAccountService;
private final NetworkSyncComponent networkSyncComponent;
private final SettlementMqHandlerService settlementMqHandlerService;
@Override
public CarrierSettlementOwnerDetailVO getCarrierSettlementOwnerDetail(Integer id) {
......@@ -535,6 +540,89 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
settlementOwnerDao.updateInvoiceStatusBySettlementNo(settlementNo, SettlementOwnerEnum.InvoiceStatus.NO_NEED_INVOICE.getCode());
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void mergeOwnerSettlement(MergeOwnerSettlementParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LocalDateTime now = LocalDateTime.now();
if(param.getList().size() < 2){
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND,"请选择至少两条记录");
}
//查询结算单数据
List<SettlementOwner> settlementOwnersList = settlementOwnerDao.listInField(SettlementOwner :: getId,param.getList());
if(!Objects.equals(param.getList().size(),settlementOwnersList.size())){
log.warn("查询的货主结算单数据和实际查询出来的货主结算单数量不一致,结算单id集合:{}",param.getList());
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
//同一货主,同一开票标识,同一结算方式的结算单可支持手动合并
List<String> settlementNos = new ArrayList<>();
//货主编码
Long ownerUserNo = null;
//开票标识:1网运单 2普通单
Integer invoiceType = null;
//结算方式 1装车净重 2卸车净重
Integer settlementWay = null;
String tip = "数据错误,结算单状态“待对账”且同一货主,同一开票标识,同一结算方式的结算单支持合并";
SettlementOwner merge = null;
String settlementNo = settlementMqHandlerService.settlementNoGenerate();
for (SettlementOwner item : settlementOwnersList) {
if(Objects.equals(SettlementOwnerEnum.MergeSettlementFlag.MERGE.getCode(),item.getMergeSettlementFlag())
|| Objects.equals(SettlementOwnerEnum.MergeStatus.YES.getCode(),item.getMergeStatus())){
log.warn("货主结算单号:{} 结算单不允许二次合并",item.getSettlementNo());
throw new ServiceSystemException(PerformanceResultEnum.DATA_REPEAT,"结算单不允许二次合并");
}
if(!Objects.equals(SettlementOwnerEnum.Status.TO_BE_ACCOUNT.getCode(),item.getStatus())){
log.warn("货主结算单号:{} 的结算状态非待对账",item.getSettlementNo());
throw new ServiceSystemException(PerformanceResultEnum.DATA_REPEAT,tip);
}
if(Objects.nonNull(ownerUserNo) && !Objects.equals(ownerUserNo,item.getOwnerUserNo())){
log.warn("货主结算单号:{} 在本批次中不属于同一货主",item.getSettlementNo());
throw new ServiceSystemException(PerformanceResultEnum.DATA_REPEAT,tip);
}
if(Objects.nonNull(invoiceType) && !Objects.equals(invoiceType,item.getInvoiceType())){
log.warn("货主结算单号:{} 在本批次中不属于同一开票标志",item.getSettlementNo());
throw new ServiceSystemException(PerformanceResultEnum.DATA_REPEAT,tip);
}
if(Objects.nonNull(settlementWay) && !Objects.equals(settlementWay,item.getSettlementWay())){
log.warn("货主结算单号:{} 在本批次中不属于同一结算方式",item.getSettlementNo());
throw new ServiceSystemException(PerformanceResultEnum.DATA_REPEAT,tip);
}
ownerUserNo = item.getOwnerUserNo();
invoiceType = item.getInvoiceType();
settlementWay = item.getSettlementWay();
settlementNos.add(item.getSettlementNo());
//合并数据
if(Objects.nonNull(merge)){
merge.setWeight(merge.getWeight().add(item.getWeight()));
merge.setFreight(merge.getFreight().add(item.getFreight()));
merge.setLossFreight(merge.getLossFreight().add(item.getLossFreight()));
merge.setLossWeight(merge.getLossWeight().add(item.getLossWeight()));
merge.setPrepayFreight(merge.getPrepayFreight().add(item.getPrepayFreight()));
merge.setSettlementFreight(merge.getSettlementFreight().add(item.getSettlementFreight()));
merge.setInvoiceFreight(merge.getInvoiceFreight().add(item.getInvoiceFreight()));
}else{
merge = item;
merge.setId(null);
merge.setId(null);
merge.setOrderNo("");
merge.setSettlementNo(settlementNo);
merge.setSettlementSubNo(null);
merge.setMergedBy(loginUserInfo.getUserName());
merge.setMergeTime(LocalDateTime.now());
merge.setMergeSettlementFlag(SettlementOwnerEnum.MergeSettlementFlag.MERGE.getCode());
}
}
//更新结算单
settlementOwnerDao.updateSettlementMerge(settlementNo,settlementNos,loginUserInfo.getUserName(),now);
//插入合并单
settlementOwnerDao.saveEntity(merge);
//更新货主运单计费明细
settlementOwnerDetailDao.updateSettlementMerge(settlementNo,settlementNos);
}
}
......@@ -15,6 +15,7 @@ import com.clx.performance.enums.IdTypeEnum;
import com.clx.performance.enums.NetworkDriverAccountEnum;
import com.clx.performance.enums.OwnerAccountEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
......@@ -90,9 +91,9 @@ public class SettlementServiceImpl implements SettlementService {
}
// 开票金额
settlementOwnerDetail.setInvoiceFreight(invoiceFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) < 0) {
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) <= 0) {
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
settlementDriverDetail.setPrepayFreightFlag(0);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
} else {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
......@@ -127,7 +128,7 @@ public class SettlementServiceImpl implements SettlementService {
//冻结的预付运费为0 或者 此刻预付运费也可能为0,那么就不用生成扣除相关流水逻辑
if (subtract.compareTo(BigDecimal.ZERO) <= 0 || ans.compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(0);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
} else {
if (subtract.subtract(ans).compareTo(BigDecimal.ZERO) >= 0) {
//账户扣钱并生成扣除流水
......@@ -146,13 +147,13 @@ public class SettlementServiceImpl implements SettlementService {
} else {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(0);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
}
}
} else {
settlementDriverDetail.setPrepayFreightFlag(0);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
}
......@@ -204,7 +205,7 @@ public class SettlementServiceImpl implements SettlementService {
OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode());
settlementOwnerDetail.setPrepayFreight(ans);
settlementDriverDetail.setPrepayFreightFlag(1);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.PAYED.getCode());
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE.getCode());
......
......@@ -14,4 +14,6 @@ public interface SettlementMqHandlerService {
String paySettlementDriver(SettlementDriverDetail detail);
String settlementNoGenerate();
}
......@@ -54,4 +54,6 @@ public interface SettlementOwnerService {
void payeeConfirm(String settlementNo);
void invoicingStatusNotify(InvoicingStatusNotifyDTO invoicingStatusNotifyDTO);
void mergeOwnerSettlement(MergeOwnerSettlementParam param);
}
package com.clx.performance.sqlProvider.settle;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.PageNetworkAccountListParam;
import com.clx.performance.vo.pc.NetworkDriverAccountVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
public class NetworkDriverAccountProvider {
public String networkAccountList(@Param("param") PageNetworkAccountListParam param) {
public String networkAccountList(@Param("page") Page<NetworkDriverAccountVO> page, @Param("param") PageNetworkAccountListParam param) {
String sql = new SQL() {{
SELECT("a.id, a.driver_user_no," +
" a.driver_user_name, a.mobile, a.account_balance, " +
......
package com.clx.performance.sqlProvider.settle;
/**
* @ClassName SettlementOwnerSqlProvider
* @Description
* @Author kavin
* @Date 2023/12/19 10:34
* @Version 1.0
*/
public class SettlementOwnerSqlProvider {
}
......@@ -23,6 +23,8 @@ public interface SettlementOwnerStruct {
CarrierSettlementOwnerDetailVO convertToDetail(SettlementOwner settlementOwner);
@Mapping(target = "settlementNo", source = "settlementSubNo")
@Mapping(target = "settlementSubNo", source = "settlementNo")
List<SettlementMergeVO> convertToMergeList(List<SettlementOwner> settlementOwners);
List<CarrierPageSettlementOwnerVO> convertCarrierList(List<SettlementOwner> settlementOwners);
......@@ -38,4 +40,8 @@ public interface SettlementOwnerStruct {
CarrierSettlementOwnerExpressVO convertToExpress(SettlementOwner settlementOwner);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论