提交 06e45b30 authored 作者: 刘海泉's avatar 刘海泉

Merge remote-tracking branch 'origin/v30.2_break_contract_20241021' into dev_jdk17

package com.clx.performance.dao;
import com.clx.performance.mapper.OrderChildExceptionReportOperationLogMapper;
import com.clx.performance.model.OrderChildExceptionReportOperationLog;
import com.msl.common.dao.BaseDao;
/**
* @Author: aiqinguo
* @Description: 运单日志
* @Date: 2023/09/18 11:34:50
* @Version: 1.0
*/
public interface OrderChildExceptionReportOperationLogDao extends BaseDao<OrderChildExceptionReportOperationLogMapper, OrderChildExceptionReportOperationLog, Integer> {
}
package com.clx.performance.dao.impl;
import com.clx.performance.dao.OrderChildExceptionReportOperationLogDao;
import com.clx.performance.mapper.OrderChildExceptionReportOperationLogMapper;
import com.clx.performance.model.OrderChildExceptionReportOperationLog;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
/**
* @Author: aiqinguo
* @Description: 运单图片
* @Date: 2023/09/18 11:34:50
* @Version: 1.0
*/
@Repository
public class OrderChildExceptionReportOperationLogDaoImpl extends BaseDaoImpl<OrderChildExceptionReportOperationLogMapper, OrderChildExceptionReportOperationLog, Integer> implements OrderChildExceptionReportOperationLogDao {
}
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.OrderChildExceptionReportOperationLog;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author: aiqinguo
* @Description: 运单日志
* @Date: 2023/09/18 11:34:50
* @Version: 1.0
*/
@Mapper
public interface OrderChildExceptionReportOperationLogMapper extends BaseMapper<OrderChildExceptionReportOperationLog> {
}
\ No newline at end of file
......@@ -72,6 +72,15 @@ public class OrderChildExceptionReport implements HasKey<Integer> {
@Schema(description="异常原因描述")
private String reason;
@TableField("picture_url")
@Schema(description="图片")
private String pictureUrl;
@TableField("video_url")
@Schema(description="视频")
private String videoUrl;
@TableField("deal_user_code")
@Schema(description="处理人用户编码")
private Long dealUserCode;
......@@ -92,6 +101,10 @@ public class OrderChildExceptionReport implements HasKey<Integer> {
@Schema(description="是否转司机违约 1:是")
private Integer transferDriverBreakContract;
@TableField("break_contract_reason")
@Schema(description="违约原因")
private String breakContractReason;
@TableField("create_time")
@Schema(description="创建时间")
private LocalDateTime createTime;
......
......@@ -47,6 +47,16 @@ public class OrderChildExceptionReportDealLog implements HasKey<Integer> {
@Schema(description="视频")
private String videoUrl;
@TableField("create_by")
@Schema(description="申诉人编码")
private Long createBy; //操作人编号
@TableField("create_name")
@Schema(description="申诉人")
private String createName; //操作人名称
@TableField("create_time")
@Schema(description="创建时间")
private LocalDateTime createTime;
......
package com.clx.performance.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class OrderChildExceptionReportOperationLog implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String reportNo; //异常上报编号
private Integer type; //操作事项编码
private String result; //处理结果
private Long createBy; //操作人编号
private String createName; //操作人名称
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.model.breakcontract;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
......@@ -8,9 +10,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
/**
......@@ -28,7 +29,7 @@ public class BreakContractDriverRecord implements HasKey<Integer> {
private Integer id;
@TableField("trigger_type")
@Schema(description="触发类型:1系统触发 2手动触发")
@Schema(description="触发类型:1系统触发 2手动触发 3.异常上报")
private Integer triggerType;
@TableField("break_contract_party_type")
......@@ -79,6 +80,33 @@ public class BreakContractDriverRecord implements HasKey<Integer> {
@Schema(description="结算单编号")
private String settlementNo;
@TableField("exception_report_no")
@Schema(description="异常上报单号")
private String exceptionReportNo;
@TableField("exception_category")
@Schema(description="异常类别")
private String exceptionCategory;
@TableField("exception_type")
@Schema(description="异常类型")
private String exceptionType;
@TableField("picture_url")
@Schema(description="图片")
private String pictureUrl;
@TableField("video_url")
@Schema(description="视频")
private String videoUrl;
@TableField("remark")
@Schema(description="备注")
private String remark;
......
......@@ -23,6 +23,8 @@ public interface BreakContractDriverRecordService {
IPage<DriverBreakContractDriverRecordVO> driverPageRecord(DriverPageBreakContractDriverRecordParam param);
String breakNoGenerate();
void saveDriverRecordOfOrderChildCancel(OrderChild orderChild, Long createBy, String createName);
void saveDriverRecordOfArriveSendAddressTimeout(OrderChild orderChild, Long createBy, String createName);
......
......@@ -11,23 +11,30 @@ import com.clx.open.sdk.enums.ExceptionReportEnum;
import com.clx.open.sdk.request.action.*;
import com.clx.performance.config.ThirdAppConfig;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderChildExceptionReportDao;
import com.clx.performance.dao.OrderChildExceptionReportDealLogDao;
import com.clx.performance.enums.CarrierExceptionReportEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.SyncPlatformEnum;
import com.clx.performance.dao.OrderChildExceptionReportOperationLogDao;
import com.clx.performance.dao.breakcontract.BreakContractDriverRecordDao;
import com.clx.performance.enums.*;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildExceptionReport;
import com.clx.performance.model.OrderChildExceptionReportDealLog;
import com.clx.performance.model.OrderChildExceptionReportOperationLog;
import com.clx.performance.model.breakcontract.BreakContractDriverRecord;
import com.clx.performance.param.pc.DealExceptionReportParam;
import com.clx.performance.param.pc.PageExceptionReportParam;
import com.clx.performance.param.pc.TransferDriverBreakContractParam;
import com.clx.performance.service.OrderChildExceptionReportService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.struct.OrderChildExceptionReportOperationLogStruct;
import com.clx.performance.struct.OrderChildExceptionReportStruct;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.excel.ExcelData;
import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.OrderChildExceptionReportOperationLogVO;
import com.clx.performance.vo.pc.OrderChildExceptionReportVO;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
......@@ -64,10 +71,17 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
private final OrderChildExceptionReportDealLogDao orderChildExceptionReportDealLogDao;
private final RedisTemplate<String,Integer> redisTemplate;
private final ThirdAppConfig thirdAppConfig;
private final OrderChildExceptionReportOperationLogDao orderChildExceptionReportOperationLogDao;
private final BreakContractDriverRecordService breakContractDriverRecordService;
private final OrderChildDao orderChildDao;
private final BreakContractDriverRecordDao breakContractDriverRecordDao;
private final OrderChildExceptionReportOperationLogStruct orderChildExceptionReportOperationLogStruct;
@Override
public Result<String> smbSyncExceptionReportInfo(SmbSyncExceptionReportInfoAction action) {
OrderChildExceptionReport report = orderChildExceptionReportStruct.convertInfoSmbAction(action);
report.setPictureUrl(JSON.toJSONString(action.getPictureUrl()));
report.setVideoUrl(JSON.toJSONString(action.getVideoUrl()));
report.setExceptionCategory(action.getOneLevelName());
report.setExceptionType(action.getTwoLevelName() + action.getThreeLevelName());
return Result.ok(saveExceptionReportInfo(report, SyncPlatformEnum.Source.TRADE_PLATFORM.getCode()));
......@@ -89,6 +103,8 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
@Override
public Result<String> mslSyncExceptionReportInfo(MslSyncExceptionReportInfoAction action) {
OrderChildExceptionReport report = orderChildExceptionReportStruct.convertInfoMslAction(action);
report.setPictureUrl(JSON.toJSONString(action.getPictureUrl()));
report.setVideoUrl(JSON.toJSONString(action.getVideoUrl()));
return Result.ok(saveExceptionReportInfo(report, SyncPlatformEnum.Source.NEW_OWNER_CLIENT.getCode()));
}
......@@ -107,10 +123,12 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
public void updateExceptionReportResult(Integer source,String thirdReportNo,Integer breakContractParty){
OrderChildExceptionReport report = orderChildExceptionReportDao.findByThirdReportNoAndSource(source,thirdReportNo);
if(Objects.isNull(report)){
log.warn("通过第三方上报编号:{} 未找到对应数据",thirdReportNo);
throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND);
}
Integer oldStatus = report.getStatus();
if(Objects.equals(report.getStatus(), CarrierExceptionReportEnum.Status.PROCESSED.getCode())
|| Objects.equals(report.getStatus(), CarrierExceptionReportEnum.Status.WITHDRAWN.getCode())){
throw new ServiceSystemException(ResultEnum.PARAM_ERROR,"异常数据已被处理或撤回");
......@@ -120,6 +138,17 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
report.setStatus(CarrierExceptionReportEnum.Status.PROCESSED.getCode());
report.setDealResult(breakContractParty);
orderChildExceptionReportDao.updateEntityByKey(report);
if(Objects.equals(oldStatus,CarrierExceptionReportEnum.Status.APPEAL_IN_PROGRESS.getCode())){
saveOperationLog(report.getReportNo(),CarrierExceptionLogEnum.Type.APPEAL_DEAL,
ExceptionReportEnum.DealResult.getNameByCode(breakContractParty),null,SyncPlatformEnum.Source.getNameByCode(source));
}else{
saveOperationLog(report.getReportNo(),CarrierExceptionLogEnum.Type.TIMEOUT,
ExceptionReportEnum.DealResult.getNameByCode(breakContractParty),null,SyncPlatformEnum.Source.getNameByCode(source));
}
}
public void withdrawExceptionReport(Integer source,String thirdReportNo){
......@@ -144,6 +173,7 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
report.setSource(source);
report.setStatus(CarrierExceptionReportEnum.Status.WAIT_DEAL.getCode());
orderChildExceptionReportDao.saveEntity(report);
saveOperationLog(report.getReportNo(),CarrierExceptionLogEnum.Type.CREATE,null,null,SyncPlatformEnum.Source.getNameByCode(source));
return report.getReportNo();
}
......@@ -197,6 +227,7 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
if(Objects.equals(param.getDealWay(),ExceptionReportEnum.DealWay.APPEAL.getCode()) && StringUtils.isBlank(param.getAppealReason())){
throw new ServiceSystemException(ResultEnum.PARAM_ERROR,"申诉原因不能为空");
}
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
if(Objects.equals(param.getDealWay(),ExceptionReportEnum.DealWay.APPEAL.getCode())){
report.setStatus(CarrierExceptionReportEnum.Status.APPEAL_IN_PROGRESS.getCode());
......@@ -208,7 +239,6 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
dealLog.setVideoUrl(JSON.toJSONString(param.getVideoUrl()));
}else{
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
report.setStatus(CarrierExceptionReportEnum.Status.PROCESSED.getCode());
report.setDealTime(LocalDateTime.now());
report.setDealResult(ExceptionReportEnum.DealResult.CARRIER_BREAK_CONTRACT.getCode());
......@@ -247,12 +277,15 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
log.info("结束通知:{} 上报异常处理,请求参数:{}",SyncPlatformEnum.Source.NEW_OWNER_CLIENT.getName(),result);
}
CarrierExceptionLogEnum.Type type = CarrierExceptionLogEnum.Type.AGREE;
String result = ExceptionReportEnum.DealResult.CARRIER_BREAK_CONTRACT.getName();
orderChildExceptionReportDao.updateEntityByKey(report);
if(Objects.nonNull(dealLog)){
orderChildExceptionReportDealLogDao.saveEntity(dealLog);
type = CarrierExceptionLogEnum.Type.APPEAL;
result = null;
}
saveOperationLog(report.getReportNo(),type,result,loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
@Override
......@@ -301,7 +334,7 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
rowData.add(new ExcelData(vo.getTruckNoOrMobile(),"-"));
rowData.add(new ExcelData(vo.getChildNo(),"-"));
rowData.add(new ExcelData(vo.getStatusMsg(),"-"));
rowData.add(new ExcelData(vo.getDeductionAmount(),"-"));
rowData.add(new ExcelData(Objects.nonNull(vo.getDeductionAmount())?vo.getDeductionAmount().movePointLeft(2):null,"-"));
rowData.add(new ExcelData(vo.getReportTime(),"-"));
rowData.add(new ExcelData(vo.getCreateTime(),"-"));
rowData.add(new ExcelData(vo.getDealUser(),"-"));
......@@ -321,14 +354,20 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
OrderChildExceptionReport report = orderChildExceptionReportDao.getEntityByKey(id).orElseThrow(
ResultEnum.DATA_NOT_FIND);
OrderChildExceptionReportVO vo = orderChildExceptionReportStruct.convert(report);
vo.setVideoUrlList(JSON.parseArray(report.getVideoUrl(),String.class));
vo.setPictureUrlList(JSON.parseArray(report.getPictureUrl(),String.class));
Optional<OrderChildExceptionReportDealLog> limitOneByField = orderChildExceptionReportDealLogDao.getLimitOneByField(
OrderChildExceptionReportDealLog::getReportNo, report.getReportNo());
if(limitOneByField.isPresent()) {
OrderChildExceptionReportDealLog dealLog = limitOneByField.get();
vo.setVideoUrlList(JSON.parseArray(dealLog.getVideoUrl(),String.class));
vo.setPictureUrlList(JSON.parseArray(dealLog.getPictureUrl(),String.class));
vo.setAppealPictureUrlList(JSON.parseArray(dealLog.getVideoUrl(),String.class));
vo.setAppealVideoUrlList(JSON.parseArray(dealLog.getPictureUrl(),String.class));
}
List<OrderChildExceptionReportOperationLog> list = orderChildExceptionReportOperationLogDao.listByField(
OrderChildExceptionReportOperationLog::getReportNo, report.getReportNo());
List<OrderChildExceptionReportOperationLogVO> logs = orderChildExceptionReportOperationLogStruct.convertList(list);
vo.setOperationLogs(logs);
return vo;
}
......@@ -341,11 +380,53 @@ public class OrderChildExceptionReportServiceImpl implements OrderChildExceptio
&& Objects.equals(report.getDealResult(),ExceptionReportEnum.DealResult.CARRIER_BREAK_CONTRACT.getCode())){
throw new ServiceSystemException(ResultEnum.DATA_ERROR);
}
//创建司机违约记录
saveDriverBreakContractRecord(report);
//@TODO 创建司机违约记录
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
report.setTransferDriverBreakContract(1);
report.setBreakContractReason(param.getReason());
orderChildExceptionReportDao.updateEntityByKey(report);
saveOperationLog(report.getReportNo(),CarrierExceptionLogEnum.Type.TRANSFER_DRIVER_BREAK_CONTRACT,null,loginUserInfo.getUserNo(),
loginUserInfo.getUserName());
}
public void saveOperationLog(String reportNo, CarrierExceptionLogEnum.Type type,String result,Long createBy,String createName){
OrderChildExceptionReportOperationLog operationLog = new OrderChildExceptionReportOperationLog();
operationLog.setReportNo(reportNo);
operationLog.setType(type.getCode());
operationLog.setResult(result);
operationLog.setCreateBy(createBy);
operationLog.setCreateName(createName);
orderChildExceptionReportOperationLogDao.saveEntity(operationLog);
}
public void saveDriverBreakContractRecord(OrderChildExceptionReport report){
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
LocalDateTime time = LocalDateTime.now();
String breakNo = breakContractDriverRecordService.breakNoGenerate();
OrderChild orderChild = orderChildDao.getByChildNo(report.getChildNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
BreakContractDriverRecord record = new BreakContractDriverRecord();
record.setBreakNo(breakNo);
record.setTriggerType(BreakContractRecordEnum.TriggerType.EXCEPTION_REPORT.getCode());
record.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.DRIVER.getCode());
record.setChildNo(orderChild.getChildNo());
record.setTruckNo(orderChild.getTruckNo());
record.setTruckOwnName(orderChild.getTruckOwnName());
record.setTruckOwnUserNo(orderChild.getTruckOwnUserNo());
record.setDriverUserNo(orderChild.getDriverUserNo());
record.setDriverName(orderChild.getDriverName());
record.setFigure(report.getDeductionAmount());
record.setExceptionCategory(record.getExceptionCategory());
record.setExceptionType(record.getExceptionType());
record.setExceptionReportNo(report.getReportNo());
record.setPictureUrl(record.getPictureUrl());
record.setVideoUrl(record.getVideoUrl());
record.setRemark(report.getBreakContractReason());
record.setCreateBy(userNo);
record.setCreateName(loginUserInfo.getUserName());
record.setCreateTime(time);
breakContractDriverRecordDao.saveEntity(record);
}
}
......@@ -128,7 +128,8 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
}
private String breakNoGenerate() {
@Override
public String breakNoGenerate() {
return "WYD"+uniqueOrderNumService.getUniqueOrderNum(
LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), LocalDateTimeUtils.DATE_DAY));
}
......
package com.clx.performance.struct;
import com.clx.performance.model.OrderChildExceptionReportOperationLog;
import com.clx.performance.vo.pc.OrderChildExceptionReportOperationLogVO;
import java.util.List;
public interface OrderChildExceptionReportOperationLogStruct {
List<OrderChildExceptionReportOperationLogVO> convertList(List<OrderChildExceptionReportOperationLog> list);
}
......@@ -14,6 +14,7 @@ public enum BreakContractRecordEnum {
public enum TriggerType {
SYSTEM(1, "系统触发"),
MANUAL(2, "手动触发"),
EXCEPTION_REPORT(3, "异常上报"),
;
private final Integer code;
......
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum CarrierExceptionLogEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
CREATE(1, "创建违约单"),
TIMEOUT(2, "超时货主处理"),
APPEAL(3, "申诉"),
APPEAL_DEAL(4, "申诉处理"),
AGREE(5, "同意扣罚"),
TRANSFER_DRIVER_BREAK_CONTRACT(6, "转司机违约"),
;
private final Integer code;
private final String name;
public static Optional<Type> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(Integer code) {
if (code == null) {return null;}
return getByCode(code).map(Type::getName).orElse(null);
}
}
}
package com.clx.performance.vo.pc;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class OrderChildExceptionReportOperationLogVO {
@Schema(description = "id")
private Integer id; //id
@Schema(description = "异常上报编号")
private String reportNo; //运单编号
@Schema(description = "操作事项编码")
private Integer type; //操作事项编码
@Schema(description = "处理结果")
private String result; //处理结果
@Schema(description = "操作人名称")
private String createName; //操作人名称
@Schema(description = "创建时间")
private String createTime; //创建时间
}
\ No newline at end of file
......@@ -127,14 +127,41 @@ public class OrderChildExceptionReportVO {
private String createTime;
@Schema(description="图片")
@Schema(description="异常记录图片")
private List<String> pictureUrlList;
@Schema(description="视频")
@Schema(description="异常记录视频")
private List<String> videoUrlList;
@Schema(description="申诉时间")
private String appealTime;
@Schema(description="申诉人")
private String createName;
@Schema(description="申诉原因")
private String appealReason;
@Schema(description="申诉图片")
private List<String> appealPictureUrlList;
@Schema(description="申诉视频")
private List<String> appealVideoUrlList;
@Schema(description="操作日志列表")
private List<OrderChildExceptionReportOperationLogVO> operationLogs;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论