提交 6e7a1257 authored 作者: liruixin's avatar liruixin

Merge branch 'v6.4_transportation_20231110' into test

......@@ -47,5 +47,25 @@ public enum BreakContractOwnerRecordEnum {
}
}
@Getter
@AllArgsConstructor
public enum ConfirmStatus {
CONFIRMING(0, "确认中"),
CONFIRMED(1, "已确认"),
REJECT(2, "已驳回"),
;
private final Integer code;
private final String msg;
public static Optional<ConfirmStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(ConfirmStatus::getMsg).orElse(null);
}
}
}
......@@ -83,6 +83,8 @@ public enum PerformanceResultEnum implements ResultEnum {
SETTLEMENT_ORDER_STATUS_CHANGED(1401, "结算单状态已变更,请重新刷新页面"),
SETTLEMENT_NO_FOUND(1401, "结算单不存在"),
MONEY_NO_SAME(1501, "货主提现金额和平台支付金额不一致"),
REJECT_REASON_NULL(1611, "驳回原因不能为空"),
REJECT_REASON_TOO_LARGE(1612, "驳回原因过长"),
ORDER_GOODS_WEIGHT_NOT_HAVE(1601, "货单可拉运吨数不足"),
ORDER_GOODS_STATUS_NOT_GET(1602, "当前货单已关闭不可继续提取"),
......
......@@ -6,6 +6,7 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
......@@ -19,7 +20,7 @@ public class CarrierUploadInvoiceImgParam {
@ApiModelProperty(value = "id", example = "100")
private Integer id;
@NotNull(message = "结算凭证不能为空")
@NotBlank(message = "结算凭证不能为空")
@Size(max=255,message = "结算凭证最多输入255个字符")
@ApiModelProperty(value="结算凭证",example = "/123.img")
private String invoiceImg;
......
package com.clx.performance.param.pc.owner;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
/**
* @Author liruixin
* @create 2023-09-19 13:33
*/
@Getter
@Setter
@NoArgsConstructor
@ToString
public class OwnerConfirmBreakContractSettlementParam {
@NotNull(message = "id不能为空")
@ApiModelProperty(value="列表id",example = "10")
private Integer id;
@NotNull(message = "状态不能为空")
@ApiModelProperty(value="确认状态:0-确认中;1-已经确认;2-已驳回",example = "1")
private Integer confirmStatus;
@ApiModelProperty(value="驳回原因",example = "驳回原因")
private String rejectReason;
}
......@@ -45,4 +45,10 @@ public class BreakContractOwnerRecordVO {
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("确认状态:0-确认中;1-已经确认;2-已驳回")
private Integer confirmStatus;
@ApiModelProperty("驳回原因")
private String rejectReason;
}
......@@ -42,6 +42,15 @@ public class PageOwnerBreakContractOwnerRecordVO {
@ApiModelProperty("缴费状态:0未缴费;1已缴费 /赔付状态:0未赔付;1已赔付")
private Integer payStatus;
@ApiModelProperty("确认状态:0-确认中;1-已经确认;2-已驳回")
private String confirmStatusMsg;
@ApiModelProperty("确认状态:0-确认中;1-已经确认;2-已驳回")
private Integer confirmStatus;
@ApiModelProperty("驳回原因")
private String rejectReason;
@ApiModelProperty("备注")
private String remark;
......
package com.clx.performance.controller.pc.breakcontract.owner;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.BreakContractOwnerRecordEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.owner.OwnerConfirmBreakContractSettlementParam;
import com.clx.performance.service.breakcontract.BreakContractOwnerRecordService;
import com.clx.performance.vo.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
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 java.util.Objects;
@Slf4j
@RestController
......@@ -37,4 +44,21 @@ public class OwnerBreakContractOwnerRecordController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "更新确认状态",notes = "<br>By:李瑞新")
@PostMapping("/updateConfirmStatus")
public Result updateConfirmStatus(@RequestBody @Validated OwnerConfirmBreakContractSettlementParam param) {
if(Objects.equals(param.getConfirmStatus(), BreakContractOwnerRecordEnum.ConfirmStatus.REJECT.getCode())){
if(StringUtils.isBlank(param.getRejectReason())){
throw new ServiceSystemException(PerformanceResultEnum.REJECT_REASON_NULL);
}
if(param.getRejectReason().length() >100){
throw new ServiceSystemException(PerformanceResultEnum.REJECT_REASON_TOO_LARGE);
}
}
breakContractOwnerRecordService.updateConfirmStatus(param);
return Result.ok();
}
}
......@@ -9,6 +9,9 @@ import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOw
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRecordVO;
import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author liruixin
* Date 2023-10-24
......@@ -22,4 +25,8 @@ public interface BreakContractOwnerRecordDao extends BaseDao<BreakContractOwnerR
boolean uploadPayTime(BreakContractOwnerRecord breakContractOwnerRecord);
boolean updateConfirmStatus(BreakContractOwnerRecord breakContractOwnerRecord);
List<BreakContractOwnerRecord> ownerNoConfirmTwoDaysList(LocalDateTime now);
}
......@@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.breakcontract.BreakContractOwnerRecordDao;
import com.clx.performance.enums.BreakContractOwnerRecordEnum;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.mapper.breakcontract.BreakContractOwnerRecordMapper;
import com.clx.performance.model.breakcontract.BreakContractOwnerRecord;
import com.clx.performance.model.breakcontract.BreakContractOwnerRule;
import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordParam;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRecordVO;
......@@ -15,6 +17,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;
/**
......@@ -57,4 +61,21 @@ public class BreakContractOwnerRecordDaoImpl extends BaseDaoImpl<BreakContractOw
.set(BreakContractOwnerRecord::getPayTime, breakContractOwnerRecord.getPayTime())
);
}
@Override
public boolean updateConfirmStatus(BreakContractOwnerRecord breakContractOwnerRecord) {
return update(lUdWrapper()
.eq(BreakContractOwnerRecord::getId, breakContractOwnerRecord.getId())
.set(BreakContractOwnerRecord::getConfirmStatus, breakContractOwnerRecord.getConfirmStatus())
.set(BreakContractOwnerRecord::getRejectReason, breakContractOwnerRecord.getRejectReason())
);
}
@Override
public List<BreakContractOwnerRecord> ownerNoConfirmTwoDaysList(LocalDateTime now) {
return list(lQrWrapper()
.eq(BreakContractOwnerRecord::getConfirmStatus, BreakContractOwnerRecordEnum.ConfirmStatus.CONFIRMING.getCode())
.le(BreakContractOwnerRecord::getCreateTime,now.minusDays(2))
);
}
}
package com.clx.performance.job;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.clx.performance.dao.breakcontract.BreakContractOwnerRecordDao;
import com.clx.performance.enums.BreakContractOwnerRecordEnum;
import com.clx.performance.model.breakcontract.BreakContractOwnerRecord;
import com.clx.performance.service.breakcontract.BreakContractOwnerRecordService;
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 OwnerBreakContractSettlementJob {
@Autowired
private BreakContractOwnerRecordService breakContractOwnerRecordService;
@Autowired
private BreakContractOwnerRecordDao breakContractOwnerRecordDao;
/**
* 如果货主2天都未确认,系统自动确认
*/
@XxlJob("autoConfirmOwnerBreakSettle")
public void autoConfirmOwnerBreakSettle() {
try {
List<BreakContractOwnerRecord> ownerRecords = breakContractOwnerRecordDao.ownerNoConfirmTwoDaysList(LocalDateTime.now());
if(CollectionUtils.isNotEmpty(ownerRecords)){
for(BreakContractOwnerRecord record :ownerRecords){
breakContractOwnerRecordService.generateBreakContractSettlement(record.getId());
record.setConfirmStatus(BreakContractOwnerRecordEnum.ConfirmStatus.CONFIRMED.getCode());
breakContractOwnerRecordDao.updateConfirmStatus(record);
}
}
} catch (Exception e) {
log.warn("违约结算单系统自动确认,异常原因:{}",e);
}
}
}
......@@ -59,6 +59,14 @@ public class BreakContractOwnerRecord implements HasKey<Integer> {
@ApiModelProperty("结算单编号")
private String settlementNo;
@TableField("confirm_status")
@ApiModelProperty("确认状态:0-确认中;1-已经确认;2-已驳回")
private Integer confirmStatus;
@TableField("reject_reason")
@ApiModelProperty("驳回原因")
private String rejectReason;
@TableField("pay_status")
@ApiModelProperty("缴费状态:0未缴费;1已缴费")
private Integer payStatus;
......
package com.clx.performance.service.breakcontract;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.model.breakcontract.BreakContractOwnerRecord;
import com.clx.performance.param.pc.breakcontract.carrier.BreakContractOwnerRecordAddParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.owner.OwnerConfirmBreakContractSettlementParam;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRecordVO;
import com.clx.performance.vo.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordVO;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author liruixin
* Date 2023-10-24
......@@ -21,5 +26,9 @@ public interface BreakContractOwnerRecordService {
void autoSaveRecord(BreakContractOwnerRecordAddParam param);
void updateConfirmStatus(OwnerConfirmBreakContractSettlementParam param);
void generateBreakContractSettlement(Integer breakContractId);
}
......@@ -16,6 +16,7 @@ import com.clx.performance.model.breakcontract.BreakContractSettlementOwnerDetai
import com.clx.performance.param.pc.breakcontract.carrier.BreakContractOwnerRecordAddParam;
import com.clx.performance.param.pc.breakcontract.carrier.PageBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordParam;
import com.clx.performance.param.pc.owner.OwnerConfirmBreakContractSettlementParam;
import com.clx.performance.service.breakcontract.BreakContractOwnerRecordService;
import com.clx.performance.service.breakcontract.BreakContractSettlementLogService;
import com.clx.performance.service.impl.UniqueOrderNumService;
......@@ -25,6 +26,7 @@ import com.clx.performance.struct.breakcontract.BreakContractSettlementOwnerStru
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRecordVO;
import com.clx.performance.vo.pc.breakcontract.owner.PageOwnerBreakContractOwnerRecordVO;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.LocalDateTimeUtils;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
......@@ -99,27 +101,22 @@ public class BreakContractOwnerRecordServiceImpl implements BreakContractOwnerR
record.setCreateBy(userNo);
record.setCreateName(loginUserInfo.getUserName());
//货主违约计费明细
BreakContractSettlementOwnerDetail breakOwnerDetail = breakContractSettlementOwnerDetailStruct.convert(record);
if(Objects.equals(param.getBreakContractPartyType(), BreakContractRecordEnum.BreakContractPartyType.PLATFORM.getCode())){
record.setConfirmStatus(BreakContractOwnerRecordEnum.ConfirmStatus.CONFIRMED.getCode());
}else{
record.setConfirmStatus(BreakContractOwnerRecordEnum.ConfirmStatus.CONFIRMING.getCode());
}
String settlementNo = "WYJSD"+childNoGenerate();
breakOwnerDetail.setSettlementNo(settlementNo);
//货主违约结算单
BreakContractSettlementOwner breakOwner = breakContractSettlementOwnerStruct.convert(breakOwnerDetail);
breakOwner.setStatus(BreakContractSettlementOwnerEnum.Status.TO_BE_ACCOUNT.getCode());
record.setSettlementNo(settlementNo);
//保存违约记录
breakContractOwnerRecordDao.saveEntity(record);
//保存违约计费
breakContractSettlementOwnerDao.saveEntity(breakOwner);
//保存违约结算单
breakContractSettlementOwnerDetailDao.saveEntity(breakOwnerDetail);
//保存结算单日志----创建结算单
breakContractSettlementLogService.saveBreakSettlementLog(settlementNo,
BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getCode(),BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),userNo,loginUserInfo.getUserName());
//生成违约结算单
if(Objects.equals(param.getBreakContractPartyType(), BreakContractRecordEnum.BreakContractPartyType.PLATFORM.getCode())){
generateBreakContractSettlement(record.getId());
}
}
@Override
......@@ -169,26 +166,62 @@ public class BreakContractOwnerRecordServiceImpl implements BreakContractOwnerR
record.setCreateBy(0L);
record.setCreateName("系统");
record.setConfirmStatus(BreakContractOwnerRecordEnum.ConfirmStatus.CONFIRMING.getCode());
String settlementNo = "WYJSD"+childNoGenerate();
record.setSettlementNo(settlementNo);
//保存违约记录
breakContractOwnerRecordDao.saveEntity(record);
}
@Override
public void updateConfirmStatus(OwnerConfirmBreakContractSettlementParam param) {
if(!Objects.equals(param.getConfirmStatus(),BreakContractOwnerRecordEnum.ConfirmStatus.CONFIRMING.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.STATUS_CHANGED);
}
//驳回或者确认
BreakContractOwnerRecord ownerRecord = new BreakContractOwnerRecord();
ownerRecord.setId(param.getId());
ownerRecord.setConfirmStatus(param.getConfirmStatus());
ownerRecord.setRejectReason(param.getRejectReason());
breakContractOwnerRecordDao.updateConfirmStatus(ownerRecord);
//货主同意生成违约结算单
if(Objects.equals(param.getConfirmStatus(),BreakContractOwnerRecordEnum.ConfirmStatus.CONFIRMED.getCode())){
generateBreakContractSettlement(param.getId());
}
}
/**
* 生成违约结算单
* @param breakContractId
*/
@Override
public void generateBreakContractSettlement(Integer breakContractId){
//违约记录查询
BreakContractOwnerRecord record = breakContractOwnerRecordDao.getEntityByKey(breakContractId).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//货主违约计费明细
BreakContractSettlementOwnerDetail breakOwnerDetail = breakContractSettlementOwnerDetailStruct.convert(record);
String settlementNo = "WYJSD"+childNoGenerate();
breakOwnerDetail.setSettlementNo(settlementNo);
//货主违约结算单
BreakContractSettlementOwner breakOwner = breakContractSettlementOwnerStruct.convert(breakOwnerDetail);
breakOwner.setStatus(BreakContractSettlementOwnerEnum.Status.TO_BE_ACCOUNT.getCode());
record.setSettlementNo(settlementNo);
//保存违约记录
breakContractOwnerRecordDao.saveEntity(record);
//保存违约计费
breakContractSettlementOwnerDao.saveEntity(breakOwner);
//保存违约结算单
breakContractSettlementOwnerDetailDao.saveEntity(breakOwnerDetail);
//保存结算单日志----创建结算单
breakContractSettlementLogService.saveBreakSettlementLog(settlementNo,
breakContractSettlementLogService.saveBreakSettlementLog(record.getSettlementNo(),
BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getCode(),BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),record.getCreateBy(),record.getCreateName());
OrderChildLogEnum.CreateType.OWNER.getCode(),record.getCreateBy(),record.getCreateName());
}
}
......@@ -17,7 +17,7 @@ public class BreakContractOwnerRecordSqlProvider {
SELECT(" id, trigger_type, break_contract_party_type, break_no, " +
" order_no, owner_user_no, owner_name, figure, " +
" settlement_no, " +
" remark, " +
" remark,confirm_status,reject_reason " +
" create_by, create_name, " +
" date_format(create_time, '%Y-%m-%d %H:%i:%s') as createTime, " +
" date_format(modified_time, '%Y-%m-%d %H:%i:%s') as modifiedTime "
......
......@@ -19,6 +19,7 @@ public interface BreakContractOwnerRecordStruct {
@Named("toBaseVo")
@Mapping(target = "payStatusMsg", expression = "java(BreakContractOwnerRecordEnum.PayStatus.getMsgByCode(detail.getPayStatus()))")
@Mapping(target = "compensationStatusMsg", expression = "java(BreakContractOwnerRecordEnum.CompensationStatusStatus.getMsgByCode(detail.getPayStatus()))")
@Mapping(target = "confirmStatusMsg", expression = "java(BreakContractOwnerRecordEnum.ConfirmStatus.getMsgByCode(detail.getConfirmStatus()))")
PageOwnerBreakContractOwnerRecordVO convert(BreakContractOwnerRecord detail);
@IterableMapping(qualifiedByName = "toBaseVo")
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论