提交 c7956552 authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/v6.4_transportation_20231110' into test

# Conflicts: # performance-api/src/main/java/com/clx/performance/enums/PerformanceResultEnum.java # performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # performance-web/src/main/java/com/clx/performance/dao/OrderGoodsDao.java # performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java # performance-web/src/main/java/com/clx/performance/mapper/OrderGoodsMapper.java
......@@ -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);
}
}
}
......@@ -84,6 +84,10 @@ public enum OrderChildEnum {
public static Optional<Status> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> e.code.equals(code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Status::getName).orElse(null);
}
}
@Getter
......@@ -96,6 +100,7 @@ public enum OrderChildEnum {
TRAFFIC_RESTRICTION(5, "交通管制"),
TRAFFIC_ACCIDENT(6, "交通事故"),
ADDRESS(7, "无法找到地址"),
WAIT(8, "排队时间较长"),
OTHER(9, "其他原因"),
;
......
......@@ -34,7 +34,7 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_GOODS_NO_FOUND(1200, "货单不存在"),
ORDER_WEIGHT_LACK(1201, "剩余数量不足"),
ORDER_WEIGHT_LACK(1201, "剩余吨数不足,请联系客服"),
ORDER_INVALID(1202, "无效的货单"),
ORDER_INVALID1(1203, "当前运单的货源已完成或取消,请查看其他货源"),
......@@ -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, "当前货单已关闭不可继续提取"),
......@@ -92,6 +94,9 @@ public enum PerformanceResultEnum implements ResultEnum {
INTEGRAL_RULE_RATIO_ALL_EMPTY(1702, "层级划分范围不能全为空"),
INTEGRAL_RULE_NAME_EXIST(1703, "层级名称已存在"),
APP_POP_UP_ERROR(-1000, "app弹窗提示"),
WALLET_CODE_IS_NULL(1704, "用户钱包不存在"),
;
private final int code;
private final String msg;
......
......@@ -9,7 +9,7 @@ import java.util.Optional;
@Getter
@AllArgsConstructor
public enum UserTypeEnum {
SYSTEM(0, "系统"),
OWNER(1, "货主"),
CARRIER(2, "承运端"),
DRIVER(3, "司机");
......
......@@ -22,13 +22,15 @@ public enum IntegralRecordEnum {
ORDER_CHILD_COMPLETE_NUM(12, "运单完成数量"),
ORDER_CHILD_COMPLETE_WATER(13, "流水单"),
ORDER_CHILD_COMPLETE_SUPPORT(14, "支援单"),
ORDER_CHILD_COMPLETE_TIMEOUT(15, "运单完成超时"),
ORDER_CHILD_CANCEL(21, "运单取消"),
ORDER_CHILD_CANCEL_TIMEOUT(22, "运单取消超时"),
ORDER_CHILD_PLATFORM_CANCEL(23, "平台取消"),
ORDER_CHILD_ARRIVE_SEND_ADDRESS_TIMEOUT_CANCEL(22, "超时未到达货源地"),
ORDER_CHILD_ARRIVE_RECEIVE_ADDRESS_TIMEOUT(23, "超时到达目的地"),
ORDER_CHILD_PLATFORM_CANCEL(24, "平台取消补偿"),
ORDER_CHILD_PLATFORM_COMPENSATION(25, "平台补偿"),
REPORT_TRUCK_INFO(50, "提交基础信息"),
REPORT_REFUEL(51, "油表上报"),
REPORT_TRAFFIC(52, "上报交通拥堵"),
......@@ -38,6 +40,7 @@ public enum IntegralRecordEnum {
REPORT_RECEIVE_ADDRESS_NO_WAIT(56, "上报目的地无需排队"),
REPORT_QUALITY(57, "上报煤炭质量问题"),
REPORT_ABNORMAL(58, "上报拉运异常问题"),
REPORT_SEND_ADDRESS_INFO(59, "上报货源地情况"),
;
private Integer value;
......
package com.clx.performance.feign;
import com.clx.performance.vo.pc.child.OrderChildLineStatisticsVO;
import com.msl.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
......@@ -16,7 +17,7 @@ public interface OrderChildFeign {
* 线路运单统计
*/
@RequestMapping(value = "clx-performance/feign/orderChild/lineStatistics", method = RequestMethod.GET)
OrderChildLineStatisticsVO lineStatistics(@RequestParam @NotNull(message = "发货地址不可为空") Integer sendSystemAddressId,
Result<OrderChildLineStatisticsVO> lineStatistics(@RequestParam @NotNull(message = "发货地址不可为空") Integer sendSystemAddressId,
@RequestParam @NotNull(message = "收货货地不可为空") Integer receiveSystemAddressId);
}
package com.clx.performance.feign;
import com.clx.performance.param.app.collect.CollectTruckParam;
import com.clx.performance.param.feign.OrderAdjustTonnageDownParam;
import com.clx.performance.param.pc.OrderCancelFeignParam;
import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.param.pc.owner.UpdateStatusParam;
import com.clx.performance.vo.app.collect.AppCollectTruckVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRuleVO;
......@@ -95,4 +97,8 @@ public interface PerformanceFeign {
@GetMapping(value = {"clx-performance/feign/breakContract/getRuleInfo"})
Result<BreakContractOwnerRuleVO> getRuleInfo(@RequestParam Integer id);
@PostMapping(value = {"clx-performance/feign/truck/listCollectTruck"})
Result<List<AppCollectTruckVO>> listCollectTruck(@RequestBody CollectTruckParam param);
}
package com.clx.performance.param.app.collect;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
public class CollectTruckParam {
@ApiModelProperty(value = "车牌", example = "")
private List<String> truckNos;
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.*;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
/**
* @Author: aiqingguo
......@@ -18,5 +19,31 @@ import lombok.ToString;
public class IntegralOrderChildFinishMqParam {
private String childNo; //运单编号
private Integer type; //类型:
@Getter
@AllArgsConstructor
public enum Type {
ARRIVE_SEND_ADDRESS_TIMEOUT_CANCEL(11, "到达货源地超时取消"),
ARRIVE_RECEIVE_ADDRESS_TIMEOUT(12, "到达目的地超时"),
DRIVER_CONFIRM(13, "司机确认收货"),
DRIVER_CANCEL(14, "司机取消"),
CARRIER_CANCEL(21, "承运取消"),
ARTIFICIAL_CANCEL(22, "客服取消"),
ORDER_CANCEL(23, "订单取消"),
ORDER_GOODS_CANCEL(24, "货单取消"),
;
private final Integer code;
private final String msg;
public static Optional<Type> getByCode(int code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.getCode(), code)).findFirst();
}
}
}
......@@ -3,6 +3,8 @@ package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import lombok.Data;
import java.util.List;
@Data
public class OrderChildCancelRecordParam extends PageParam {
}
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import javax.validation.constraints.NotBlank;
/**
* @ClassName TruckTraceParam
* @Description
* @Author kavin
* @Date 2023/11/13 9:47
* @Version 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TruckTraceParam {
@NotBlank(message = "车牌号不能为空")
@ApiModelProperty("车牌号")
private String truckNo;
@NotBlank(message = "开始时间不能为空")
@ApiModelProperty(value = "开始时间",example = "2023-11-11 12:00:00")
private String beginTime;
@NotBlank(message = "结束时间不能为空")
@ApiModelProperty(value = "结束时间",example = "2023-11-11 12:00:00")
private String endTime;
}
......@@ -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;
......
......@@ -27,4 +27,7 @@ public class PageBreakContractOwnerRecordParam extends PageParam {
@ApiModelProperty(value = "结束时间", example = "")
private String endTime;
@ApiModelProperty("确认状态:0-确认中;1-已经确认;2-已驳回")
private Integer confirmStatus;
}
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;
}
......@@ -29,6 +29,7 @@ public class AppCollectTruckVO {
private String truckNo;
@ApiModelProperty(value = "卸车类型:1自卸侧翻 2自卸立翻 3非自卸", example = "")
private Integer unloadType;
@ApiModelProperty(value = "车贷状态:0无车贷 1有车贷", example = "")
private Integer autoLoanStatus;
@ApiModelProperty(value = "车贷剩余月份", example = "")
......
......@@ -18,5 +18,6 @@ import lombok.ToString;
public class OrderChildLoadMqParam {
private String childNo; //运单编号
private Integer repeatStatus; //重复状态:0首次 1重复
}
......@@ -18,5 +18,6 @@ import lombok.ToString;
public class OrderChildUnloadMqParam {
private String childNo; //运单编号
private Integer repeatStatus; //重复状态:0首次 1重复
}
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.math.BigDecimal;
/**
* @ClassName TruckTraceVO
* @Description
* @Author kavin
* @Date 2023/11/13 9:50
* @Version 1.0
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TruckTraceVO {
@ApiModelProperty(value = "车牌号", dataType = "String")
private String truckNo;
@ApiModelProperty(value = "正北方向夹角", example = "90", dataType = "String")
private BigDecimal angle;
@ApiModelProperty(value = "GPS 速度", example = "602", dataType = "String")
private BigDecimal speed;
@ApiModelProperty(value = "里程", example = "1500", dataType = "String")
private BigDecimal mileage;
@ApiModelProperty(value = "海拔", example = "3250", dataType = "String")
private BigDecimal height;
@ApiModelProperty(value = "经度", example = "31.1233", dataType = "BigDecimal")
private BigDecimal longitude;
@ApiModelProperty(value = "纬度", example = "161.342543", dataType = "BigDecimal")
private BigDecimal latitude;
@ApiModelProperty(value = "GPS 时间", example = "20140325/104954", dataType = "String")
private String gpsTime;
@ApiModelProperty(value = "创建时间", dataType = "String")
private String createTime;
@ApiModelProperty(value = "更新时间", dataType = "String")
private String modifiedTime;
}
......@@ -45,4 +45,10 @@ public class BreakContractOwnerRecordVO {
@ApiModelProperty("创建时间")
private String createTime;
@ApiModelProperty("确认状态:0-确认中;1-已经确认;2-已驳回")
private Integer confirmStatus;
@ApiModelProperty("驳回原因")
private String rejectReason;
}
......@@ -62,6 +62,9 @@ public class PageCarrierBreakContractSettlementDriverVO {
@ApiModelProperty("结算时间")
private String settleTime;
@ApiModelProperty("支付备注")
private String payRemark;
@ApiModelProperty("操作人名称")
private String createName;
......
......@@ -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;
......
......@@ -120,8 +120,8 @@ public class AppIntegralRuleVO {
private Integer integralTruck;
@ApiModelProperty(value = "油表上报积分x")
private Integer integralRefuel;
@ApiModelProperty(value = "上报交通拥堵积分x")
private Integer integralTraffic;
// @ApiModelProperty(value = "上报交通拥堵积分x")
// private Integer integralTraffic;
@ApiModelProperty(value = "上报货源地需要排队积分x")
private Integer integralSendAddressWait;
@ApiModelProperty(value = "上报货源地无需排队积分x")
......@@ -138,6 +138,8 @@ public class AppIntegralRuleVO {
private BigDecimal reportLimit;
@ApiModelProperty(value = "当日上报奖励积分上限x")
private Integer integralLimit;
@ApiModelProperty(value = "上报货源地情况积分x")
private Integer integralSendAddressInfo;
}
......
......@@ -16,9 +16,9 @@ import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderCancelParam;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
......@@ -27,7 +27,6 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -62,6 +61,8 @@ public class OrderCancelComponent implements InitializingBean {
private final OrderChildLogService orderChildLogService;
private final OrderChildPostService orderChildPostService;
public List<String> ownerProcess(OrderCancelParam param) {
String orderNo = param.getOrderNo();
List<OrderGoods> orderGoodsList = null;
......@@ -183,7 +184,8 @@ public class OrderCancelComponent implements InitializingBean {
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "货主取消订单失败,原因:远程调用取消订单失败");
}
for (String childNo : childNoList) {
integralMqService.orderChildFinish(childNo);
// 订单取消
orderChildPostService.orderCancel(childNo);
}
return childNoList;
......
......@@ -14,6 +14,7 @@ import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.base.Optional;
import com.msl.common.utils.DateUtils;
......@@ -60,6 +61,8 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
private final OrderChildLogService orderChildLogService;
private final OrderChildPostService orderChildPostService;
//根据货单最晚接单时间处理
public void expireProduceByLastOrderTime(LocalDateTime localDateTime, String orderGoodsNo) {
......@@ -214,11 +217,13 @@ public class OrderGoodsStatusLazyComponent implements InitializingBean {
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
orderChild.setCancelTime(DateUtils.parseDateTime(now).get());
orderChild.setFinishTime(DateUtils.parseDateTime(now).get());
breakContractDriverRecordService.saveDriverRecordOfOrderChildCancel(orderChild, 0L, "系统");
//保存运单日志数据
orderChildLogService.saveDriverOrderChildLog(orderChild.getChildNo(), OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode(),
OrderChildLogEnum.Type.PLATFORM_CANCEL.getMsg(), 0L, "系统");
// 到达货源地超时取消
orderChildPostService.arriveSendAddressTimeoutCancel(orderChild);
}
log.info("取消运单ID集合:{}", childNoList);
if (CollectionUtil.isNotEmpty(childNoList)) {
......
package com.clx.performance.controller.feign;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.model.collect.CollectTruck;
import com.clx.performance.param.app.collect.CollectTruckParam;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.collect.CollectTruckService;
import com.clx.performance.vo.app.collect.AppCollectTruckVO;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/feign/truck")
@Validated
@Api(tags = "司机上报信息Feign")
@AllArgsConstructor
public class CollectionTruckController {
private final CollectTruckService collectTruckService;
@ApiOperation(value = "司机上报车辆信息")
@PostMapping("/listCollectTruck")
Result<List<AppCollectTruckVO>> listCollectTruck(@RequestBody CollectTruckParam param){
return Result.ok(collectTruckService.listCollectTruck(param));
}
}
package com.clx.performance.controller.payment;
import com.clx.performance.param.pay.NotifyString;
import com.clx.performance.service.breakcontract.BreakContractMqHandlerService;
import com.clx.performance.service.settle.SettlementMqHandlerService;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
......@@ -18,6 +21,11 @@ import java.util.Objects;
@Api(tags = "承运端-支付回调")
@AllArgsConstructor
public class PayNotifyController {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@Autowired
private BreakContractMqHandlerService breakContractMqHandlerService;
@ApiOperation(value = "用户支付完成回调接口", notes = " <br>By:胡宁宁")
@RequestMapping(value = "/userPayNotify", method = RequestMethod.POST)
......@@ -29,12 +37,37 @@ public class PayNotifyController {
if (notify.getCode() != 0) {
// 支付失败处理
log.info("支付失败处理 唯一id {}", notify.getOrderNo());
settlementMqHandlerService.settlementDriverNotify(notify.getOrderNo(),0,notify.getMsg());
} else {
// 支付支付成功处理
log.info(" 支付支付成功处理 唯一id {}", notify.getOrderNo());
settlementMqHandlerService.settlementDriverNotify(notify.getOrderNo(),1,notify.getMsg());
}
Result<Object> ret = new Result<>();
return ret;
}
@ApiOperation(value = "用户支付完成回调接口", notes = " <br>By:胡宁宁")
@RequestMapping(value = "/userPayBrokerContractNotify", method = RequestMethod.POST)
public Result<Object> userPayBrokerContractNotify(@RequestBody NotifyString notify) {
log.info("用户支付完成回调接口 传参 {}", notify);
if (Objects.isNull(notify) || Objects.isNull(notify.getCode()) || Objects.isNull(notify.getAction())) {
return new Result<>();
}
if (notify.getCode() != 0) {
breakContractMqHandlerService.payFail(notify.getOrderNo(), notify.getMsg());
// 支付失败处理
log.info("支付失败处理 唯一id {}", notify.getOrderNo());
} else {
breakContractMqHandlerService.paySuccess(notify.getOrderNo());
// 支付支付成功处理
log.info(" 支付支付成功处理 唯一id {}", notify.getOrderNo());
}
Result<Object> ret = new Result<>();
return ret;
}
}
......@@ -63,7 +63,7 @@ public class OrderCancelController {
@ApiOperation(value = "取消运单记录", notes = "<br>By:胡宇帆")
@PostMapping("/orderChildCancelRecord")
public Result<PageData<OrderChildVO>> orderChildCancelRecord(OrderChildCancelRecordParam param) {
public Result<PageData<OrderChildVO>> orderChildCancelRecord(@RequestBody OrderChildCancelRecordParam param) {
IPage<OrderChildVO> page = orderCancelService.orderChildCancelRecord(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
......
......@@ -4,9 +4,11 @@ import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.param.pc.OrderGoodsTruckListParam;
import com.clx.performance.param.pc.PageTruckListParam;
import com.clx.performance.param.pc.PageVicinityTruckListParam;
import com.clx.performance.param.pc.TruckTraceParam;
import com.clx.performance.service.TruckService;
import com.clx.performance.vo.pc.OrderGoodsTruckListVO;
import com.clx.performance.vo.pc.PageTruckListVO;
import com.clx.performance.vo.pc.TruckTraceVO;
import com.msl.common.base.PageData;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
......@@ -76,8 +78,10 @@ public class TruckController {
return Result.ok(list);
}
@ApiOperation(value = "获取某辆车的轨迹信息", notes = "<br>By:刘海泉")
@PostMapping("/getTruckTrace")
public Result<List<TruckTraceVO>> getTruckTrace(@RequestBody @Validated TruckTraceParam param) {
List<TruckTraceVO> list = truckService.getTruckTrace(param);
return Result.ok(list);
}
}
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();
}
}
......@@ -128,6 +128,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
*/
List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo);
OrderChild findLastTruckChild(String orderNo);
BigDecimal listAfterArrayReceiveChild(String orderNo);
OrderChild getLastTruckChild(String orderNo);
BigDecimal getLinePoundDifferenceRatioAvg(@Param("sendSystemAddressId") Integer sendSystemAddressId,
@Param("receiveSystemAddressId") Integer receiveSystemAddressId,
@Param("beginTime") String beginTime);
......@@ -148,5 +153,4 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
IPage<OrderChildVO> orderChildCancelRecord(OrderChildCancelRecordParam param);
List<OrderChild> selectInOrderChildNoList(List<String> childNoList);
OrderChild findLastTruckChild(String orderNo);
}
......@@ -81,14 +81,15 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
boolean batchUpdateOrderGoodsWeight(BigDecimal residueWeight, List<Integer> ids);
List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo);
void updateSendSystemAddress(Integer ownerAddressId, Integer systemAddressId);
void updateReceiveSystemAddress(Integer ownerAddressId, Integer systemAddressId);
List<OrderGoodsAPPVO> getCancelOrderGoods(List<String> list);
List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo);
BigDecimal getAlreadyTransportWeight(String orderNo);
List<OrderGoodsAPPVO> getCancelOrderGoods(List<String> list);
BigDecimal sumAlreadyTransportWeightByOrderNo(String orderNo);
......
......@@ -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);
}
......@@ -8,6 +8,9 @@ import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContra
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author liruixin
* Date 2023-10-24
......@@ -15,8 +18,15 @@ import com.msl.common.dao.BaseDao;
*/
public interface BreakContractSettlementDriverDao extends BaseDao<BreakContractSettlementDriverMapper, BreakContractSettlementDriver, Integer> {
boolean updateSettlementStatus(BreakContractSettlementDriver item);
boolean updatePayFail(BreakContractSettlementDriver item);
Optional<BreakContractSettlementDriver> selectBySettlementNo(String settlementNo);
IPage<BreakContractSettlementDriver> pageCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param);
List<BreakContractSettlementDriver> listUnpay(LocalDateTime beginTime);
}
package com.clx.performance.dao.collect;
import com.clx.performance.mapper.collect.CollectTruckMapper;
import com.clx.performance.model.OrderChildPoundLog;
import com.clx.performance.model.collect.CollectTruck;
import com.clx.performance.param.app.collect.CollectTruckParam;
import com.clx.performance.vo.app.collect.AppCollectTruckVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 线路排队耗时
......@@ -17,5 +22,5 @@ public interface CollectTruckDao extends BaseDao<CollectTruckMapper, CollectTruc
Optional<CollectTruck> getByUserNoAndTruckNo(Long userNo, String truckNo);
List<CollectTruck> listCollectTruck(List<String> param);
}
......@@ -41,6 +41,7 @@ public class IntegralRecordDaoImpl extends BaseDaoImpl<IntegraRecordMapper, Inte
.eq(IntegralRecord::getStatisticsId, statisticsId)
.eq(IntegralRecord::getType, type)
.orderByDesc(IntegralRecord::getCreateTime)
.last("limit 1")
);
}
......
......@@ -386,6 +386,28 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.lt(OrderChild::getStatus, OrderChildEnum.Status.UNLOAD.getCode())
); }
@Override
public OrderChild findLastTruckChild(String orderNo) {
return getOne(lQrWrapper().eq(OrderChild::getOrderNo,orderNo)
.notIn(OrderChild::getStatus,OrderChildEnum.DTS_LISTEN_CANCEL_lIST)
.orderByDesc(OrderChild::getCreateTime)
.last("limit 1"));
}
@Override
public BigDecimal listAfterArrayReceiveChild(String orderNo) {
return baseMapper.listAfterArrayReceiveChild(orderNo);
}
@Override
public OrderChild getLastTruckChild(String orderNo) {
return getOne(lQrWrapper().eq(OrderChild::getOrderNo,orderNo)
.ge(OrderChild::getStatus,OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())
.le(OrderChild::getStatus,OrderChildEnum.Status.COMPLETE.getCode())
.orderByDesc(OrderChild::getArriveReceiveTime)
.last("limit 1"));
}
@Override
public OrderChildVO findArtificialCancelOrder(String orderChildNo) {
return baseMapper.findArtificialCancelOrder(orderChildNo);
......@@ -393,7 +415,7 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
@Override
public IPage<OrderChildVO> orderChildCancelRecord(OrderChildCancelRecordParam param) {
Page<OrderGoodsVO> page = Page.of(param.getPage(), param.getPageSize());
Page<OrderChildVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.orderChildCancelRecord(page,param);
}
......@@ -403,13 +425,6 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.in(OrderChild::getChildNo, childNoList)
); }
@Override
public OrderChild findLastTruckChild(String orderNo) {
return getOne(lQrWrapper().eq(OrderChild::getOrderNo,orderNo)
.notIn(OrderChild::getStatus,OrderChildEnum.DTS_LISTEN_CANCEL_lIST)
.orderByDesc(OrderChild::getCreateTime)
.last("limit 1"));
}
@Override
public BigDecimal getLinePoundDifferenceRatioAvg(Integer sendSystemAddressId, Integer receiveSystemAddressId, String beginTime) {
......
......@@ -82,6 +82,7 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
public void updateOrderGoodsBindStatus(String orderGoodsNo, Integer code) {
update(lUdWrapper()
.eq(OrderGoodsTruckBind::getOrderGoodsNo, orderGoodsNo)
.eq(OrderGoodsTruckBind::getStatus, OrderGoodsTruckBindEnum.Status.NORMAL.getCode())
.set(OrderGoodsTruckBind::getStatus, code)
);
}
......
......@@ -5,6 +5,7 @@ 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;
......@@ -15,6 +16,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 +60,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))
);
}
}
......@@ -5,7 +5,9 @@ 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.BreakContractSettlementDriverDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.mapper.breakcontract.BreakContractSettlementDriverMapper;
import com.clx.performance.model.breakcontract.BreakContractDriverRecord;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam;
import com.msl.common.base.Optional;
......@@ -13,6 +15,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;
/**
......@@ -22,6 +26,23 @@ import java.util.Objects;
*/
@Repository
public class BreakContractSettlementDriverDaoImpl extends BaseDaoImpl<BreakContractSettlementDriverMapper, BreakContractSettlementDriver, Integer> implements BreakContractSettlementDriverDao {
@Override
public boolean updateSettlementStatus(BreakContractSettlementDriver item) {
return update(lUdWrapper()
.eq(BreakContractSettlementDriver::getId, item.getId())
.set(BreakContractSettlementDriver::getSettleStatus, item.getSettleStatus())
.set(BreakContractSettlementDriver::getSettleTime, item.getSettleTime())
);
}
@Override
public boolean updatePayFail(BreakContractSettlementDriver item) {
return update(lUdWrapper()
.eq(BreakContractSettlementDriver::getId, item.getId())
.set(BreakContractSettlementDriver::getPayRemark, item.getPayRemark())
);
}
@Override
public Optional<BreakContractSettlementDriver> selectBySettlementNo(String settlementNo) {
return Optional.of(settlementNo)
......@@ -47,4 +68,12 @@ public class BreakContractSettlementDriverDaoImpl extends BaseDaoImpl<BreakContr
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
@Override
public List<BreakContractSettlementDriver> listUnpay(LocalDateTime beginTime) {
return list(lQrWrapper()
.eq(BreakContractSettlementDriver::getSettleStatus, BreakContractSettlementDriverEnum.SettleStatus.NO.getCode())
.gt(BreakContractSettlementDriver::getCreateTime, beginTime)
);
}
}
package com.clx.performance.dao.impl.collect;
import com.clx.performance.dao.collect.CollectTruckDao;
import com.clx.performance.enums.OrderGoodsTruckBindEnum;
import com.clx.performance.mapper.collect.CollectTruckMapper;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.model.collect.CollectTruck;
import com.clx.performance.param.app.collect.CollectTruckParam;
import com.clx.performance.vo.app.collect.AppCollectTruckVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 车辆信息上报
......@@ -29,6 +36,7 @@ public class CollectTruckDaoImpl extends BaseDaoImpl<CollectTruckMapper, Collect
.set(CollectTruck::getDistanceLineMax, item.getDistanceLineMax())
.set(CollectTruck::getDistanceSendAddressMax, item.getDistanceSendAddressMax())
.set(CollectTruck::getGoodsType, item.getGoodsType())
);
}
......@@ -41,4 +49,9 @@ public class CollectTruckDaoImpl extends BaseDaoImpl<CollectTruckMapper, Collect
)
.map(super::getOne);
}
@Override
public List<CollectTruck> listCollectTruck(List<String> truckNos) {
return baseMapper.selectList(lQrWrapper().in(CollectTruck::getTruckNo,truckNos));
}
}
......@@ -7,6 +7,7 @@ import com.clx.performance.dao.settle.SettlementDriverDao;
import com.clx.performance.mapper.settle.SettlementDriverMapper;
import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
......@@ -47,4 +48,13 @@ public class SettlementDriverDaoImpl extends BaseDaoImpl<SettlementDriverMapper,
query.orderByDesc(SettlementDriver :: getCreateTime);
return baseMapper.selectPage(Page.of(param.getPage(),param.getPageSize()),query);
}
@Override
public Optional<SettlementDriver> getByChildNo(String childNo) {
return Optional.of(childNo)
.map(item -> lQrWrapper()
.eq(SettlementDriver::getChildNo, item)
)
.map(super::getOne);
}
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.SettlementDriverMapper;
import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
/**
......@@ -14,4 +15,7 @@ import com.msl.common.dao.BaseDao;
*/
public interface SettlementDriverDao extends BaseDao<SettlementDriverMapper, SettlementDriver, Integer> {
IPage<SettlementDriver> pageCarrierSettlementDriver(PageCarrierSettlementDriverParam param);
Optional<SettlementDriver> getByChildNo(String childNo);
}
package com.clx.performance.dto.payment;
import com.fasterxml.jackson.annotation.JsonGetter;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
/**
*
* @author 胡宁宁
* @date 2023年11月12日
* @description
*/
public class WalletResidueCardDTO extends WalletResidueDTO{
@ApiModelProperty(value = "消费卡余额", dataType = "double", example = "11.10")
private Long cardResidue;
@ApiModelProperty(value = "消费卡总数", dataType = "int", example = "1")
private Integer cardSum;
@ApiModelProperty(value = "昨天收益", dataType = "double", example = "11.10")
private BigDecimal yesterdayIncome;
@ApiModelProperty(value = "今日收益", dataType = "double", example = "11.10")
private BigDecimal todayIncome;
@ApiModelProperty(value = "本月收益", dataType = "double", example = "11.10")
private BigDecimal monthIncome;
@ApiModelProperty(value = "消费卡冻结余额", dataType = "double", example = "11.10")
private Long cardFrozen;
@ApiModelProperty(value = "绑定的银行卡数量", dataType = "int", example = "0")
private int cardCount;
@ApiModelProperty(value = "总资产", dataType = "double", example = "0.00")
private BigDecimal assetSum = BigDecimal.ZERO;
public BigDecimal getAssetSum() {
return assetSum;
}
public void setAssetSum(BigDecimal assetSum) {
this.assetSum = assetSum;
}
public int getCardCount() { return cardCount; }
public void setCardCount(int cardCount) { this.cardCount = cardCount; }
@JsonGetter(value="cardResidue")
public Double cardResidueFormat() {
if(cardResidue == null ) return 0D;
return new Double(this.cardResidue)/100;
}
@JsonGetter(value="cardFrozen")
public Double cardFrozenFormat() {
if(cardFrozen == null ) return 0D;
return new Double(this.cardFrozen)/100;
}
public Long getCardResidue() {
return cardResidue;
}
public void setCardResidue(Long cardResidue) {
this.cardResidue = cardResidue;
}
public Integer getCardSum() {
return cardSum;
}
public void setCardSum(Integer cardSum) {
this.cardSum = cardSum;
}
public BigDecimal getYesterdayIncome() {
return yesterdayIncome;
}
public void setYesterdayIncome(BigDecimal yesterdayIncome) {
this.yesterdayIncome = yesterdayIncome;
}
public BigDecimal getMonthIncome() {
return monthIncome;
}
public void setMonthIncome(BigDecimal monthIncome) {
this.monthIncome = monthIncome;
}
public BigDecimal getTodayIncome() {
return todayIncome;
}
public void setTodayIncome(BigDecimal todayIncome) {
this.todayIncome = todayIncome;
}
public Long getCardFrozen() {
return cardFrozen;
}
public void setCardFrozen(Long cardFrozen) {
this.cardFrozen = cardFrozen;
}
}
package com.clx.performance.dto.payment;
import com.fasterxml.jackson.annotation.JsonGetter;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
/**
*
* @author 胡宁宁
* @date 2023年11月12日
* @description
*/
public class WalletResidueDTO {
//余额
@ApiModelProperty(value = "余额", dataType = "double", example = "11.10")
private Long residue;
//冻结的资金
@ApiModelProperty(value = "冻结的资金", dataType = "double", example = "11.10")
private Long frozen;
//保证金
@ApiModelProperty(value = "保证金", dataType = "double", example = "11.10")
private Double deposit;
//状态0锁定1正常2异常
@ApiModelProperty(value = "状态0锁定1正常2异常", dataType = "int", example = "1")
private Integer status;
//是否设置交易密码0没有1有
@ApiModelProperty(value = "是否设置交易密码0没有1有", dataType = "String", example = "1")
private String pwd;
public Long getResidue() {
return residue;
}
public void setResidue(Long residue) {
this.residue = residue;
}
public Long getFrozen() {
return frozen;
}
public void setFrozen(Long frozen) {
this.frozen = frozen;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@JsonGetter(value="frozen")
public BigDecimal frozenFormat() {
return new BigDecimal(new Double(this.frozen)/100);
}
@JsonGetter(value="residue")
public Double residueFormat() {
return new Double(this.residue)/100;
}
@JsonGetter(value="deposit")
public Double depositFormat() {
return new Double(this.deposit)/100;
}
public Double getDeposit() {
return deposit;
}
public void setDeposit(Double deposit) {
this.deposit = deposit;
}
@Override
public String toString() {
return "WalletDTO [residue=" + residue + ", frozen=" + frozen
+ ", status=" + status + "]";
}
}
package com.clx.performance.feign;
import com.clx.performance.dto.payment.WalletResidueCardDTO;
import com.clx.user.param.thirdparty.payment.CarrierWalletSaveDTO;
import com.msl.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotNull;
@FeignClient(name = "payment-service")
@RequestMapping(value = "/payment-service")
public interface FeignPaymentService {
/**
* 获取钱包信息
* @param wallet
* @return
*/
@GetMapping(value = "/walletCard/getWallet")
Result<WalletResidueCardDTO> getWallet(@RequestParam("userCode") @NotNull(message = "用户钱包地址编号不可为空")Integer userCode);
}
package com.clx.performance.feign;
import com.clx.performance.interceptor.FeignInterceptor;
import com.msl.common.result.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "user-service", configuration = {FeignInterceptor.class})
@RequestMapping(value = "/user-service/feign/carrier/driver/user")
public interface FeignUserService {
/**
* 调用支付FeignAuth
* @return
*/
@GetMapping(value = "/getPaymentServiceAuth")
Result<String> getPaymentServiceAuth();
}
package com.clx.performance.interceptor;
import com.clx.performance.feign.FeignUserService;
import com.msl.common.result.Result;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import java.util.Objects;
/**
* @describe: 重写 feign调用的鉴权码
*/
@Configuration
@Slf4j
public class FeignConfiguration implements RequestInterceptor {
@Autowired
private FeignUserService feignUserService;
@Override
public void apply(RequestTemplate requestTemplate) {
String url = requestTemplate.url();
if (StringUtils.isBlank(url)){
return;
}
if (url.startsWith("payment-service") || url.startsWith("/payment-service")) {
Result<String> paymentServiceAuth = feignUserService.getPaymentServiceAuth();
log.info("====feign服务调用,请求头信息重写=====feignAuth={}", paymentServiceAuth);
if(paymentServiceAuth != null && Objects.equals(paymentServiceAuth.getCode(),0) && paymentServiceAuth.getData() !=null){
requestTemplate.header("feignAuth", paymentServiceAuth.getData());
}
}
}
}
package com.clx.performance.interceptor;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.beans.factory.annotation.Value;
public class FeignInterceptor implements RequestInterceptor {
@Value("${spring.application.name}")
private String serviceName;
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("feignAuth", "6265696a696e676368656e676c69616e");
requestTemplate.header("feignService", serviceName);
}
}
\ No newline at end of file
package com.clx.performance.job;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.service.breakcontract.BreakContractJobHandlerService;
import com.clx.performance.utils.JobHandlerService;
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 BreakContractSettlementJob {
@Autowired
private JobHandlerService jobHandlerService;
@Autowired
private BreakContractSettlementDriverDao breakContractSettlementDriverDao;
@Autowired
private BreakContractJobHandlerService breakContractJobHandlerService;
/**
* 违约结算单支付 (每10分钟)
* @Scheduled(cron = "0 0/10 * * * ?")
*/
@XxlJob("breakContractSettlementPay")
public void breakContractSettlementPay() {
LocalDateTime beginTime = LocalDateTime.now().minusHours(1);
jobHandlerService.handler("违约结算单-支付", ()->{
List<BreakContractSettlementDriver> list = breakContractSettlementDriverDao.listUnpay(beginTime);
log.info("违约结算单支付,数量:{}", list.size());
for (BreakContractSettlementDriver item : list) {
jobHandlerService.subHandler("违约结算单-支付", item.getId(), breakContractJobHandlerService::pay);
}
});
}
}
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 org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Component
public class OwnerBreakContractSettlementJob {
@Autowired
private BreakContractOwnerRecordService breakContractOwnerRecordService;
@Autowired
private BreakContractOwnerRecordDao breakContractOwnerRecordDao;
/**
* 如果货主2天都未确认,系统自动确认
*/
@XxlJob("autoConfirmOwnerBreakSettle")
@Transactional(rollbackFor = Exception.class)
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);
}
}
}
......@@ -9,13 +9,12 @@ import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.config.MslAppConfig;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.dts.DataTransportDTO;
import com.clx.performance.enums.DtsOperationTypeEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.msl.common.result.Result;
import com.msl.common.utils.DtsMapConvertUtil;
import lombok.AllArgsConstructor;
......@@ -25,11 +24,6 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
......@@ -43,10 +37,12 @@ public class OrderChildDtsListener {
@Autowired
private OrderFeign orderFeign;
@Autowired
private OrderGoodsDao orderGoodsDao;
LastTruckService lastTruckService;
@Autowired
private OrderChildDao orderChildDao;
OrderChildStruct orderChildStruct;
@RabbitListener(queues = RabbitKeyConstants.CLX_PERFORMANCE_ORDER_CHILD_QUEUE)
public void onMessage(Message message) {
......@@ -96,22 +92,22 @@ public class OrderChildDtsListener {
after.setStatus(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode());
}
after.setLastFlag(ResultStatusEnum.NO.getCode());
long nowTimeMillis = System.currentTimeMillis();
LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();
//如果当前货单已完成,则判断之前所有货单是否等于订单总吨数,等于则更新订单为已完成
List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNoAndLastArriveSendTime(after.getOrderNo(), nowDateTime);
BigDecimal childSum = list.stream().map(OrderGoods::getExtractWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
log.info("算出所有货单总量:{}, 订单总吨数:{}", childSum, orderInfoFeign.getTransportWeight());
if (childSum.compareTo(orderInfoFeign.getTransportWeight()) == 0) {
// 按照时间 倒序查出最后一条进行中的运单
OrderChild orderChild = orderChildDao.getGoingLatestOrderChildByOrderNo(after.getOrderNo());
if(Objects.nonNull(orderChild) && orderChild.getChildNo().equals(after.getChildNo())){
after.setLastFlag(ResultStatusEnum.YES.getCode());
}
}
OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result<?> result = client.encryptPost(JSON.toJSONString(after),after.topic());
log.info("运单信息同步,运单编号:{},响应结果:{}",after.getChildNo(),JSON.toJSONString(result));
//当运单状态为到达目的地时候,需要判断最后一车的逻辑
if(Objects.equals(after.getStatus(),OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())){
OrderChild child = lastTruckService.getLastTruckChild(after.getOrderNo());
if(Objects.nonNull(child)){
log.info("开始同步最后一车的运单,运单编号:{}",child.getChildNo());
OrderChildMessage message = orderChildStruct.convertMessage(child);
message.setLastFlag(ResultStatusEnum.YES.getCode());
OpenCallBackClient client2 = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result<?> result2 = client2.encryptPost(JSON.toJSONString(after),after.topic());
log.info("结束同步最后一车的运单,运单编号:{},响应结果:{}",child.getChildNo(),JSON.toJSONString(result2));
}
}
}
}
......
......@@ -49,6 +49,10 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
int countValidByOrderGoodsNo(String orderGoodsNo);
@UpdateProvider(type = OrderChildSqlProvider.class, method = "batchUpdateOrderChildStatus")
Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "remark") String remark, @Param(value = "ids") List<Integer> ids);
@UpdateProvider(type = OrderChildSqlProvider.class, method = "listAfterArrayReceiveChild")
BigDecimal listAfterArrayReceiveChild(@Param(value = "orderNo")String orderNo);
Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "ids") List<Integer> ids);
@Select("select AVG((load_net-unload_net)/load_net) from order_child " +
......@@ -78,5 +82,5 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
OrderChildVO findArtificialCancelOrder(@Param("orderChildNo") String orderChildNo);
@SelectProvider(type = OrderChildSqlProvider.class, method = "orderChildCancelRecord")
IPage<OrderChildVO> orderChildCancelRecord(@Param("page")Page<OrderGoodsVO> page, OrderChildCancelRecordParam param);
IPage<OrderChildVO> orderChildCancelRecord(@Param("page")Page<OrderChildVO> page, @Param(value = "param") OrderChildCancelRecordParam param);
}
\ No newline at end of file
......@@ -76,10 +76,9 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@UpdateProvider(type = OrderGoodsSqlProvider.class, method = "updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus")
Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value = "residueWeight") BigDecimal residueWeight,@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value = "status") Integer status,@Param(value = "id") Integer id);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getCancelOrderGoods")
List<OrderGoodsAPPVO> getCancelOrderGoods(@Param(value = "param") List<String> param);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getAlreadyTransportWeight")
BigDecimal getAlreadyTransportWeight(@Param("orderNo") String orderNo);
List<OrderGoodsAPPVO> getCancelOrderGoods(@Param(value = "param") List<String> param);
@Select("select sum(already_transport_weight) from order_goods where order_no=#{orderNo}")
BigDecimal sumAlreadyTransportWeightByOrderNo(@Param("orderNo")String orderNo);
......
......@@ -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;
......
......@@ -79,6 +79,10 @@ public class BreakContractSettlementDriver implements HasKey<Integer> {
@ApiModelProperty("结算时间")
private LocalDateTime settleTime;
@TableField("pay_remark")
@ApiModelProperty("支付备注")
private String payRemark;
@TableField("create_by")
@ApiModelProperty("操作人编号")
private Long createBy;
......
......@@ -45,6 +45,7 @@ public class SettlementDriver implements HasKey<Integer> {
private BigDecimal settlementFreight; //结算金额(分)
private Integer invoiceType; //开票标识:1网运单 2普通单
private String settlementPlatform; //结算平台
private String payErrorMsg; //支付失败原因
private Integer status; //状态
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
......
......@@ -18,6 +18,6 @@ public interface IntegralMqService {
void truckProtectionCancel(String statisticsDate, String truckNo);
void orderChildFinish(String childNo);
void orderChildFinish(String childNo, Integer type);
}
......@@ -9,7 +9,7 @@ public interface OrderChildMqService {
void orderChildDriverConfirm(String childNo);
void orderChildLoad(String childNo);
void orderChildUnLoad(String childNo);
void orderChildUnload(String childNo);
void orderChildCancel(String childNo, Integer status, Integer opUserType, Long opUserNo, String opUserName);
......
......@@ -78,7 +78,5 @@ public interface OrderChildService {
*/
List<OrderChild> selectInTransitOrderChild(String orderNo);
void orderChildFinish(String childNo);
DriverCancelOrderChildInfo driverCancelOrderChildInfo(String orderChildNo);
}
......@@ -7,4 +7,6 @@ import com.msl.common.result.Result;
public interface PaymentService {
Result paymentWallet( PayParam noCheckPwd);
Result paymentBreakContractWallet( PayParam noCheckPwd);
}
......@@ -5,8 +5,10 @@ import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.param.pc.OrderGoodsTruckListParam;
import com.clx.performance.param.pc.PageTruckListParam;
import com.clx.performance.param.pc.PageVicinityTruckListParam;
import com.clx.performance.param.pc.TruckTraceParam;
import com.clx.performance.vo.pc.OrderGoodsTruckListVO;
import com.clx.performance.vo.pc.PageTruckListVO;
import com.clx.performance.vo.pc.TruckTraceVO;
import com.msl.common.base.PageData;
import java.util.List;
......@@ -33,4 +35,6 @@ public interface TruckService {
List<TruckCoordinateDTO> getAllTruckCoordinate();
List<OrderGoodsTruckListVO> getOrderGoodsTruckList(OrderGoodsTruckListParam param);
List<TruckTraceVO> getTruckTrace(TruckTraceParam param);
}
......@@ -25,7 +25,7 @@ public interface BreakContractDriverRecordService {
void saveDriverRecordOfOrderChildCancel(OrderChild orderChild, Long createBy, String createName);
void saveDriverRecordOfArriveSendAddress(OrderChild orderChild, Long createBy, String createName);
void saveDriverRecordOfArriveSendAddressTimeout(OrderChild orderChild, Long createBy, String createName);
void saveDriverRecordOfArriveReceiveAddress(OrderChild orderChild, Long createBy, String createName);
......
package com.clx.performance.service.breakcontract;
public interface BreakContractJobHandlerService {
void pay(Integer settlementId);
}
......@@ -9,4 +9,8 @@ public interface BreakContractMqHandlerService {
void driverRecordAdd(BreakContractDriverRecordAddMqParam mq);
void paySuccess(String settlementNo);
void payFail(String settlementNo, String remark);
}
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);
}
package com.clx.performance.service.child;
import com.clx.performance.model.OrderChild;
public interface OrderChildPostService {
void orderChildArriveReceiveAddress(OrderChild orderChild);
void orderChildDriverConfirm(OrderChild orderChild);
void orderChildCancelByDriver(OrderChild orderChild, Integer opUserType, Long opUserNo, String opUserName);
void orderChildCancelByCarrier(OrderChild orderChild, Integer opUserType, Long opUserNo, String opUserName);
void orderChildCancelByArtificial(String childNo);
void arriveSendAddressTimeoutCancel(OrderChild orderChild);
void orderCancel(String childNo);
void orderGoodsCancel(String childNo);
void orderChildFinish(String childNo);
}
package com.clx.performance.service.collect;
import com.clx.performance.model.collect.CollectTruck;
import com.clx.performance.param.app.collect.*;
import com.clx.performance.vo.app.collect.AppCollectTruckVO;
import com.msl.common.result.Result;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
public interface CollectTruckService {
......@@ -15,5 +22,6 @@ public interface CollectTruckService {
void updateGoodsType(CollectTruckReportGoodsTypeUpdateParam param);
AppCollectTruckVO getReportInfo(String truckNo);
List<AppCollectTruckVO> listCollectTruck(CollectTruckParam param);
}
......@@ -144,10 +144,11 @@ public class IntegralMqServiceImpl implements IntegralMqService {
* 运单结束 (performance)
*/
@Override
public void orderChildFinish(String childNo){
public void orderChildFinish(String childNo, Integer type){
IntegralOrderChildFinishMqParam mq = new IntegralOrderChildFinishMqParam();
mq.setChildNo(childNo);
mq.setType(type);
MqDelay<MqWrapper<IntegralOrderChildFinishMqParam>> delay = new MqDelay<>(RabbitKeyIntegralConstants.DEFAULT_EXCHANGE, RabbitKeyIntegralConstants.INTEGRAL_ORDER_CHILD_FINISH_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
......
......@@ -159,7 +159,11 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
@Override
public IPage<IntegralTruckVO> driverPageTruckRank(DriverPageIntegralTruckRankParam param) {
String time = LocalDateTimeUtils.formatTime(LocalDateTimeUtils.getStartWeek().minusDays(7));
// String time = LocalDateTimeUtils.formatTime(LocalDateTimeUtils.getStartWeek().minusDays(7));
// 临时查本周排名
String time = LocalDateTimeUtils.formatTime(LocalDateTimeUtils.getStartWeek());
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
......@@ -200,6 +204,8 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
IntegralRecordEnum.Type.PROTECTION_CANCEL.getValue(),
IntegralRecordEnum.Type.SETTLEMENT.getValue(),
IntegralRecordEnum.Type.BASE.getValue(),
IntegralRecordEnum.Type.ORDER_CHILD_PLATFORM_CANCEL.getValue(),
IntegralRecordEnum.Type.ORDER_CHILD_PLATFORM_COMPENSATION.getValue()
);
......@@ -207,8 +213,8 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
IntegralRecordEnum.Type.ORDER_CHILD_CANCEL.getValue()
);
List<Integer> orderChildTimeoutTypeList = Arrays.asList(
IntegralRecordEnum.Type.ORDER_CHILD_COMPLETE_TIMEOUT.getValue(),
IntegralRecordEnum.Type.ORDER_CHILD_CANCEL_TIMEOUT.getValue()
IntegralRecordEnum.Type.ORDER_CHILD_ARRIVE_RECEIVE_ADDRESS_TIMEOUT.getValue(),
IntegralRecordEnum.Type.ORDER_CHILD_ARRIVE_SEND_ADDRESS_TIMEOUT_CANCEL.getValue()
);
List<Integer> reportTypeList = Arrays.asList(
IntegralRecordEnum.Type.REPORT_TRUCK_INFO.getValue(),
......@@ -219,7 +225,8 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_WAIT.getValue(),
IntegralRecordEnum.Type.REPORT_RECEIVE_ADDRESS_NO_WAIT.getValue(),
IntegralRecordEnum.Type.REPORT_QUALITY.getValue(),
IntegralRecordEnum.Type.REPORT_ABNORMAL.getValue()
IntegralRecordEnum.Type.REPORT_ABNORMAL.getValue(),
IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_INFO.getValue()
);
for (Map.Entry<String, List<IntegralRecord>> entry : map.entrySet()) {
Integer orderChildCompleteIntegral = 0;
......
package com.clx.performance.service.impl;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService;
import com.clx.user.enums.SyncPlatformEnum;
import com.msl.common.exception.ServiceSystemException;
import groovy.util.logging.Slf4j;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
......@@ -32,7 +26,6 @@ public class LastTruckServiceImpl implements LastTruckService {
private final OrderFeign orderFeign;
private final OrderChildDao orderChildDao;
private final OrderGoodsDao orderGoodsDao;
/**
* @Author kavin
* @Description 判断最后一车的逻辑
......@@ -41,26 +34,20 @@ public class LastTruckServiceImpl implements LastTruckService {
**/
@Override
public OrderChild getLastTruckChild(String orderNo) {
//判断订单是否已经完结
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfo)){
log.error("计算最后一车,通过订单号:{},未查询到对应的订单",orderNo);
return null;
}
if(!Objects.equals(orderInfo.getOrderSource(), SyncPlatformEnum.TRADE_PLATFORM.getCode())){
return null;
}
//已完结直接按照时间顺序查找最后一个运单
if(Objects.equals(orderInfo.getOrderStatus(), OrderEnum.Status.COMPLETED.getCode()) ||
Objects.equals(orderInfo.getOrderStatus(), OrderEnum.Status.SUCCESS.getCode())
){
return orderChildDao.findLastTruckChild(orderNo);
}else{ //未完结,判断所有货单的已拉运的吨数是否等于 订单的拉运吨数-向下浮动量
BigDecimal alreadyTransprotWeight = orderGoodsDao.getAlreadyTransportWeight(orderNo);
//查询所有货单的已拉运吨数 + 向下浮动量 >= 订单的承运吨数 (满足此情况查找最后一单)
if(Objects.nonNull(alreadyTransprotWeight) &&
alreadyTransprotWeight.add(new BigDecimal(orderInfo.getDownFloatWeight())).compareTo(orderInfo.getTransportWeight()) >= 0){
return orderChildDao.findLastTruckChild(orderNo);
}
BigDecimal weight = orderChildDao.listAfterArrayReceiveChild(orderNo);
//判断当前订单下所有到达目的地之后的运单的装车吨数 + 向下浮动量 >= 订单拉运吨数
log.info("订单号:{} ,计算是否到达可计算最后一车标准,运单累计拉运吨数:{}, 向下浮动量:{},订单拉运吨数:{}",
orderNo,weight,orderInfo.getDownFloatWeight(),orderInfo.getTransportWeight());
if(Objects.nonNull(weight) && weight.add(new BigDecimal(orderInfo.getDownFloatWeight())).compareTo(orderInfo.getTransportWeight()) >= 0){
//查询最后一车的运单
OrderChild child = orderChildDao.getLastTruckChild(orderNo);
log.info("当前订单计算出最后一车,运单编号:{} ", child.getChildNo());
return child;
}
return null;
}
......
......@@ -13,7 +13,6 @@ import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild;
......@@ -25,11 +24,9 @@ import com.clx.performance.service.OrderCancelService;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.breakcontract.BreakContractSettlementOwnerService;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.vo.app.OrderChildVO;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.msl.common.base.PageParam;
import com.msl.common.enums.ResultEnum;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
......@@ -77,6 +74,8 @@ public class OrderCancelServiceImpl implements OrderCancelService {
private final OrderChildLogService orderChildLogService;
private final OrderChildPostService orderChildPostService;
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -703,6 +702,9 @@ public class OrderCancelServiceImpl implements OrderCancelService {
goodsOrderTruckRecordComponent.releaseDriverCard(orderChild.getOrderGoodsNo(), orderChild.getTruckNo());
driverService.updateOrderStatus(orderChild.getDriverUserNo(), DriverInfoEnum.DriverStatus.NO.getCode(), orderChild.getTruckId(), 1);
// 运单取消
orderChildPostService.orderChildCancelByArtificial(orderChildNo);
orderChildLogService.saveOrderChildLog(orderChild.getChildNo(),
OrderChildEnum.Status.ARTIFICIAL_CANCEL.getCode(), OrderChildEnum.Status.ARTIFICIAL_CANCEL.getName(),
OrderChildLogEnum.CreateType.ARTIFICIAL.getCode(), 0L, OrderChildLogEnum.CreateType.ARTIFICIAL.getMsg()
......
......@@ -77,6 +77,7 @@ public class OrderChildMqServiceImpl implements OrderChildMqService {
public void orderChildLoad(String childNo) {
OrderChildLoadMqParam mq = new OrderChildLoadMqParam();
mq.setChildNo(childNo);
mq.setRepeatStatus(0);
MqDelay<MqWrapper<OrderChildLoadMqParam>> delay = new MqDelay<>(RabbitKeyOrderChildConstants.DEFAULT_EXCHANGE, RabbitKeyOrderChildConstants.ORDER_CHILD_LOAD_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
......@@ -85,9 +86,10 @@ public class OrderChildMqServiceImpl implements OrderChildMqService {
}
@Override
public void orderChildUnLoad(String childNo) {
public void orderChildUnload(String childNo) {
OrderChildUnloadMqParam mq = new OrderChildUnloadMqParam();
mq.setChildNo(childNo);
mq.setRepeatStatus(0);
MqDelay<MqWrapper<OrderChildUnloadMqParam>> delay = new MqDelay<>(RabbitKeyOrderChildConstants.DEFAULT_EXCHANGE, RabbitKeyOrderChildConstants.ORDER_CHILD_UNLOAD_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
......
......@@ -31,6 +31,7 @@ import com.clx.performance.param.pc.OrderGoodsCancelParam;
import com.clx.performance.param.pc.UpdateEditOrderGoodsParam;
import com.clx.performance.param.pc.UpdateOrderGoodsPriceParam;
import com.clx.performance.service.*;
import com.clx.performance.service.child.OrderChildPostService;
import com.clx.performance.struct.OrderGoodsStruct;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
......@@ -51,7 +52,6 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestParam;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -104,6 +104,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
private final OrderChildLogService orderChildLogService;
private final OrderChildPostService orderChildPostService;
@Override
public OrderGoodsVO getOrderGoodsInfoByOrderGoodsNoForPC(String orderGoodsNo) {
OrderGoodsVO orderGoodsVO = orderGoodsDao.getOrderGoodsInfoByOrderGoodsNoForPC(orderGoodsNo).map(orderGoodsStruct::convert).get();
......@@ -557,7 +559,7 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
}
}
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, orderGoodsStatus);
orderGoodsTruckBindDao.updateOrderGoodsBindStatus(orderGoodsNo, OrderGoodsTruckBindEnum.Status.CANCEL.getCode());
log.info("取消货单,参数:{}", JSONUtil.parse(param));
if (orderFeign.rollbackOrderWeight(param).succeed()) {
......@@ -629,7 +631,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
orderFeign.orderCancelReason(orderCancelReasonParam);
for (String childNo : childNoList) {
integralMqService.orderChildFinish(childNo);
// 货单取消
orderChildPostService.orderGoodsCancel(childNo);
}
orderGoodsLogService.saveLog(orderGoodsNo, loginUserInfo.getUserNo(), loginUserInfo.getUserName(), OrderGoodsLogsEnum.Type.CANCEL.getName(), "");
......
package com.clx.performance.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
......@@ -51,10 +52,14 @@ public class OrderGoodsTruckBindServiceImpl implements OrderGoodsTruckBindServic
if (!result.succeed() || CollectionUtil.isEmpty(result.getData())) {
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
log.info("truckFeign.driverTruckList:{}", JSONUtil.parse(result.getData()));
List<String> truckList = result.getData().stream().map(DriverTruckAppVo::getTruckNo).collect(Collectors.toList());
log.info("过滤后的truckList:{}", JSONUtil.parse(truckList));
LocalDateTime now = LocalDateTime.now();
if (CollectionUtils.isEmpty(truckList)) {
return null;
}
List<OrderGoodsTruckBind> list = orderGoodsTruckBindDao.getCancelOrderGoods(truckList,
DateUtils.formatDateTime(now.plusDays(-3), "yyyy-MM-dd HH:mm:ss").get(),
DateUtils.formatDateTime(now, "yyyy-MM-dd HH:mm:ss").get());
......
......@@ -26,6 +26,8 @@ import com.msl.common.utils.EncryptUtil;
import com.msl.common.utils.HttpUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
......@@ -46,6 +48,9 @@ public class PaymentServiceImpl implements PaymentService {
/** 转账回调地址 **/
public static final String NOTIFY_URL = "/clx-performance/payment/notify/userPayNotify";
/** 违约回调地址 **/
public static final String NOTIFY_BROKER_URL = "/clx-performance/payment/notify/userPayBrokerContractNotify";
@Autowired
private final MslPaymentConfig mslPaymentConfig;
......@@ -84,12 +89,53 @@ public class PaymentServiceImpl implements PaymentService {
.uuid(UUID.randomUUID().toString().replaceAll("-", ""))
.notifyUrl(mslPaymentConfig.getNotifyhost() + NOTIFY_URL)
.payUnitDTO(payUnitDTO).build();
log.info("发起支付请求日志 {}", JSON.toJSONString(payUserDTO));
Result<Object> notify = (Result<Object>) postRequest(mslPaymentConfig.getHost()+ PERFORMANCE_PAY_CLX_PAYMENT.getUrl(), JSON.toJSONString(payUserDTO));
log.info("支付返回日志 {}", notify);
if (notify == null || StringUtils.isNotBlank(notify.getMsg())) {
//FEGIN返回null
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, notify.getMsg());
}
return notify;
}
/**
* 钱包直接划账给钱包(违约)
*
* @param payDTO
* @return
*/
@Override
public Result paymentBreakContractWallet(PayParam payDTO) {
/** 构建支付单元 **/
PayUnitDTO payUnitDTO = PayUnitDTO.builder()
.id(payDTO.getTradeId())
.from(payDTO.getFrom())
.to(payDTO.getTo())
.figure(payDTO.getFigure())
.type(PayUnitTypeEnum.RESIDUE_PAY.getCode())
.timestamp(System.currentTimeMillis() / 1000)
.remark(payDTO.getRemark()).build();
/** 生成签名**/
PayEncryptTools.sign(payUnitDTO, PrivateKeyConfig.privateKeyByte);
/** 构建支付支付 ***/
PayUserDTO payUserDTO = PayUserDTO.builder()
.pwd(payDTO.getPwd())
.system(SystemCodeEnum.PERFORMANCE_SERVICE.getCode())
.userCode(payDTO.getFrom())
.orderNo(payDTO.getTradeNo())
.uuid(UUID.randomUUID().toString().replaceAll("-", ""))
.notifyUrl(mslPaymentConfig.getNotifyhost() + NOTIFY_BROKER_URL)
.payUnitDTO(payUnitDTO).build();
log.info("发起支付请求日志 {}", payUserDTO);
Result<Object> notify = (Result<Object>) postRequest(mslPaymentConfig.getHost()+ PERFORMANCE_PAY_CLX_PAYMENT.getUrl(), JSON.toJSONString(payUserDTO));
log.info("支付返回日志 {}", notify);
if (notify == null) {
if (notify == null || StringUtils.isNotBlank(notify.getMsg())) {
//FEGIN返回null
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "支付服务返回异常");
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, notify.getMsg());
}
return notify;
}
......
package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.clx.order.enums.ResultEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
......@@ -15,10 +14,13 @@ import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.param.pc.OrderGoodsTruckListParam;
import com.clx.performance.param.pc.PageTruckListParam;
import com.clx.performance.param.pc.PageVicinityTruckListParam;
import com.clx.performance.param.pc.TruckTraceParam;
import com.clx.performance.service.TruckService;
import com.clx.performance.utils.RedisGeoUntil;
import com.clx.performance.utils.zjxl.ZjxlGpsService;
import com.clx.performance.vo.pc.OrderGoodsTruckListVO;
import com.clx.performance.vo.pc.PageTruckListVO;
import com.clx.performance.vo.pc.TruckTraceVO;
import com.clx.user.feign.UserClxFeign;
import com.clx.user.vo.feign.TruckUseStatusVO;
import com.msl.common.base.PageData;
......@@ -73,6 +75,9 @@ public class TruckServiceImpl implements TruckService {
@Autowired
OrderGoodsTruckBindDao orderGoodsTruckBindDao;
@Autowired
ZjxlGpsService zjxlGpsService;
/**
......@@ -357,4 +362,22 @@ public class TruckServiceImpl implements TruckService {
result.stream().forEach(item->{ item.setMaxDistance(truckDistanceMap.get(item.getTruckNo()));});
return result;
}
@Override
public List<TruckTraceVO> getTruckTrace(TruckTraceParam param) {
List<TruckTraceDTO> truckTrace = zjxlGpsService.getTruckTrace(param.getTruckNo(), param.getBeginTime(),
param.getEndTime());
List<TruckTraceVO> result = new ArrayList<>();
if(CollectionUtils.isNotEmpty(truckTrace)){
for (TruckTraceDTO item : truckTrace) {
TruckTraceVO vo = TruckTraceVO.builder().truckNo(
item.getTruckNo()).longitude(item.getLocation()[0]).latitude(item.getLocation()[1])
.angle(item.getAngle()).speed(item.getSpeed()).gpsTime(item.getGpsTime())
.height(item.getHeight()).mileage(item.getMileage()).createTime(item.getCreateTime())
.modifiedTime(item.getCreateTime()).build();
result.add(vo);
}
}
return result;
}
}
......@@ -166,24 +166,25 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
}
@Override
public void saveDriverRecordOfArriveSendAddress(OrderChild orderChild, Long createBy, String createName) {
public void saveDriverRecordOfArriveSendAddressTimeout(OrderChild orderChild, Long createBy, String createName) {
BreakContractDriverRecord record = new BreakContractDriverRecord();
// 1小时内不违约
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if (!orderChild.getArriveSendTime().isAfter(orderGoods.getLastArriveSendTime())) {return;}
if (!orderChild.getPayTime().plusHours(1).isBefore(orderGoods.getLastArriveReceiveTime())){return;}
BreakContractDriverRule rule = breakContractDriverRuleDao.getEntityByKey(1).orNull();
if (rule == null) {return;}
BreakContractDriverRuleVO breakContractDriverRuleVO = JSON.parseObject(rule.getRuleJson(), BreakContractDriverRuleVO.class);
// 费用计算
BigDecimal figure = arriveSendAddressFigureCalc(orderChild, orderGoods, breakContractDriverRuleVO);
BreakContractDriverRecord record = new BreakContractDriverRecord();
BigDecimal figure = orderChildArriveSendAddressTimeoutFigureCalc(orderChild, orderGoods, breakContractDriverRuleVO);
record.setTriggerType(BreakContractRecordEnum.TriggerType.SYSTEM.getCode());
record.setBreakContractPartyType(BreakContractRecordEnum.BreakContractPartyType.DRIVER.getCode());
record.setBreakNo(breakNoGenerate());
record.setFigure(figure);
record.setRemark("到达货源地超时");
record.setRemark("到达货源地超时取消");
record.setChildNo(orderChild.getChildNo());
record.setTruckNo(orderChild.getTruckNo());
......@@ -268,15 +269,19 @@ public class BreakContractDriverRecordServiceImpl implements BreakContractDrive
}
/**
* 费用计算 (到达货源地超时
* 费用计算 (运单取消
*/
private BigDecimal arriveSendAddressFigureCalc(OrderChild orderChild, OrderGoods orderGoods, BreakContractDriverRuleVO rule){
long time = com.clx.performance.utils.LocalDateTimeUtils.betweenSecond(orderGoods.getLastArriveSendTime(), orderChild.getArriveSendTime());
private BigDecimal orderChildArriveSendAddressTimeoutFigureCalc(OrderChild orderChild, OrderGoods orderGoods, BreakContractDriverRuleVO rule){
long time = com.clx.performance.utils.LocalDateTimeUtils.betweenSecond(orderChild.getPayTime(), orderGoods.getLastArriveSendTime());
long baseTime = 3600;
time = time-baseTime;
BigDecimal money = BigDecimal.valueOf(time).divide(BigDecimal.valueOf(3600), 2, RoundingMode.HALF_UP).multiply(rule.getSendAddressRule().getFigurePerHour()).setScale(2, RoundingMode.HALF_UP);
return money.movePointRight(2);
}
/**
* 费用计算 (到达目的地超时)
*/
......
package com.clx.performance.service.impl.breakcontract;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.service.breakcontract.BreakContractJobHandlerService;
import com.clx.performance.service.payment.PayService;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Objects;
@Slf4j
@Service
public class BreakContractJobHandlerServiceImpl implements BreakContractJobHandlerService {
@Autowired
private BreakContractSettlementDriverDao breakContractSettlementDriverDao;
@Autowired
private PayService payService;
@Transactional(rollbackFor = Exception.class)
@Override
public void pay(Integer settlementId){
BreakContractSettlementDriver breakContractSettlementDriver = breakContractSettlementDriverDao.getEntityByKey(settlementId).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(breakContractSettlementDriver.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.YES)){
return;
}
try {
pay(breakContractSettlementDriver);
}catch (ServiceSystemException e){
breakContractSettlementDriver.setPayRemark(e.getMessage());
breakContractSettlementDriverDao.updatePayFail(breakContractSettlementDriver);
}
}
/**
* 支付
*/
private void pay(BreakContractSettlementDriver settlement){
// 车主
if (Objects.equals(settlement.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.DRIVER.getCode())){
payService.driverPay(settlement.getSettlementNo(), settlement.getTruckOwnUserNo(), settlement.getFigure().intValue());
}
// 平台
else if (Objects.equals(settlement.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.PLATFORM.getCode())) {
payService.payDriver(settlement.getSettlementNo(), settlement.getTruckOwnUserNo(), settlement.getFigure().intValue());
}
}
}
......@@ -77,6 +77,7 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler
}
@Transactional(rollbackFor = Exception.class)
@Override
public void driverRecordAdd(BreakContractDriverRecordAddMqParam mq) {
BreakContractDriverRecord record = breakContractDriverRecordDao.getEntityByKey(mq.getRecordId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
......@@ -113,7 +114,7 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler
settlement.setChildNo(detail.getChildNo());
settlement.setFigure(detail.getFigure());
settlement.setBreakContractRemark(detail.getBreakContractRemark());
settlement.setSettleStatus(BreakContractSettlementDriverEnum.SettleStatus.YES.getCode());
settlement.setSettleStatus(BreakContractSettlementDriverEnum.SettleStatus.NO.getCode());
settlement.setCreateBy(detail.getCreateBy());
settlement.setCreateName(detail.getCreateName());
settlement.setSettlePlatform(BreakContractSettlementDriverEnum.SettlePlatform.MSL.getCode());
......@@ -124,9 +125,6 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler
breakContractSettlementDriverDao.saveEntity(settlement);
// 支付
pay(settlement);
//保存结算单日志----创建结算单
breakContractSettlementLogService.saveBreakSettlementLog(settlementNo,
BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getCode(),BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getMsg(),
......@@ -146,13 +144,48 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler
// 车主
if (Objects.equals(settlement.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.DRIVER.getCode())){
payService.driverPay(settlement.getSettlementNo(), settlement.getDriverUserNo(), settlement.getFigure().intValue());
payService.driverPay(settlement.getSettlementNo(), settlement.getTruckOwnUserNo(), settlement.getFigure().intValue());
}
// 平台
else if (Objects.equals(settlement.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.PLATFORM.getCode())) {
payService.payDriver(settlement.getSettlementNo(), settlement.getDriverUserNo(), settlement.getFigure().intValue());
payService.payDriver(settlement.getSettlementNo(), settlement.getTruckOwnUserNo(), settlement.getFigure().intValue());
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void paySuccess(String settlementNo){
log.info("违约结算单支付回调, settlementNo:{}", settlementNo);
BreakContractSettlementDriver breakContractSettlementDriver = breakContractSettlementDriverDao.selectBySettlementNo(settlementNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(breakContractSettlementDriver.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.YES.getCode())){
log.info("违约结算单支付回调, 结算单已支付, settlementNo:{}", settlementNo);
return;
}
breakContractSettlementDriver.setSettleStatus(BreakContractSettlementDriverEnum.SettleStatus.YES.getCode());
breakContractSettlementDriver.setSettleTime(LocalDateTime.now());
breakContractSettlementDriverDao.updateSettlementStatus(breakContractSettlementDriver);
//保存结算单日志
breakContractSettlementLogService.saveBreakSettlementLog(settlementNo,
BreakContractSettlementLogEnum.Type.COMPLETED.getCode(),BreakContractSettlementLogEnum.Type.COMPLETED.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),0L,"系统");
}
@Override
public void payFail(String settlementNo, String remark) {
log.info("违约结算单支付失败回调, settlementNo:{}, remark:{}", settlementNo, remark);
BreakContractSettlementDriver breakContractSettlementDriver = breakContractSettlementDriverDao.selectBySettlementNo(settlementNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(breakContractSettlementDriver.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.YES.getCode())){
log.info("违约结算单支付失败回调, 结算单已支付, settlementNo:{}", settlementNo);
return;
}
breakContractSettlementDriver.setPayRemark(remark);
breakContractSettlementDriverDao.updatePayFail(breakContractSettlementDriver);
}
}
......@@ -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,70 @@ 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) {
BreakContractOwnerRecord record = breakContractOwnerRecordDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(!Objects.equals(record.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);
//保存违约计费
breakOwner.setId(null);
breakOwner.setCreateTime(null);
breakOwner.setModifiedTime(null);
breakContractSettlementOwnerDao.saveEntity(breakOwner);
//保存违约结算单
breakOwnerDetail.setId(null);
breakOwnerDetail.setCreateTime(null);
breakOwnerDetail.setModifiedTime(null);
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());
}
}
package com.clx.performance.service.impl.child;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.UserTypeEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.param.mq.IntegralOrderChildFinishMqParam;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.OrderChildMqService;
import com.clx.performance.service.breakcontract.BreakContractDriverRecordService;
import com.clx.performance.service.child.OrderChildPostService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class OrderChildPostServiceImpl implements OrderChildPostService {
@Autowired
private IntegralMqService integralMqService;
@Autowired
private OrderChildMqService orderChildMqService;
@Autowired
private BreakContractDriverRecordService breakContractDriverRecordService;
@Override
public void orderChildArriveReceiveAddress(OrderChild orderChild) {
// 保存违约记录
breakContractDriverRecordService.saveDriverRecordOfArriveReceiveAddress(orderChild, 0L, "系统");
// 到达货源地 统计积分
integralMqService.orderChildFinish(orderChild.getChildNo(), IntegralOrderChildFinishMqParam.Type.ARRIVE_RECEIVE_ADDRESS_TIMEOUT.getCode());
// 发送mq (到达货源地)
orderChildMqService.orderChildArriveReceiveAddress(orderChild.getChildNo());
}
/**
* 司机确认收货
*/
@Override
public void orderChildDriverConfirm(OrderChild orderChild) {
// 司机确认收货 统计积分
integralMqService.orderChildFinish(orderChild.getChildNo(), IntegralOrderChildFinishMqParam.Type.DRIVER_CONFIRM.getCode());
orderChildFinish(orderChild.getChildNo());
// 发送mq 司机确认收货
orderChildMqService.orderChildDriverConfirm(orderChild.getChildNo());
}
/**
* 司机取消
*/
@Override
public void orderChildCancelByDriver(OrderChild orderChild, Integer opUserType, Long opUserNo, String opUserName){
// 司机取消 统计积分
integralMqService.orderChildFinish(orderChild.getChildNo(), IntegralOrderChildFinishMqParam.Type.DRIVER_CANCEL.getCode());
orderChildFinish(orderChild.getChildNo());
// 发送mq (运单取消)
orderChildMqService.orderChildCancel(orderChild.getChildNo(), orderChild.getStatus(), opUserType, opUserNo, opUserName);
}
/**
* 承运取消
*/
@Override
public void orderChildCancelByCarrier(OrderChild orderChild, Integer opUserType, Long opUserNo, String opUserName) {
// 承运取消 统计积分
integralMqService.orderChildFinish(orderChild.getChildNo(), IntegralOrderChildFinishMqParam.Type.CARRIER_CANCEL.getCode());
orderChildFinish(orderChild.getChildNo());
// 发送mq (运单取消)
orderChildMqService.orderChildCancel(orderChild.getChildNo(), orderChild.getStatus(), opUserType, opUserNo, opUserName);
}
/**
* 到达货源地超时取消
*/
@Override
public void arriveSendAddressTimeoutCancel(OrderChild orderChild){
// 保存违约记录
breakContractDriverRecordService.saveDriverRecordOfArriveSendAddressTimeout(orderChild, 0L, "系统");
// 到达货源地超时取消 统计积分
integralMqService.orderChildFinish(orderChild.getChildNo(), IntegralOrderChildFinishMqParam.Type.ARRIVE_SEND_ADDRESS_TIMEOUT_CANCEL.getCode());
orderChildFinish(orderChild.getChildNo());
// 发送mq (运单取消)
orderChildMqService.orderChildCancel(orderChild.getChildNo(), OrderChildLogEnum.Type.PLATFORM_CANCEL.getCode(), UserTypeEnum.SYSTEM.getCode(), 0L, "系统");
}
/**
* 订单取消
*/
@Override
public void orderCancel(String childNo) {
// 订单取消 统计积分
integralMqService.orderChildFinish(childNo, IntegralOrderChildFinishMqParam.Type.ORDER_CANCEL.getCode());
orderChildFinish(childNo);
// 发送mq (运单取消)
orderChildMqService.orderChildCancel(childNo, OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), UserTypeEnum.SYSTEM.getCode(), 0L, "系统");
}
/**
* 货单取消
*/
@Override
public void orderGoodsCancel(String childNo) {
// 货单取消 统计积分
integralMqService.orderChildFinish(childNo, IntegralOrderChildFinishMqParam.Type.ORDER_GOODS_CANCEL.getCode());
orderChildFinish(childNo);
// 发送mq (运单取消)
orderChildMqService.orderChildCancel(childNo, OrderChildEnum.Status.PLATFORM_CANCEL.getCode(), UserTypeEnum.SYSTEM.getCode(), 0L, "系统");
}
/**
* 客服取消
*/
@Override
public void orderChildCancelByArtificial(String childNo) {
// 货单取消 统计积分
integralMqService.orderChildFinish(childNo, IntegralOrderChildFinishMqParam.Type.ARTIFICIAL_CANCEL.getCode());
orderChildFinish(childNo);
// 发送mq (运单取消)
orderChildMqService.orderChildCancel(childNo, OrderChildEnum.Status.ARTIFICIAL_CANCEL.getCode(), UserTypeEnum.CARRIER.getCode(), 0L, "系统");
}
/**
* 运单结束
*/
@Override
public void orderChildFinish(String childNo) {
}
}
......@@ -340,6 +340,13 @@ public class CollectLineReportServiceImpl implements CollectLineReportService {
CollectLineReport collectLineReport = collectLineReportDao.getEntityByKey(param.getId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
collectLineReport.setAuditStatus(CollectLineReport.AuditStatus.AUDIT.getCode());
collectLineReportDao.updateAuditStatus(collectLineReport);
// 查找规则
AppIntegralRuleVO ruleInfo = integralRuleService.getRuleInfo();
// 报存积分
integralRecordService.addDriverReportRecord(ruleInfo, collectLineReport.getTruckNo(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_INFO.getValue(),
ruleInfo.getDriverReportRule().getIntegralSendAddressInfo(), IntegralRecordEnum.Type.REPORT_SEND_ADDRESS_INFO.getMsg());
}
@Transactional(rollbackFor = Exception.class)
......@@ -353,7 +360,7 @@ public class CollectLineReportServiceImpl implements CollectLineReportService {
AppIntegralRuleVO ruleInfo = integralRuleService.getRuleInfo();
// 报存积分
integralRecordService.addDriverReportRecord(ruleInfo, collectLineReport.getTruckNo(), IntegralRecordEnum.Type.REPORT_ABNORMAL.getValue(),
ruleInfo.getDriverReportRule().getIntegralQuality(), IntegralRecordEnum.Type.REPORT_ABNORMAL.getMsg());
ruleInfo.getDriverReportRule().getIntegralAbnormal(), IntegralRecordEnum.Type.REPORT_ABNORMAL.getMsg());
}
@Transactional(rollbackFor = Exception.class)
......
......@@ -102,13 +102,6 @@ public class CollectTrafficCongestionServiceImpl implements CollectTrafficConges
collectTrafficCongestion.setAuditStatus(CollectTrafficCongestion.AuditStatus.AUDIT.getCode());
collectTrafficCongestionDao.updateAuditStatus(collectTrafficCongestion);
// 查找规则
AppIntegralRuleVO ruleInfo = integralRuleService.getRuleInfo();
// 报存积分
integralRecordService.addDriverReportRecord(ruleInfo, collectTrafficCongestion.getTruckNo(), IntegralRecordEnum.Type.REPORT_TRAFFIC.getValue(),
ruleInfo.getDriverReportRule().getIntegralTraffic(), IntegralRecordEnum.Type.REPORT_TRAFFIC.getMsg());
}
@Override
......
......@@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Slf4j
......@@ -42,6 +44,8 @@ public class CollectTruckServiceImpl implements CollectTruckService {
CollectTruck truck = collectTruckDao.getByUserNoAndTruckNo(userNo, param.getTruckNo()).orNull();
if (truck == null) {
truck = new CollectTruck();
truck.setUserNo(userNo);
truck.setName(loginUserInfo.getUserName());
truck.setMobile(loginUserInfo.getUserMobile());
......@@ -75,6 +79,7 @@ public class CollectTruckServiceImpl implements CollectTruckService {
CollectTruck truck = collectTruckDao.getByUserNoAndTruckNo(userNo, param.getTruckNo()).orNull();
if (truck == null) {
truck = new CollectTruck();
truck.setUserNo(userNo);
truck.setName(loginUserInfo.getUserName());
truck.setMobile(loginUserInfo.getUserMobile());
......@@ -109,6 +114,7 @@ public class CollectTruckServiceImpl implements CollectTruckService {
CollectTruck truck = collectTruckDao.getByUserNoAndTruckNo(userNo, param.getTruckNo()).orNull();
if (truck == null) {
truck = new CollectTruck();
truck.setUserNo(userNo);
truck.setName(loginUserInfo.getUserName());
truck.setMobile(loginUserInfo.getUserMobile());
......@@ -140,6 +146,7 @@ public class CollectTruckServiceImpl implements CollectTruckService {
Long userNo = loginUserInfo.getUserNo();
CollectTruck truck = collectTruckDao.getByUserNoAndTruckNo(userNo, param.getTruckNo()).orNull();
if (truck == null) {
truck = new CollectTruck();
truck.setUserNo(userNo);
truck.setName(loginUserInfo.getUserName());
truck.setMobile(loginUserInfo.getUserMobile());
......@@ -158,6 +165,7 @@ public class CollectTruckServiceImpl implements CollectTruckService {
Long userNo = loginUserInfo.getUserNo();
CollectTruck truck = collectTruckDao.getByUserNoAndTruckNo(userNo, param.getTruckNo()).orNull();
if (truck == null) {
truck = new CollectTruck();
truck.setUserNo(userNo);
truck.setName(loginUserInfo.getUserName());
truck.setMobile(loginUserInfo.getUserMobile());
......@@ -176,6 +184,7 @@ public class CollectTruckServiceImpl implements CollectTruckService {
Long userNo = loginUserInfo.getUserNo();
CollectTruck truck = collectTruckDao.getByUserNoAndTruckNo(userNo, param.getTruckNo()).orNull();
if (truck == null) {
truck = new CollectTruck();
truck.setUserNo(userNo);
truck.setName(loginUserInfo.getUserName());
truck.setMobile(loginUserInfo.getUserMobile());
......@@ -194,6 +203,7 @@ public class CollectTruckServiceImpl implements CollectTruckService {
Long userNo = loginUserInfo.getUserNo();
CollectTruck truck = collectTruckDao.getByUserNoAndTruckNo(userNo, param.getTruckNo()).orNull();
if (truck == null) {
truck = new CollectTruck();
truck.setUserNo(userNo);
truck.setName(loginUserInfo.getUserName());
truck.setMobile(loginUserInfo.getUserMobile());
......@@ -212,6 +222,7 @@ public class CollectTruckServiceImpl implements CollectTruckService {
Long userNo = loginUserInfo.getUserNo();
CollectTruck truck = collectTruckDao.getByUserNoAndTruckNo(userNo, param.getTruckNo()).orNull();
if (truck == null) {
truck = new CollectTruck();
truck.setUserNo(userNo);
truck.setName(loginUserInfo.getUserName());
truck.setMobile(loginUserInfo.getUserMobile());
......@@ -234,4 +245,16 @@ public class CollectTruckServiceImpl implements CollectTruckService {
}
@Override
public List<AppCollectTruckVO> listCollectTruck(CollectTruckParam param) {
List<AppCollectTruckVO> returnList = new ArrayList<AppCollectTruckVO>();
List<CollectTruck> collectTrucks = collectTruckDao.listCollectTruck(param.getTruckNos());
for (CollectTruck truck : collectTrucks) {
AppCollectTruckVO appCollectTruckVO = collectTruckStruct.convertAppCollectTruckVO(truck);
returnList.add(appCollectTruckVO);
}
return returnList;
}
}
......@@ -58,7 +58,7 @@ public class PayServiceImpl implements PayService {
.pwd("noCheckPwd")
.remark(remark)
.build();
paymentService.paymentWallet(noCheckPwd);
paymentService.paymentBreakContractWallet(noCheckPwd);
}
}
package com.clx.performance.service.impl.settle;
import com.clx.performance.config.MslPaymentConfig;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.settle.SettlementDriverDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.PayRemarkEnum;
import com.clx.performance.enums.PerformanceResultEnum;
......@@ -15,6 +17,7 @@ import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementPlatformEnum;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriver;
import com.clx.performance.model.settle.SettlementDriverDetail;
......@@ -32,6 +35,7 @@ import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -82,6 +86,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Autowired
private MslPaymentConfig mslPaymentConfig;
@Autowired
private OrderChildDao orderChildDao;
@Override
......@@ -119,8 +126,8 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
}
//生成车主结算单
settlementDriverSave(settlementDriverDetail,settlementNo);
//车主结算单自动支付
paySettlementDriver(settlementDriverDetail);
......@@ -168,6 +175,24 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementDriverDao.saveEntity(settlementDriver);
}
public void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg){
//运单状态修改为完成
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
SettlementDriver settlementDriver = settlementDriverDao.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
if(1 == payType){
orderChild.setStatus(OrderChildEnum.Status.COMPLETE.getCode());
orderChildDao.updateSettlement(orderChild);
settlementDriver.setStatus(SettlementDriverEnum.Status.SETTLED.getCode());
settlementDriverDao.updateEntityByKey(settlementDriver);
}else{
settlementDriver.setPayErrorMsg(payErrorMsg);
settlementDriverDao.updateEntityByKey(settlementDriver);
}
}
/**
* 车主结算单自动支付
*/
......@@ -182,7 +207,15 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
.pwd("noCheckPwd")
.remark(PayRemarkEnum.toString(PayRemarkEnum.FREIGHT_TO_OWNER.getValue()))
.build();
paymentService.paymentWallet(noCheckPwd);
Result result = null;
try{
result = paymentService.paymentWallet(noCheckPwd);
}catch (Exception e){
settlementDriverNotify(detail.getChildNo(),0,e.getMessage());
}
if(Objects.nonNull(result)){
settlementDriverNotify(detail.getChildNo(),0,result.getMsg());
}
}
/**
......@@ -216,6 +249,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementOwner.setPrepayFreight(settlementOwnerDetail.getPrepayFreight());
settlementOwner.setStatus(SettlementOwnerEnum.Status.TO_BE_LOCKED.getCode());
settlementOwner.setInvoiceStatus(SettlementOwnerEnum.InvoiceStatus.NOT_INVOICE.getCode());
settlementOwner.setCompanyName(ownerInfo.getCompanyName());
settlementOwner.setCompanyTaxCode(ownerInfo.getCompanyTaxCode());
......
......@@ -9,4 +9,6 @@ public interface SettlementMqHandlerService {
void settlementDetailInvoiceTypeSync(SettlementDetailInvoiceTypeSyncMqParam mq);
void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg);
}
......@@ -148,8 +148,20 @@ public class OrderChildSqlProvider {
return sqlList.toString();
}
public String listAfterArrayReceiveChild(String orderNo){
String sql = new SQL() {{
SELECT("sum(load_net)");
FROM("order_child ");
WHERE("order_no = #{orderNo}");
WHERE("status >=" + OrderChildEnum.Status.ARRIVE_RECEIVE.getCode());
WHERE("status <=" + OrderChildEnum.Status.COMPLETE.getCode());
}}.toString();
return sql;
}
public String findArtificialCancelOrder(@Param("orderChildNo") String orderChildNo) {
String sql = "select child_no,goods_name,freight_price,order_no" +
String sql = "select child_no,goods_name,freight_price,order_no," +
"send_address,receive_address," +
"driver_user_no, driver_name,driver_mobile," +
"truck_no," +
......@@ -161,7 +173,7 @@ public class OrderChildSqlProvider {
"date_format(unload_time, '%Y-%m-%d %H:%i:%s') as unloadTime from order_child where child_no = #{orderChildNo}";
sql += " and status >="+ OrderChildEnum.Status.LOAD.getCode();
sql += " and status <="+ OrderChildEnum.Status.UNSETTLE.getCode();
sql += " and status <"+ OrderChildEnum.Status.UNSETTLE.getCode();
return sql;
}
......
......@@ -100,7 +100,7 @@ public class OrderGoodsSqlProvider {
WHERE("a.pending_order_way = " + PendingOrderWayStatusEnum.Status.GK.getCode());
WHERE("a.last_arrive_send_time >= now()");
WHERE("(a.order_goods_status = "+OrderGoodsStatusEnum.Status.PAYING.getCode()+" or a.order_goods_status = "+OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode()+")");
WHERE("a.residue_transport_weight >0");
WHERE("a.residue_transport_weight >=35");
ORDER_BY("a.pending_order_time desc");
}}.toString();
return sql;
......@@ -271,7 +271,7 @@ public class OrderGoodsSqlProvider {
" date_format(a.modified_time, '%Y-%m-%d %H:%i:%s') as modified_time," +
"a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name,a.pending_order_freight," +
"a.user_no,a.user_name,a.stop_flag,a.batch_number,a.last_arrive_receive_time,a.last_load_time,a.last_order_time,a.vehicle_usage,ab.truck_no as truckNo"
+ " from order_goods a left join order_goods_truck_bind ab on ab.order_goods_no = a.order_goods_no where ab.truck_no in (");
+ " from order_goods a right join order_goods_truck_bind ab on ab.order_goods_no = a.order_goods_no where ab.status = '1' and ab.truck_no in (");
if (!param.isEmpty()) {
for (int i = 0; i < param.size(); i++) {
......
......@@ -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 "
......@@ -28,6 +28,7 @@ public class BreakContractOwnerRecordSqlProvider {
if (StringUtils.isNotBlank(param.getOrderNo())) {WHERE("order_no = #{param.orderNo}");}
if (Objects.nonNull(param.getTriggerType())) {WHERE("trigger_type = #{param.triggerType}");}
if (Objects.nonNull(param.getBreakContractPartyType())) {WHERE("break_contract_party_type = #{param.breakContractPartyType}");}
if (Objects.nonNull(param.getConfirmStatus())) {WHERE("confirm_status = #{param.confirmStatus}");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
......
package com.clx.performance.struct;
import com.clx.open.sdk.callback.message.OrderChildMessage;
import com.clx.performance.model.OrderChild;
import com.clx.performance.vo.app.GoingOrderChildVO;
import com.clx.performance.vo.app.OrderChildVO;
......@@ -23,5 +24,8 @@ public interface OrderChildStruct {
GoingOrderChildVO convertGoingOrder(OrderChild item);
OrderChildMessage convertMessage(OrderChild item);
}
......@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论