提交 79c2584c authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'v30.2_break_contract_20241021' into master_jdk17

# Conflicts: # clx-performance-web/src/main/java/com/clx/performance/config/RabbitBeanConfig.java # clx-performance-web/src/main/java/com/clx/performance/constant/RabbitKeyConstants.java
......@@ -357,6 +357,11 @@
<groupId>com.msl.message</groupId>
<artifactId>message-sdk</artifactId>
</dependency>
<dependency>
<groupId>com.msl</groupId>
<artifactId>tx-spring-boot-starter</artifactId>
</dependency>
</dependencies>
......
......@@ -405,6 +405,33 @@ public class RabbitBeanConfig {
.with(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_ROUTING_KEY);
}
/**
*发送短信通知
*/
@Bean
public Queue sendSmsNoticeQueue() {
return new Queue(RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE,
true, false, false);
}
/**
* 发送短信通知
**/
@Bean
public DirectExchange sendSmsNoticeExchange() {
return new DirectExchange(RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE_EXCHANGE);
}
/**
*发送短信通知
*/
@Bean
public Binding sendSmsNoticeBind() {
return BindingBuilder.bind(sendSmsNoticeQueue()).to(sendSmsNoticeExchange())
.with(RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE_ROUTING_KEY);
}
}
......@@ -200,4 +200,16 @@ public class RabbitKeyConstants {
//保存货单调价记录queue
public static final String NOTICE_SEND_SMS_QUEUE = "clx_performance.notice.send.sms.queue";
//保存货单调价记录exchange
public static final String NOTICE_SEND_SMS_QUEUE_EXCHANGE = "clx_performance.notice.send.sms.exchange";
//保存货单调价记录routing_key
public static final String NOTICE_SEND_SMS_QUEUE_ROUTING_KEY = "clx_performance.notice.send.sms.routing.key";
}
......@@ -57,4 +57,7 @@ public class RedisConstants {
*/
public static final String ORDER_LAST_TRUCK_CHILD = "clx-performance:order:last:truck:child:";
//异常上报编号
public static final String EXCEPTION_REPORT_CACHE_KEY = "clx-performance:exception:report:cache:key:";
}
......@@ -48,4 +48,19 @@ public class AppDriverBreakContractDriverRecordController {
return Result.ok(breakContractDriverRecordService.getBreakContractFigure(childNo));
}
@Operation(summary = "违约记录是否展示小红点 1:展示", description = "<br>By:刘海泉")
@GetMapping("/getShowBreakContractRed")
public Result<Integer> getShowBreakContractRed() {
return Result.ok(breakContractDriverRecordService.getShowBreakContractRed());
}
@Operation(summary = "违约记录标记已读", description = "<br>By:刘海泉")
@GetMapping("/updateBreakContractRead")
public Result<Integer> updateBreakContractRead() {
breakContractDriverRecordService.updateBreakContractRead();
return Result.ok();
}
}
package com.clx.performance.controller.feign;
import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.request.action.*;
import com.clx.open.sdk.request.dto.BatchOrderStatisticsDTO;
import com.clx.open.sdk.request.dto.BatchOrderStatisticsInfoDTO;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
......@@ -18,16 +17,16 @@ import com.clx.performance.vo.pc.PerformanceProgressVO;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRuleFileVO;
import com.msl.common.result.Result;
import com.msl.user.utils.TokenUtil;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.List;
......@@ -58,6 +57,8 @@ public class PerformanceSdkFeignController {
private final OrderService orderService;
private final OrderChildExceptionReportService orderChildExceptionReportService;
@Operation(summary = "货主端取消订单", description = "<br>By:胡宇帆")
@PostMapping("/ownCancelOrderPre")
......@@ -143,4 +144,53 @@ public class PerformanceSdkFeignController {
}
//数媒宝同步异常上报信息
@PostMapping("/smbSyncExceptionReportInfo")
Result<String> smbSyncExceptionReportInfo(@RequestBody @Validated SmbSyncExceptionReportInfoAction action){
log.info("数媒宝同步异常上报信息开始,请求参数:{}", JSON.toJSONString(action));
Result<String> result = orderChildExceptionReportService.smbSyncExceptionReportInfo(action);
log.info("数媒宝同步异常上报信息结束,响应结果:{}", result);
return result;
}
//数媒宝同步异常上报结果
@PostMapping("/smbSyncExceptionReportResult")
Result<Object> smbSyncExceptionReportResult(@RequestBody @Validated SmbSyncExceptionReportResultAction action){
log.info("数媒宝同步异常上报结果开始,请求参数:{}", JSON.toJSONString(action));
return orderChildExceptionReportService.smbSyncExceptionReportResult(action);
}
//数媒宝撤销异常上报
@PostMapping("/smbWithdrawExceptionReport")
Result<Object> smbWithdrawExceptionReport(@RequestBody @Validated SmbWithdrawExceptionReportAction action){
log.info("数媒宝撤销异常上报开始,请求参数:{}", JSON.toJSONString(action));
return orderChildExceptionReportService.smbWithdrawExceptionReport(action);
}
//马上来供应链同步异常上报信息
@PostMapping("/mslSyncExceptionReportInfo")
Result<String> mslSyncExceptionReportInfo(@RequestBody @Validated MslSyncExceptionReportInfoAction action){
log.info("马上来供应链同步异常上报信息开始,请求参数:{}", JSON.toJSONString(action));
Result<String> result = orderChildExceptionReportService.mslSyncExceptionReportInfo(action);
log.info("马上来供应链同步异常上报信息结束,响应结果:{}", result);
return result;
}
//马上来供应链同步异常上报结果
@PostMapping("/mslSyncExceptionReportResult")
Result<Object> mslSyncExceptionReportResult(@RequestBody @Validated MslSyncExceptionReportResultAction action){
log.info("马上来供应链同步异常上报结果开始,请求参数:{}", JSON.toJSONString(action));
return orderChildExceptionReportService.mslSyncExceptionReportResult(action);
}
//马上来供应链撤销异常上报
@PostMapping("/mslWithdrawExceptionReport")
Result<Object> mslWithdrawExceptionReport(@RequestBody @Validated MslWithdrawExceptionReportAction action){
log.info("马上来供应链撤销异常上报开始,请求参数:{}", JSON.toJSONString(action));
return orderChildExceptionReportService.mslWithdrawExceptionReport(action);
}
}
package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.vo.pc.OrderChildExceptionReportVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
@Slf4j
@RestController
@RequestMapping(value="/pc/carrier/exceptionReport")
@Validated
@Tag(name = "承运端-异常上报")
@AllArgsConstructor
public class OrderChildExceptionReportController {
private final OrderChildExceptionReportService orderChildExceptionReportService;
@Operation(summary = "异常上报处理", description = "<br>By:刘海泉")
@PostMapping(value = "updateDealExceptionReport")
public Result<Object> updateDealExceptionReport(@RequestBody @Validated DealExceptionReportParam param) {
orderChildExceptionReportService.updateDealExceptionReport(param);
return Result.ok();
}
@Operation(summary = "异常上报分页列表", description = "<br>By:刘海泉")
@PostMapping(value = "pageExceptionReport")
@UnitCovert(param = false)
public Result<PageData<OrderChildExceptionReportVO>> pageExceptionReport(@RequestBody @Validated PageExceptionReportParam param) {
Page<OrderChildExceptionReportVO> page = orderChildExceptionReportService.pageExceptionReport(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@Operation(summary = "导出异常上报分页列表", description = "<br>By:刘海泉")
@PostMapping(value = "exportExceptionReport")
public Result<Object> exportExceptionReport(@RequestBody @Validated PageExceptionReportParam param,
HttpServletResponse response) throws IOException {
SXSSFWorkbook workbook = orderChildExceptionReportService.exportExceptionReport(param);
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
workbook.write(response.getOutputStream());
return Result.ok();
}
@Operation(summary = "异常上报详情接口", description = "<br>By:刘海泉")
@GetMapping(value = "getExceptionReport")
@UnitCovert(param = false)
public Result<OrderChildExceptionReportVO> getExceptionReport(@RequestParam("id") @NotNull(message = "id不能为空") Integer id) {
return Result.ok(orderChildExceptionReportService.getExceptionReport(id));
}
@Operation(summary = "转司机违约", description = "<br>By:刘海泉")
@PostMapping(value = "transferDriverBreakContract")
public Result<Object> transferDriverBreakContract(@RequestBody @Validated TransferDriverBreakContractParam param) {
orderChildExceptionReportService.transferDriverBreakContract(param);
return Result.ok();
}
}
package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.PageExceptionReportParam;
import com.msl.common.dao.BaseDao;
import com.clx.performance.mapper.OrderChildExceptionReportMapper;
import com.clx.performance.model.OrderChildExceptionReport;
/**
* @author kavin
* Date 2024-10-22
* Time 10:38
*/
public interface OrderChildExceptionReportDao extends BaseDao<OrderChildExceptionReportMapper, OrderChildExceptionReport, Integer> {
OrderChildExceptionReport findByThirdReportNoAndSource(Integer source, String thirdReportNo);
IPage<OrderChildExceptionReport> pageExceptionReport(PageExceptionReportParam param);
}
package com.clx.performance.dao;
import com.msl.common.dao.BaseDao;
import com.clx.performance.mapper.OrderChildExceptionReportDealLogMapper;
import com.clx.performance.model.OrderChildExceptionReportDealLog;
/**
* @author kavin
* Date 2024-10-22
* Time 11:08
*/
public interface OrderChildExceptionReportDealLogDao extends BaseDao<OrderChildExceptionReportDealLogMapper, OrderChildExceptionReportDealLog, Integer> {
}
package com.clx.performance.dao;
import com.clx.performance.mapper.OrderChildExceptionReportOperationLogMapper;
import com.clx.performance.model.OrderChildExceptionReportOperationLog;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 运单日志
* @Date: 2023/09/18 11:34:50
* @Version: 1.0
*/
public interface OrderChildExceptionReportOperationLogDao extends BaseDao<OrderChildExceptionReportOperationLogMapper, OrderChildExceptionReportOperationLog, Integer> {
List<OrderChildExceptionReportOperationLog> getLogs(String reportNo);
}
......@@ -27,4 +27,7 @@ public interface BreakContractDriverRecordDao extends BaseDao<BreakContractDrive
IPage<BreakContractDriverRecordVO> pageByParam(PageBreakContractDriverRecordParam param);
IPage<DriverBreakContractDriverRecordVO> driverPageByParam(DriverPageBreakContractDriverRecordParam param);
Long getShowBreakContractRed(Long userNo);
void updateBreakContractRead(Long userNo);
}
package com.clx.performance.dao.impl;
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.param.pc.PageExceptionReportParam;
import com.msl.common.dao.impl.BaseDaoImpl;
import com.clx.performance.dao.OrderChildExceptionReportDao;
import com.clx.performance.mapper.OrderChildExceptionReportMapper;
import com.clx.performance.model.OrderChildExceptionReport;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.Objects;
/**
* @author kavin
* Date 2024-10-22
* Time 10:38
*/
@Repository
public class OrderChildExceptionReportDaoImpl extends BaseDaoImpl<OrderChildExceptionReportMapper, OrderChildExceptionReport, Integer> implements OrderChildExceptionReportDao {
@Override
public OrderChildExceptionReport findByThirdReportNoAndSource(Integer source, String thirdReportNo) {
LambdaQueryWrapper<OrderChildExceptionReport> query = new LambdaQueryWrapper<>();
query.eq(OrderChildExceptionReport :: getSource,source);
query.eq(OrderChildExceptionReport ::getThirdReportNo,thirdReportNo);
return baseMapper.selectOne(query);
}
@Override
public IPage<OrderChildExceptionReport> pageExceptionReport(PageExceptionReportParam param) {
LambdaQueryWrapper<OrderChildExceptionReport> query = new LambdaQueryWrapper<>();
query.eq(StringUtils.isNotBlank(param.getThirdReportNo()),OrderChildExceptionReport :: getThirdReportNo,param.getThirdReportNo());
query.eq(Objects.nonNull(param.getSource()),OrderChildExceptionReport ::getSource,param.getSource());
query.eq(Objects.nonNull(param.getStatus()),OrderChildExceptionReport ::getStatus,param.getStatus());
query.eq(StringUtils.isNotBlank(param.getChildNo()),OrderChildExceptionReport ::getChildNo,param.getChildNo());
query.eq(StringUtils.isNotBlank(param.getTruckNoOrMobile()),OrderChildExceptionReport ::getTruckNoOrMobile,param.getTruckNoOrMobile());
query.ge(StringUtils.isNotBlank(param.getBeginTime()),OrderChildExceptionReport ::getCreateTime,param.getBeginTime());
query.le(StringUtils.isNotBlank(param.getEndTime()),OrderChildExceptionReport ::getCreateTime,param.getEndTime());
query.orderByDesc(OrderChildExceptionReport :: getId);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
}
package com.clx.performance.dao.impl;
import com.msl.common.dao.impl.BaseDaoImpl;
import com.clx.performance.dao.OrderChildExceptionReportDealLogDao;
import com.clx.performance.mapper.OrderChildExceptionReportDealLogMapper;
import com.clx.performance.model.OrderChildExceptionReportDealLog;
import org.springframework.stereotype.Repository;
/**
* @author kavin
* Date 2024-10-22
* Time 11:08
*/
@Repository
public class OrderChildExceptionReportDealLogDaoImpl extends BaseDaoImpl<OrderChildExceptionReportDealLogMapper, OrderChildExceptionReportDealLog, Integer> implements OrderChildExceptionReportDealLogDao {
}
package com.clx.performance.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 运单图片
* @Date: 2023/09/18 11:34:50
* @Version: 1.0
*/
@Repository
public class OrderChildExceptionReportOperationLogDaoImpl extends BaseDaoImpl<OrderChildExceptionReportOperationLogMapper, OrderChildExceptionReportOperationLog, Integer> implements OrderChildExceptionReportOperationLogDao {
@Override
public List<OrderChildExceptionReportOperationLog> getLogs(String reportNo) {
LambdaQueryWrapper<OrderChildExceptionReportOperationLog> query = new LambdaQueryWrapper<>();
query.eq(OrderChildExceptionReportOperationLog::getReportNo,reportNo);
query.orderByDesc(OrderChildExceptionReportOperationLog :: getId);
return baseMapper.selectList(query);
}
}
package com.clx.performance.dao.impl.breakcontract;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.breakcontract.BreakContractDriverRecordDao;
import com.clx.performance.enums.BreakContractRecordEnum;
import com.clx.performance.mapper.breakcontract.BreakContractDriverRecordMapper;
import com.clx.performance.model.breakcontract.BreakContractDriverRecord;
import com.clx.performance.param.app.breakcontract.DriverPageBreakContractDriverRecordParam;
......@@ -57,4 +59,26 @@ public class BreakContractDriverRecordDaoImpl extends BaseDaoImpl<BreakContractD
return baseMapper.driverPageByParam(page,param);
}
@Override
public Long getShowBreakContractRed(Long userNo) {
LambdaQueryWrapper<BreakContractDriverRecord> query = new LambdaQueryWrapper<>();
query.and(i ->
i.eq(BreakContractDriverRecord:: getTruckOwnUserNo,userNo).or()
.eq(BreakContractDriverRecord :: getDriverUserNo,userNo)
);
query.eq(BreakContractDriverRecord :: getReadFlag, BreakContractRecordEnum.ReadFlag.NO.getCode());
return baseMapper.selectCount(query);
}
@Override
public void updateBreakContractRead(Long userNo) {
LambdaUpdateWrapper<BreakContractDriverRecord> update = new LambdaUpdateWrapper<>();
update.and(i ->
i.eq(BreakContractDriverRecord:: getTruckOwnUserNo,userNo).or()
.eq(BreakContractDriverRecord :: getDriverUserNo,userNo)
);
update.set(BreakContractDriverRecord :: getReadFlag,BreakContractRecordEnum.ReadFlag.YES.getCode());
baseMapper.update(null,update);
}
}
package com.clx.performance.listener;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.callback.message.OrderInfoMessage;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.config.ConfiguredOpenProperties;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.mq.SendSmsNoticeParam;
import com.msl.common.open.ConfiguredOpenClient;
import com.msl.common.result.Result;
import com.msl.message.sdk.action.MessageAction;
import com.msl.message.sms.api.sms.SmsMessage;
import com.msl.message.sms.api.sms.content.SmsMessageContentImpl;
import com.msl.message.sms.api.sms.recipient.SmsMessageRecipientImpl;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import static com.clx.performance.enums.OrderEnum.Status.*;
import static com.msl.message.sms.api.enums.RecipientTypeEnum.USER_MOBILE;
@Slf4j
@Component
@AllArgsConstructor
public class SendSmsListener {
private final ConfiguredOpenClient configuredOpenClient;
private final ConfiguredOpenProperties properties;
@RabbitListener(queues = RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE)
public void onMessage(Message message) {
try{
log.info("监听到通用发送通知短信,消息内容{}", new String(message.getBody()));
SendSmsNoticeParam messageParam = JSONUtil.toBean(new String(message.getBody()),
new TypeReference<MqWrapper<SendSmsNoticeParam>>() {
},false).getData();
log.info("发送短信的手机号列表:{}",messageParam.getMobileList());
if(CollectionUtils.isEmpty(messageParam.getMobileList())){
return;
}
SmsMessage smsMessage = new SmsMessage();
//设置消息内容
SmsMessageContentImpl smsMessageContent= new SmsMessageContentImpl();
//模版code
smsMessageContent.setCode(messageParam.getCode());
smsMessageContent.setParams(messageParam.getParams());
//设置消息接收人
SmsMessageRecipientImpl smsMessageRecipient = new SmsMessageRecipientImpl();
smsMessageRecipient.setUserType(USER_MOBILE.getCode());
smsMessageRecipient.setTargets(String.join(",", messageParam.getMobileList()));
smsMessage.setContent(smsMessageContent);
smsMessage.setRecipient(smsMessageRecipient);
//从消息中心注册获取的通道key
smsMessage.setAccessKey(properties.getAccessKey());
//向消息中心发送消息
log.info("开始发送消息中心短信,请求参数:{}", JSON.toJSONString(smsMessage));
Result<Object> result = configuredOpenClient.doAction(new MessageAction(smsMessage));
if(result.succeed()){
log.info("结束发送消息中心短信成功,响应结果:{}", JSON.toJSONString(result));
}else{
log.error("结束发送消息中心短信失败,响应结果:{}", JSON.toJSONString(result));
}
}catch (Exception e){
log.info("监听发送通知短信发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}
}
}
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.OrderChildExceptionReportDealLog;
/**
* @author kavin
* Date 2024-10-22
* Time 11:08
*/
public interface OrderChildExceptionReportDealLogMapper extends BaseMapper<OrderChildExceptionReportDealLog> {
}
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.OrderChildExceptionReport;
/**
* @author kavin
* Date 2024-10-22
* Time 10:38
*/
public interface OrderChildExceptionReportMapper extends BaseMapper<OrderChildExceptionReport> {
}
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
package com.clx.performance.model;
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;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2024-10-22
* Time 10:38
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("order_child_exception_report")
public class OrderChildExceptionReport implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("report_no")
@Schema(description="异常上报编号")
private String reportNo;
@TableField("third_report_no")
@Schema(description="三方异常上报编号")
private String thirdReportNo;
@TableField("source")
@Schema(description="来源")
private Integer source;
@TableField("exception_category")
@Schema(description="异常类别")
private String exceptionCategory;
@TableField("exception_type")
@Schema(description="异常类型")
private String exceptionType;
@TableField("truck_no_or_mobile")
@Schema(description="车牌号/手机号")
private String truckNoOrMobile;
@TableField("child_no")
@Schema(description="运单编号")
private String childNo;
@TableField("status")
@Schema(description="状态:1:待处理 2:申诉中 3:已处理 4:已撤回")
private Integer status;
@TableField("deduction_amount")
@Schema(description="扣罚金额")
private BigDecimal deductionAmount;
@TableField("report_time")
@Schema(description="异常上报时间")
private LocalDateTime reportTime;
@TableField("reason")
@Schema(description="异常原因描述")
private String reason;
@TableField("picture_url_json")
@Schema(description="图片")
private String pictureUrlJson;
@TableField("video_url_json")
@Schema(description="视频")
private String videoUrlJson;
@TableField("deal_user_code")
@Schema(description="处理人用户编码")
private Long dealUserCode;
@TableField("deal_user")
@Schema(description="处理人用户姓名")
private String dealUser;
@TableField("deal_time")
@Schema(description="处理时间")
private LocalDateTime dealTime;
@TableField("deal_result")
@Schema(description="处理结果")
private Integer dealResult;
@TableField("transfer_driver_break_contract")
@Schema(description="是否转司机违约 1:是")
private Integer transferDriverBreakContract;
@TableField("break_contract_reason")
@Schema(description="违约原因")
private String breakContractReason;
@TableField("create_time")
@Schema(description="创建时间")
private LocalDateTime createTime;
@TableField("modified_time")
@Schema(description="修改时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
package com.clx.performance.model;
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;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2024-10-22
* Time 11:08
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("order_child_exception_report_deal_log")
public class OrderChildExceptionReportDealLog implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("report_no")
@Schema(description="异常上报编号")
private String reportNo;
@TableField("deal_way")
@Schema(description="处理方式 1:同意扣罚 2:申诉")
private Integer dealWay;
@TableField("appeal_reason")
@Schema(description="申诉原因")
private String appealReason;
@TableField("picture_url")
@Schema(description="图片")
private String pictureUrl;
@TableField("video_url")
@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;
@TableField("modified_time")
@Schema(description="修改时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
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,36 @@ 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("read_flag")
@Schema(description="已读未读标志 0:未读 1:已读")
private String readFlag;
@TableField("remark")
@Schema(description="备注")
private String remark;
......
package com.clx.performance.service;
/**
* @author kavin
* Date 2024-10-22
* Time 11:08
*/
public interface OrderChildExceptionReportDealLogService {
}
package com.clx.performance.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.open.sdk.request.action.*;
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.vo.pc.OrderChildExceptionReportVO;
import com.msl.common.result.Result;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
/**
* @author kavin
* Date 2024-10-22
* Time 10:38
*/
public interface OrderChildExceptionReportService {
Result<String> smbSyncExceptionReportInfo(SmbSyncExceptionReportInfoAction action);
Result<Object> smbSyncExceptionReportResult(SmbSyncExceptionReportResultAction action);
Result<Object> smbWithdrawExceptionReport(SmbWithdrawExceptionReportAction action);
Result<String> mslSyncExceptionReportInfo(MslSyncExceptionReportInfoAction action);
Result<Object> mslSyncExceptionReportResult(MslSyncExceptionReportResultAction action);
Result<Object> mslWithdrawExceptionReport(MslWithdrawExceptionReportAction action);
void updateDealExceptionReport(DealExceptionReportParam param);
Page<OrderChildExceptionReportVO> pageExceptionReport(PageExceptionReportParam param);
SXSSFWorkbook exportExceptionReport(PageExceptionReportParam param);
OrderChildExceptionReportVO getExceptionReport(Integer id);
void transferDriverBreakContract(TransferDriverBreakContractParam param);
}
package com.clx.performance.service;
import com.clx.performance.enums.SmsTemplateEnum;
import java.util.List;
public interface SendSmsService {
void sendChildWarnConfigSmsNotice(Integer warnTypeCode, SmsTemplateEnum.Type smsTemplateType,
List<String> paramList);
}
......@@ -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);
......@@ -33,4 +35,8 @@ public interface BreakContractDriverRecordService {
BigDecimal getBreakContractFigure(String childNo);
Integer getChildTruckDemand(String childNo);
Integer getShowBreakContractRed();
void updateBreakContractRead();
}
......@@ -134,16 +134,17 @@ public class LastTruckServiceImpl implements LastTruckService {
//为每个货主的订单进行加锁,计算最后一车进行排队,防止多个运单dts监听并发导致最后一车重复计算
RLock lock = redissonClient.getLock(RedissonConstants.CALC_ORDER_LAST_TRUCK_LOCK + orderNo);
try{
boolean flag = lock.tryLock(15, 30, TimeUnit.SECONDS);
if (!flag) {
throw new ServiceSystemException(ResultEnum.TRY_LOCK_ERROR,"计算最后一车请求排队超时");
}
String lastTruckCacheKey = getLastTruckCacheKey(orderNo);
//已经计算出最后一车,则直接返回运单信息
if(Objects.equals(Boolean.TRUE,redisTemplate.hasKey(lastTruckCacheKey))){
String childNo = redisTemplate.opsForValue().get(lastTruckCacheKey);
return orderChildDao.getByChildNo(childNo).orElseThrow(ResultEnum.DATA_NOT_FIND);
}
boolean flag = lock.tryLock(15, 30, TimeUnit.SECONDS);
if (!flag) {
throw new ServiceSystemException(ResultEnum.TRY_LOCK_ERROR,"计算最后一车请求排队超时");
}
BigDecimal weight = orderChildDao.listAfterArrayReceiveChild(orderNo);
log.info("计算订单最后一车,订单号:{} ,计算是否到达可计算最后一车标准,运单累计拉运吨数:{}, 订单拉运吨数:{}",
......
package com.clx.performance.service.impl;
import com.clx.performance.service.OrderChildExceptionReportDealLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author kavin
* Date 2024-10-22
* Time 11:08
*/
@Service
@Slf4j
public class OrderChildExceptionReportDealLogServiceImpl implements OrderChildExceptionReportDealLogService {
}
......@@ -203,6 +203,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderGoodsVO.setReceiveWaitSystem(orderInfoFeign.getReveiveWaitSystem());
orderGoodsVO.setReceiveWaitSystemName(orderInfoFeign.getReveiveWaitSystemName());
orderGoodsVO.setReceiveWaitMode(orderInfoFeign.getReveiveWaitMode());
orderGoodsVO.setOrderSource(orderInfoFeign.getOrderSource());
return orderGoodsVO;
}
......
package com.clx.performance.service.impl;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.enums.SmsTemplateEnum;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.mq.SendSmsNoticeParam;
import com.clx.performance.service.SendSmsService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.clx.performance.constant.RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE_EXCHANGE;
import static com.clx.performance.constant.RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE_ROUTING_KEY;
/**
* @ClassName SendSmsServiceImpl
* @Description
* @Author kavin
* @Date 2024/11/6 10:14
* @Version 1.0
*/
@Service
@Slf4j
@AllArgsConstructor
public class SendSmsServiceImpl implements SendSmsService {
private final RabbitTemplate rabbitTemplate;
private final VehicleWarnUserDao vehicleWarnUserDao;
@Override
public void sendChildWarnConfigSmsNotice(Integer warnTypeCode, SmsTemplateEnum.Type smsTemplateType,
List<String> paramList){
String params = replaceContent(smsTemplateType.getParam(), paramList);
List<String> targets = getTargets(warnTypeCode);
SendSmsNoticeParam param = new SendSmsNoticeParam();
param.setCode(smsTemplateType.getCode());
param.setMobileList(targets);
param.setParams(JSON.parseObject(params));
log.info("开始运单预警通知配置短信消息,短信模版code:{},请求参数:{}",smsTemplateType.getCode(),JSON.toJSONString(param));
Message body = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(param)).getBytes()).build();
rabbitTemplate.send(NOTICE_SEND_SMS_QUEUE_EXCHANGE,NOTICE_SEND_SMS_QUEUE_ROUTING_KEY, body);
log.info("结束运单预警通知配置短信消息,短信模版code:{},", smsTemplateType.getCode());
}
private List<String> getTargets(int code){
return vehicleWarnUserDao.listAllEnable()
.stream()
.filter(item -> JSONUtil.toList(item.getWarnTypeJson(), Integer.class).contains(code))
.map(VehicleWarnUser::getMobile).collect(Collectors.toList());
}
//构建站内信中的内容,替换变量
private static String replaceContent(String content,List<String> list){
int listSize = 0;
int times = countCharTimes(content, "%s");
if(CollectionUtils.isNotEmpty(list)){
listSize = list.size();
}
if(times != listSize){
log.error("替换的变量和字符串中需要的变量数量不一致");
return null;
}
return String.format(content, list.toArray());
}
//查找字符在字符串出现的次数
public static int countCharTimes(String mainStr,String subStr){
// 声明一个要返回的变量
int count = 0;
// 声明一个初始的下标,从初始位置开始查找
int index = 0;
// 获取主数据的长度
int mainStrLength = mainStr.length();
// 获取要查找的数据长度
int subStrLength = subStr.length();
// 如果要查找的数据长度大于主数据的长度则返回0
if (subStrLength > mainStrLength){
return 0;
}
// 循环使用indexOf查找出现的下标,如果出现一次则count++
while ((index = mainStr.indexOf(subStr, index)) != -1) {
count++;
index += subStrLength;
}
return count;
}
}
......@@ -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));
}
......@@ -321,4 +322,21 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
}
return 0;
}
@Override
public Integer getShowBreakContractRed() {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long count = breakContractDriverRecordDao.getShowBreakContractRed(loginUserInfo.getUserNo());
if(count > 0 ){
return 1;
}
return 0;
}
@Override
public void updateBreakContractRead() {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
breakContractDriverRecordDao.updateBreakContractRead(loginUserInfo.getUserNo());
}
}
......@@ -20,8 +20,8 @@ public class BreakContractDriverRecordSqlProvider {
" child_no, truck_no, truck_own_user_no, truck_own_name, " +
" driver_user_no, driver_name, figure, time_limit, " +
" date_format(limit_time, '%Y-%m-%d %H:%i:%s') as limitTime, " +
" settlement_no, " +
" remark, " +
" settlement_no,exception_report_no,exception_category,exception_type," +
" remark,picture_url,video_url, " +
" 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 "
......@@ -47,8 +47,8 @@ public class BreakContractDriverRecordSqlProvider {
" child_no, truck_no, truck_own_user_no, truck_own_name, " +
" driver_user_no, driver_name, figure, time_limit, " +
" date_format(limit_time, '%Y-%m-%d %H:%i:%s') as limitTime, " +
" settlement_no, " +
" remark, " +
" settlement_no,exception_report_no,exception_category,exception_type," +
" remark,picture_url,video_url, " +
" 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 "
......
package com.clx.performance.struct;
import com.clx.performance.model.OrderChildExceptionReportOperationLog;
import com.clx.performance.vo.pc.OrderChildExceptionReportOperationLogVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
public interface OrderChildExceptionReportOperationLogStruct {
List<OrderChildExceptionReportOperationLogVO> convertList(List<OrderChildExceptionReportOperationLog> list);
}
package com.clx.performance.struct;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.open.sdk.request.action.MslSyncExceptionReportInfoAction;
import com.clx.open.sdk.request.action.SmbSyncExceptionReportInfoAction;
import com.clx.performance.model.OrderChildExceptionReport;
import com.clx.performance.vo.pc.OrderChildExceptionReportVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
public interface OrderChildExceptionReportStruct {
OrderChildExceptionReport convertInfoSmbAction(SmbSyncExceptionReportInfoAction action);
OrderChildExceptionReport convertInfoMslAction(MslSyncExceptionReportInfoAction action);
Page<OrderChildExceptionReportVO> convertPage(IPage<OrderChildExceptionReport> page);
OrderChildExceptionReportVO convert(OrderChildExceptionReport report);
}
......@@ -14,6 +14,7 @@ public enum BreakContractRecordEnum {
public enum TriggerType {
SYSTEM(1, "系统触发"),
MANUAL(2, "手动触发"),
EXCEPTION_REPORT(3, "异常上报"),
;
private final Integer code;
......@@ -22,6 +23,10 @@ public enum BreakContractRecordEnum {
public static Optional<TriggerType> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(BreakContractRecordEnum.TriggerType::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
......@@ -37,6 +42,26 @@ public enum BreakContractRecordEnum {
public static Optional<BreakContractPartyType> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(BreakContractRecordEnum.BreakContractPartyType::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum ReadFlag {
NO(0, "未读"),
YES(1, "已读"),
;
private final Integer code;
private final String msg;
public static Optional<ReadFlag> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
}
}
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.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum CarrierExceptionReportEnum {
;
@Getter
@AllArgsConstructor
public enum Status {
//:1:待处理 2:申诉中 3:已处理 4:已撤回
WAIT_DEAL(1, "待处理"),
APPEAL_IN_PROGRESS(2, "申诉中"),
PROCESSED(3, "已处理"),
WITHDRAWN(4, "已撤回"),
;
private final Integer code;
private final String name;
public static Optional<Status> 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(Status::getName).orElse(null);
}
}
}
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum SmsTemplateEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
EXCEPTION_REPORT_DEAL("childExceptionReportDeal", "异常上报处理","{\"childNo\":\"%s\"}"),
;
private final String code;
private final String msg;
private final String param;
}
}
......@@ -22,7 +22,7 @@ public enum VehicleWarnConfigEnum {
LOAD_TIMEOUT(7, "运单-装车超时"),
UNLOAD_TIMEOUT(8, "运单-卸车超时"),
DELAY(9, "运单-运单延误"),
EXCEPTION_REPORT_DEAL(10, "异常上报处理"),
;
private final Integer code;
......
package com.clx.performance.feign;
import com.clx.open.sdk.request.action.GetOrderBreakContractOwnerRuleFileAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressAction;
import com.clx.open.sdk.request.action.QueryPerformanceProgressLogAction;
import com.clx.open.sdk.request.action.*;
import com.clx.open.sdk.request.dto.BatchOrderStatisticsDTO;
import com.clx.open.sdk.request.dto.BatchOrderStatisticsInfoDTO;
import com.clx.open.sdk.request.dto.OrderCanExtractWeightDTO;
......@@ -13,13 +11,14 @@ import com.clx.performance.vo.pc.PerformanceProgressOperationLogVO;
import com.clx.performance.vo.pc.PerformanceProgressVO;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRuleFileVO;
import com.msl.common.result.Result;
import jakarta.validation.constraints.NotEmpty;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import jakarta.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.List;
......@@ -75,4 +74,34 @@ public interface PerformanceSDKFeign {
@GetMapping("clx-performance/feign/sdk/queryOrderStatistics")
Result<BatchOrderStatisticsDTO> queryOrderStatistics(@RequestParam("orderNoList")
@NotEmpty(message = "订单编号集合不能为空") List<String> orderNoList);
@PostMapping("clx-performance/feign/sdk/smbSyncExceptionReportInfo")
Result<String> smbSyncExceptionReportInfo(@RequestBody @Validated SmbSyncExceptionReportInfoAction action);
@PostMapping("clx-performance/feign/sdk/smbSyncExceptionReportResult")
Result<Object> smbSyncExceptionReportResult(@RequestBody @Validated SmbSyncExceptionReportResultAction action);
@PostMapping("clx-performance/feign/sdk/smbWithdrawExceptionReport")
Result<Object> smbWithdrawExceptionReport(@RequestBody @Validated SmbWithdrawExceptionReportAction action);
@PostMapping("clx-performance/feign/sdk/mslSyncExceptionReportInfo")
Result<String> mslSyncExceptionReportInfo(@RequestBody @Validated MslSyncExceptionReportInfoAction action);
@PostMapping("clx-performance/feign/sdk/mslSyncExceptionReportResult")
Result<Object> mslSyncExceptionReportResult(@RequestBody @Validated MslSyncExceptionReportResultAction action);
@PostMapping("clx-performance/feign/sdk/mslWithdrawExceptionReport")
Result<Object> mslWithdrawExceptionReport(@RequestBody @Validated MslWithdrawExceptionReportAction action);
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
import java.util.Map;
/**
* @ClassName SendSmsNoticeParam
* @Description
* @Author kavin
* @Date 2024/11/6 10:21
* @Version 1.0
*/
@Setter
@Getter
public class SendSmsNoticeParam {
//短信模版code码
private String code;
//发送手机号列表
private List<String> mobileList;
//短信模版参数
private Map<String, Object> params;
}
package com.clx.performance.param.pc;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @ClassName DealExceptionReportParam
* @Description
* @Author kavin
* @Date 2024/10/22 20:07
* @Version 1.0
*/
@Getter
@Setter
public class DealExceptionReportParam {
@NotNull(message = "异常上报ID不能为空")
@Schema(description="异常上报ID")
private Integer id;
@NotNull(message = "处理方式不能为空")
@Schema(description="处理方式 1:同意扣罚 2:申诉" ,example = "枚举 ExceptionReportEnum.DealWay ")
private Integer dealWay;
@Schema(description="申诉原因")
private String appealReason;
@Schema(description="图片")
private List<String> pictureUrl;
@Schema(description="视频")
private List<String> videoUrl;
}
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
/**
* @ClassName PageExceptionReportParam
* @Description
* @Author kavin
* @Date 2024/10/23 13:31
* @Version 1.0
*/
@Getter
@Setter
public class PageExceptionReportParam extends PageParam {
@Schema(description="三方异常上报编号")
private String thirdReportNo;
@Schema(description="来源 1:数煤宝 3:供应链")
private Integer source;
@Schema(description="运单编号")
private String childNo;
@Schema(description="车牌号/手机号")
private String truckNoOrMobile;
@Schema(description="状态:1:待处理 2:申诉中 3:已处理 4:已撤回")
private Integer status;
@Schema(description="开始时间")
private String beginTime;
@Schema(description="结束时间")
private String endTime;
}
package com.clx.performance.param.pc;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
/**
* @ClassName TransferDriverBreakContractParam
* @Description
* @Author kavin
* @Date 2024/10/23 14:39
* @Version 1.0
*/
@Getter
@Setter
public class TransferDriverBreakContractParam {
@NotNull(message = "异常记录ID不能为空")
@Schema(description = "异常记录ID")
private Integer id;
@NotBlank(message = "违约原因不能为空")
@Schema(description = "违约原因")
private String reason;
}
package com.clx.performance.vo.app.breakcontract;
import com.alibaba.fastjson.JSON;
import com.clx.performance.enums.BreakContractRecordEnum;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
......@@ -8,6 +10,8 @@ import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* @author liruixin
......@@ -23,9 +27,14 @@ public class DriverBreakContractDriverRecordVO {
@Schema(description="id")
private Integer id;
@Schema(description="触发类型:1系统触发 2手动触发")
@Schema(description="触发类型:1系统触发 2手动触发 3.异常上报")
private Integer triggerType;
public String getTriggerTypeMsg(){
return BreakContractRecordEnum.TriggerType.getMsgByCode(triggerType);
}
@Schema(description="违约方类型:1平台 2货主 3司机")
private Integer breakContractPartyType;
......@@ -60,9 +69,52 @@ public class DriverBreakContractDriverRecordVO {
@Schema(description="结算单编号")
private String settlementNo;
@Schema(description="备注")
@Schema(description="违约原因")
private String remark;
@Schema(description="异常上报单号")
private String exceptionReportNo;
@Schema(description="异常类别")
private String exceptionCategory;
@Schema(description="异常类型")
private String exceptionType;
@Schema(description="图片字地址符串")
private String pictureUrl;
@Schema(description="视频地址字符串")
private String videoUrl;
@Schema(description="图片")
private List<String> pictureUrlList;
public List<String> getPictureUrlList(){
if(Objects.nonNull(pictureUrl)){
return JSON.parseArray(pictureUrl,String.class);
}
return null;
}
@Schema(description="视频")
private List<String> videoUrlList;
public List<String> getVideoUrlList(){
if(Objects.nonNull(videoUrl)){
return JSON.parseArray(videoUrl,String.class);
}
return null;
}
@Schema(description = "操作人名称", example = "")
private String createName;
@Schema(description="创建时间")
private String createTime;
......
package com.clx.performance.vo.pc;
import com.clx.performance.enums.CarrierExceptionLogEnum;
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 typeMsg;
@Schema(description = "操作事项")
public String getTypeMsg(){
return CarrierExceptionLogEnum.Type.getMsgByCode(type);
}
//操作事项编码
@Schema(description = "处理结果")
private String result; //处理结果
@Schema(description = "操作人名称")
private String createName; //操作人名称
@Schema(description = "创建时间")
private String createTime; //创建时间
}
\ No newline at end of file
package com.clx.performance.vo.pc;
import com.clx.open.sdk.enums.ExceptionReportEnum;
import com.clx.performance.enums.CarrierExceptionReportEnum;
import com.clx.performance.enums.SyncPlatformEnum;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* @author kavin
* Date 2024-10-22
* Time 10:38
*/
@Getter
@Setter
public class OrderChildExceptionReportVO {
private Integer id;
@Schema(description="异常上报编号")
private String reportNo;
@Schema(description="三方异常上报编号")
private String thirdReportNo;
@Schema(description="来源")
private Integer source;
@Schema(description="来源描述")
private String sourceMsg;
public String getSourceMsg(){
return SyncPlatformEnum.Source.getNameByCode(source);
}
@Schema(description="异常类别")
private String exceptionCategory;
@Schema(description="异常类型")
private String exceptionType;
@Schema(description="车牌号/手机号")
private String truckNoOrMobile;
@Schema(description="运单编号")
private String childNo;
@Schema(description="状态:1:待处理 2:申诉中 3:已处理 4:已撤回")
private Integer status;
@Schema(description="状态:1:待处理 2:申诉中 3:已处理 4:已撤回")
private String statusMsg;
public String getStatusMsg(){
return CarrierExceptionReportEnum.Status.getMsgByCode(status);
}
@Schema(description="扣罚金额")
@MoneyOutConvert
private BigDecimal deductionAmount;
@Schema(description="异常上报时间")
private String reportTime;
@Schema(description="异常描述")
private String reason;
@Schema(description="处理人用户编码")
private Long dealUserCode;
@Schema(description="处理人用户姓名")
private String dealUser;
@Schema(description="处理时间")
private String dealTime;
@Schema(description="处理结果 1:承运违约 2:承运不违约 ")
private Integer dealResult;
@Schema(description="处理结果 1:承运违约 2:承运不违约")
private String dealResultMsg;
@Schema(description="处理结果")
public String getDealResultMsg(){
return ExceptionReportEnum.DealResult.getNameByCode(dealResult);
}
@Schema(description="是否转司机违约 1:是")
private Integer transferDriverBreakContract;
@Schema(description="是否转司机违约 1:是")
private String transferDriverBreakContractMsg;
public String getTransferDriverBreakContractMsg(){
if(Objects.nonNull(transferDriverBreakContract)){
return "是";
}else{
return "-";
}
}
@Schema(description="创建时间")
private String createTime;
@Schema(description="异常记录图片")
private List<String> pictureUrlList;
@Schema(description="异常记录视频")
private List<String> videoUrlList;
@Schema(description="处理方式 1:同意扣罚 2:申诉")
private Integer dealWay;
@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;
}
package com.clx.performance.vo.pc.breakcontract.carrier;
import com.alibaba.fastjson.JSON;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
......@@ -8,6 +9,8 @@ import lombok.Setter;
import lombok.ToString;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* @author liruixin
......@@ -23,7 +26,7 @@ public class BreakContractDriverRecordVO {
@Schema(description="id")
private Integer id;
@Schema(description="触发类型:1系统触发 2手动触发")
@Schema(description="触发类型:1系统触发 2手动触发 3.异常上报")
private Integer triggerType;
@Schema(description="违约方类型:1平台 2货主 3司机")
......@@ -60,9 +63,52 @@ public class BreakContractDriverRecordVO {
@Schema(description="结算单编号")
private String settlementNo;
@Schema(description="备注")
@Schema(description="违约原因")
private String remark;
@Schema(description="异常上报单号")
private String exceptionReportNo;
@Schema(description="异常类别")
private String exceptionCategory;
@Schema(description="异常类型")
private String exceptionType;
@Schema(description="图片字地址符串")
private String pictureUrl;
@Schema(description="视频地址字符串")
private String videoUrl;
@Schema(description="图片")
private List<String> pictureUrlList;
public List<String> getPictureUrlList(){
if(Objects.nonNull(pictureUrl)){
return JSON.parseArray(pictureUrl,String.class);
}
return null;
}
@Schema(description="视频")
private List<String> videoUrlList;
public List<String> getVideoUrlList(){
if(Objects.nonNull(videoUrl)){
return JSON.parseArray(videoUrl,String.class);
}
return null;
}
@Schema(description = "操作人名称", example = "")
private String createName;
@Schema(description="创建时间")
private String createTime;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论