提交 68b26d53 authored 作者: liuhaiquan's avatar liuhaiquan

增加合并结算单逻辑

上级 307fcd1c
......@@ -108,4 +108,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();
}
}
}
......@@ -132,7 +132,7 @@ public class CarrierSettlementOwnerController {
@ApiOperation(value = "合并结算单",notes = "<br>By:刘海泉")
@PostMapping("/mergeOwnerSettlement")
public Result<Object> mergeOwnerSettlement(MergeOwnerSettlementParam param) {
public Result<Object> mergeOwnerSettlement(@RequestBody @Validated MergeOwnerSettlementParam param) {
settlementOwnerService.mergeOwnerSettlement(param);
return Result.ok();
}
......
......@@ -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;
......@@ -90,6 +91,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());
}
......@@ -123,6 +125,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());
}
......@@ -216,4 +219,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)
);
}
}
......@@ -101,4 +101,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)
);
}
}
......@@ -58,6 +58,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);
}
......@@ -33,4 +33,6 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
IPage<SettlementOwnerDetail> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param);
IPage<SettlementOwnerDetail> pageSettlementOwnerDetail(PageCarrierSettlementOwnerDetailParam param);
void updateSettlementMerge(String settlementNo, List<String> settlementNos);
}
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
......@@ -27,7 +27,6 @@ public class SettlementOwner implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer mergeSettlement; //是否是合并单 0:否 1:是
private Long ownerUserNo; //货主用户编号
private String ownerName; //货主名称
private Integer settlementWay; //结算方式 1装车净重 2卸车净重
......@@ -67,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; //创建时间
......
......@@ -40,6 +40,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;
......@@ -493,9 +494,11 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void mergeOwnerSettlement(MergeOwnerSettlementParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
LocalDateTime now = LocalDateTime.now();
//查询结算单数据
List<SettlementOwner> settlementOwnersList = settlementOwnerDao.listInField(SettlementOwner :: getId,param.getList());
if(!Objects.equals(param.getList().size(),settlementOwnersList.size())){
......@@ -503,12 +506,6 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
//同一货主,同一开票标识,同一结算方式的结算单可支持手动合并
List<String> settlementNos = checkMergeSettlementData(settlementOwnersList);
}
//检查合并的结算单是否符合合并条件
public List<String> checkMergeSettlementData(List<SettlementOwner> settlementOwnersList){
List<String> settlementNos = new ArrayList<>();
//货主编码
Long ownerUserNo = null;
......@@ -518,8 +515,14 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
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);
......@@ -532,7 +535,7 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
log.warn("货主结算单号:{} 在本批次中不属于同一开票标志",item.getSettlementNo());
throw new ServiceSystemException(PerformanceResultEnum.DATA_REPEAT,tip);
}
if(Objects.nonNull(settlementWay) && !Objects.equals(invoiceType,item.getSettlementWay())){
if(Objects.nonNull(settlementWay) && !Objects.equals(settlementWay,item.getSettlementWay())){
log.warn("货主结算单号:{} 在本批次中不属于同一结算方式",item.getSettlementNo());
throw new ServiceSystemException(PerformanceResultEnum.DATA_REPEAT,tip);
}
......@@ -543,15 +546,31 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
//合并数据
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{
String settlementNo = settlementMqHandlerService.settlementNoGenerate();
merge = item;
merge.setId(null);
merge.setSettlementNo(settlementNo);
merge.setSettlementSubNo(merge.getSettlementNo());
merge.setSettlementSubNo(null);
merge.setMergedBy(loginUserInfo.getUserName());
merge.setMergeTime(LocalDateTime.now());
merge.setMergeSettlementFlag(SettlementOwnerEnum.MergeSettlementFlag.MERGE.getCode());
}
}
return settlementNos;
//更新结算单
settlementOwnerDao.updateSettlementMerge(settlementNo,settlementNos,loginUserInfo.getUserName(),now);
//插入合并单
settlementOwnerDao.saveEntity(merge);
//更新货主运单计费明细
settlementOwnerDetailDao.updateSettlementMerge(settlementNo,settlementNos);
}
}
package com.clx.performance.sqlProvider.settle;
/**
* @ClassName SettlementOwnerSqlProvider
* @Description
* @Author kavin
* @Date 2023/12/19 10:34
* @Version 1.0
*/
public class SettlementOwnerSqlProvider {
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论