提交 bc6b3685 authored 作者: aiqingguo's avatar aiqingguo

结算

上级 139e7fe7
package com.clx.performance.controller.temp;
import com.clx.performance.service.TempService;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
......@@ -19,6 +21,10 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping(value="/temp")
public class TempController {
@Autowired
private TempService tempService;
@ApiOperation(value = "test", notes = "<br>By:艾庆国")
@RequestMapping(value = "/test", method = RequestMethod.GET)
......@@ -26,4 +32,13 @@ public class TempController {
return Result.ok();
}
@ApiOperation(value = "更新网运标识", notes = "<br>By:艾庆国")
@RequestMapping(value = "/updateInvoiceType", method = RequestMethod.POST)
public Result<Void> updateInvoiceType(String childNo, Integer invoiceType) {
tempService.updateInvoiceType(childNo, invoiceType);
return Result.ok();
}
}
......@@ -24,17 +24,27 @@ import java.util.Objects;
public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverDetailMapper, SettlementDriverDetail, Integer> implements SettlementDriverDetailDao {
@Override
public boolean updateInvoiceType(SettlementDriverDetail item) {
return false;
return update(lUdWrapper()
.eq(SettlementDriverDetail::getId, item.getId())
.set(SettlementDriverDetail::getInvoiceType, item.getInvoiceType())
);
}
@Override
public boolean updateSettlementNo(SettlementDriverDetail item) {
return false;
return update(lUdWrapper()
.eq(SettlementDriverDetail::getId, item.getId())
.set(SettlementDriverDetail::getSettlementNo, item.getSettlementNo())
);
}
@Override
public Optional<SettlementDriverDetail> getByChildNo(String childNo) {
return null;
return Optional.of(childNo)
.map(item -> lQrWrapper()
.eq(SettlementDriverDetail::getChildNo, item)
)
.map(super::getOne);
}
@Override
......
......@@ -29,12 +29,24 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
@Override
public boolean updateSettlementPeriodMonth(SettlementOwner item) {
return false;
return update(lUdWrapper()
.eq(SettlementOwner::getId, item.getId())
.set(SettlementOwner::getWeight, item.getWeight())
.set(SettlementOwner::getFreight, item.getFreight())
.set(SettlementOwner::getLossFreight, item.getLossFreight())
.set(SettlementOwner::getSettlementFreight, item.getSettlementFreight())
.set(SettlementOwner::getInvoiceFreight, item.getInvoiceFreight())
.set(SettlementOwner::getPrepayFreight, item.getPrepayFreight())
);
}
@Override
public boolean updateLock(SettlementOwner item) {
return false;
return update(lUdWrapper()
.eq(SettlementOwner::getId, item.getId())
.eq(SettlementOwner::getStatus, SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode())
.set(SettlementOwner::getStatus, item.getStatus())
);
}
@Override
......@@ -109,17 +121,34 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
@Override
public Optional<SettlementOwner> selectUnlockOfSettlementPeriodMonth(String orderNo, LocalDateTime settlementPeriodTime, Integer invoiceType) {
return null;
return Optional.of(lQrWrapper()
.eq(SettlementOwner::getOrderNo, orderNo)
.eq(SettlementOwner::getSettlementPeriodType, SettlementOwnerEnum.SettlementPeriodType.MONTH.getCode())
.eq(SettlementOwner::getSettlementPeriodTime, settlementPeriodTime)
.eq(SettlementOwner::getInvoiceType, invoiceType)
.eq(SettlementOwner::getStatus, SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode())
)
.map(super::getOne);
}
@Override
public Optional<SettlementOwner> selectUnlockOfSettlementPeriodImmediate(String orderNo, Integer invoiceType) {
return null;
return Optional.of(lQrWrapper()
.eq(SettlementOwner::getOrderNo, orderNo)
.eq(SettlementOwner::getSettlementPeriodType, SettlementOwnerEnum.SettlementPeriodType.IMMEDIATE.getCode())
.eq(SettlementOwner::getInvoiceType, invoiceType)
.eq(SettlementOwner::getStatus, SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode())
)
.map(super::getOne);
}
@Override
public List<SettlementOwner> listToBeLockOfSettlementPeriodMonth(LocalDateTime settlementPeriodTime) {
return null;
return list(lQrWrapper()
.eq(SettlementOwner::getSettlementPeriodType, SettlementOwnerEnum.SettlementPeriodType.MONTH.getCode())
.lt(SettlementOwner::getSettlementPeriodTime, settlementPeriodTime)
.le(SettlementOwner::getStatus, SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode())
);
}
@Override
......
......@@ -26,17 +26,28 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
@Override
public boolean updateInvoiceType(SettlementOwnerDetail item) {
return false;
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getInvoiceType, item.getInvoiceType())
.set(SettlementOwnerDetail::getPrepayFreight, item.getPrepayFreight())
);
}
@Override
public boolean updateSettlementNo(SettlementOwnerDetail item) {
return false;
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getSettlementNo, item.getSettlementNo())
);
}
@Override
public Optional<SettlementOwnerDetail> getByChildNo(String childNo) {
return null;
return Optional.of(childNo)
.map(item -> lQrWrapper()
.eq(SettlementOwnerDetail::getChildNo, item)
)
.map(super::getOne);
}
@Override
......
package com.clx.performance.service;
public interface TempService {
void updateInvoiceType(String childNo, Integer InvoiceType);
}
......@@ -164,6 +164,7 @@ public class OrderChildServiceImpl implements OrderChildService {
String childNo = childNoGenerate();
// 查询司机车辆信息
DriverTruckInfoFeignVo driverTruckInfo = driverService.getUserDetailInfo(param.getDriverUserNo(), param.getTruckId()).orElseThrow(ResultCodeEnum.FAIL);
BigDecimal truckLoad = driverTruckInfo.getLoad();
......@@ -177,6 +178,9 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_INVALID1);
}
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
// // 车型限制
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// if (StringUtils.isNotBlank(orderInfo.getTruckModelList())){
......@@ -215,7 +219,7 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
orderChild.setFreightPrice(orderGoods.getPendingOrderFreight());
orderChild.setLossPrice(orderGoods.getLossPrice());
orderChild.setOrderFreightPrice(BigDecimal.ZERO);
orderChild.setOrderFreightPrice(orderInfo.getValidFreightPrice());
orderChild.setGoodsId(orderGoods.getGoodsId());
orderChild.setGoodsName(orderGoods.getGoodsName());
......
package com.clx.performance.service.impl;
import com.clx.performance.service.TempService;
import com.clx.performance.service.settle.SettlementService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class TempServiceImpl implements TempService {
@Autowired
private SettlementService settlementService;
@Override
public void updateInvoiceType(String childNo, Integer invoiceType) {
settlementService.updateSettlementDetailInvoiceType(childNo, invoiceType);
}
}
package com.clx.performance.service.impl.settle;
import com.clx.performance.dao.settle.SettlementDriverDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.impl.UniqueOrderNumService;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.Objects;
@Slf4j
@Service
......@@ -29,6 +35,8 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
private SettlementDriverDetailDao settlementDriverDetailDao;
@Autowired
private SettlementOwnerDao settlementOwnerDao;
@Autowired
private SettlementDriverDao settlementDriverDao;
@Autowired
private OwnerInfoService ownerInfoService;
......@@ -44,7 +52,38 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementOwner settlementOwner = null;
OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(settlementOwnerDetail.getOwnerUserNo());
if (Objects.equals(ownerInfo.getSettlementAccountPeriod(),2)){ //月结
LocalDateTime settlementPeriodTime = LocalDateTimeUtils.getBeginMonthDate();
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodMonth(settlementOwnerDetail.getOrderNo(), settlementPeriodTime, settlementOwnerDetail.getInvoiceType()).orNull();
if (settlementOwner == null){ // 月结初始化
settlementPeriodMonthInit(settlementOwnerDetail, settlementPeriodTime);
}
else { // 月结更新
settlementPeriodMonthUpdate(settlementOwner, settlementOwnerDetail);
}
}
else {
settlementOwner = settlementOwnerDao.selectUnlockOfSettlementPeriodImmediate(settlementOwnerDetail.getOrderNo(), settlementOwnerDetail.getInvoiceType()).orNull();
if (settlementOwner == null){ // 拉运完成初始化
settlementPeriodImmediateInit(settlementOwnerDetail);
}
else { // 拉运完成更新
settlementPeriodImmediateUpdate(settlementOwner, settlementOwnerDetail);
}
}
settlementDriverSave(settlementDriverDetail);
// 更新结算单
settlementOwnerDetail.setSettlementNo(settlementOwner.getSettlementNo());
settlementDriverDetail.setSettlementNo(settlementOwner.getSettlementNo());
settlementOwnerDetailDao.updateSettlementNo(settlementOwnerDetail);
settlementDriverDetailDao.updateSettlementNo(settlementDriverDetail);
}
@Override
......@@ -53,25 +92,85 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
private void settlementDriverSave(SettlementDriverDetail settlementDriverDetail){
SettlementDriver settlementDriver = new SettlementDriver();
settlementDriverDao.saveEntity(settlementDriver);
}
/**
* 月结初始化
*/
private void settlementPeriodMonthInit(SettlementOwnerDetail settlementOwnerDetail, LocalDateTime settlementPeriodTime){
SettlementOwner settlementOwner = new SettlementOwner();
String settlementNo = settlementNoGenerate();
settlementOwner.setSettlementNo(settlementNo);
settlementOwner.setOwnerUserNo(settlementOwnerDetail.getOwnerUserNo());
settlementOwner.setOwnerName(settlementOwnerDetail.getOwnerName());
settlementOwner.setOrderNo(settlementOwnerDetail.getOrderNo());
settlementOwner.setSettlementPeriodType(SettlementOwnerEnum.SettlementPeriodType.MONTH.getCode());
settlementOwner.setSettlementPeriodTime(settlementPeriodTime);
settlementOwner.setWeight(settlementOwnerDetail.getWeight());
settlementOwner.setFreight(settlementOwnerDetail.getFreight());
settlementOwner.setLossFreight(settlementOwnerDetail.getLossFreight());
settlementOwner.setSettlementFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwner.setInvoiceType(settlementOwnerDetail.getInvoiceType());
settlementOwner.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight());
settlementOwner.setPrepayFreight(settlementOwnerDetail.getPrepayFreight());
settlementOwner.setStatus(SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode());
settlementOwnerDao.saveEntity(settlementOwner);
}
/**
* 月结更新
*/
private void settlementPeriodMonthUpdate(SettlementOwner settlementOwner, SettlementOwnerDetail settlementOwnerDetail){
settlementOwner.setWeight(settlementOwnerDetail.getWeight());
settlementOwner.setFreight(settlementOwnerDetail.getFreight());
settlementOwner.setLossFreight(settlementOwnerDetail.getLossFreight());
settlementOwner.setSettlementFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwner.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight());
settlementOwner.setPrepayFreight(settlementOwnerDetail.getPrepayFreight());
settlementOwnerDao.updateSettlementPeriodMonth(settlementOwner);
}
/**
* 拉运完成结 初始化
*/
private void settlementPeriodImmediateInit(SettlementOwnerDetail settlementOwnerDetail){
SettlementOwner settlementOwner = new SettlementOwner();
String settlementNo = settlementNoGenerate();
settlementOwner.setSettlementNo(settlementNo);
settlementOwner.setOwnerUserNo(settlementOwnerDetail.getOwnerUserNo());
settlementOwner.setOwnerName(settlementOwnerDetail.getOwnerName());
settlementOwner.setOrderNo(settlementOwnerDetail.getOrderNo());
settlementOwner.setSettlementPeriodType(SettlementOwnerEnum.SettlementPeriodType.IMMEDIATE.getCode());
settlementOwner.setWeight(settlementOwnerDetail.getWeight());
settlementOwner.setFreight(settlementOwnerDetail.getFreight());
settlementOwner.setLossFreight(settlementOwnerDetail.getLossFreight());
settlementOwner.setSettlementFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwner.setInvoiceType(settlementOwnerDetail.getInvoiceType());
settlementOwner.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight());
settlementOwner.setPrepayFreight(settlementOwnerDetail.getPrepayFreight());
settlementOwner.setStatus(SettlementOwnerEnum.Status.TO_BE_ACCOUNT.getCode());
settlementOwnerDao.saveEntity(settlementOwner);
}
/**
......@@ -79,6 +178,16 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
*/
private void settlementPeriodImmediateUpdate(SettlementOwner settlementOwner,SettlementOwnerDetail settlementOwnerDetail){
settlementOwner.setWeight(settlementOwnerDetail.getWeight());
settlementOwner.setFreight(settlementOwnerDetail.getFreight());
settlementOwner.setLossFreight(settlementOwnerDetail.getLossFreight());
settlementOwner.setSettlementFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwner.setInvoiceFreight(settlementOwnerDetail.getInvoiceFreight());
settlementOwner.setPrepayFreight(settlementOwnerDetail.getPrepayFreight());
settlementOwnerDao.updateSettlementPeriodMonth(settlementOwner);
}
/**
......
......@@ -59,7 +59,7 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
settlementOwnerDetail.setGoodsName(orderChild.getGoodsName());
// 运费
settlementOwnerDetail.setFreightPrice(BigDecimal.ZERO); //平台运费
settlementOwnerDetail.setFreightPrice(orderChild.getOrderFreightPrice()); //平台运费
settlementOwnerDetail.setWeight(weightCalc(orderChild.getLoadNet(), orderChild.getUnloadNet()));
settlementOwnerDetail.setFreight(freightCalc(settlementOwnerDetail.getFreightPrice(), settlementOwnerDetail.getWeight()));
......
......@@ -4,6 +4,7 @@ import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
......@@ -14,6 +15,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Objects;
@Slf4j
@Service
public class SettlementServiceImpl implements SettlementService {
......@@ -31,16 +35,27 @@ public class SettlementServiceImpl implements SettlementService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateInvoiceType(String childNo, Integer invoiceType) {
public void updateSettlementDetailInvoiceType(String childNo, Integer invoiceType) {
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (settlementOwnerDetail.getInvoiceType() != null) {return;}
// 结算金额<0走普通单
if (settlementDriverDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) < 0){
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
}
settlementOwnerDetail.setInvoiceType(invoiceType);
settlementDriverDetail.setInvoiceType(invoiceType);
// 网运单更新预付运费
if (Objects.equals(settlementOwnerDetail.getInvoiceType(), SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
settlementOwnerDetail.setPrepayFreight(updatePrepayFreightPay(settlementOwnerDetail.getChildNo(),
settlementOwnerDetail.getFreight(), settlementOwnerDetail.getLossFreight()));
}
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
settlementDriverDetailDao.updateInvoiceType(settlementDriverDetail);
......@@ -48,4 +63,19 @@ public class SettlementServiceImpl implements SettlementService {
settlementMqService.invoiceTypeSync(childNo, invoiceType);
}
/**
* 预付运费支付
*/
private BigDecimal updatePrepayFreightPay(String childNo, BigDecimal freight, BigDecimal lossFreight){
BigDecimal prepayFreight = freight.subtract(lossFreight);
if (prepayFreight.compareTo(BigDecimal.ZERO) <= 0) {return BigDecimal.ZERO;}
//扣减预付运费
return prepayFreight;
}
}
......@@ -2,5 +2,5 @@ package com.clx.performance.service.settle;
public interface SettlementService {
void updateInvoiceType(String childNo, Integer invoiceType);
void updateSettlementDetailInvoiceType(String childNo, Integer invoiceType);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论