提交 718b4c42 authored 作者: liruixin's avatar liruixin

第三方结算单付款接口

上级 940ee12d
...@@ -2,6 +2,6 @@ package com.clx.performance.sdk.constant; ...@@ -2,6 +2,6 @@ package com.clx.performance.sdk.constant;
public class ActionConstants { public class ActionConstants {
public static final String ORDER_INFO_SYNC = "order.info.save"; public static final String PAYMENT_SETTLEMENT = "payment.settlement";
} }
package com.clx.performance.sdk.request.action;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import static com.clx.performance.sdk.constant.ActionConstants.PAYMENT_SETTLEMENT;
/**
* @Author liruixin
* @create 2023-09-19 13:33
*/
@Getter
@Setter
@Accessors(chain = true)
public class PaymentSettlementAction implements Action<String>{
@NotNull(message = "结算单号不能为空")
@ApiModelProperty(value="结算单号",example = "JS10")
private String settlementNo;
@NotBlank(message = "收款人不能为空")
@ApiModelProperty(value = "收款人", example = "收款人")
private String payee;
@NotBlank(message = "收款银行不能为空")
@ApiModelProperty(value = "收款银行", example = "浙江银行")
private String payeeBankName;
@NotBlank(message = "收款银行卡卡号不能为空")
@ApiModelProperty(value = "收款银行卡卡号", example = "62213545878787")
private String payeeBankCardNo;
@NotBlank(message = "付款银行不能为空")
@ApiModelProperty(value = "付款银行", example = "浙江银行")
private String paymentBankName;
@NotBlank(message = "付款银行卡卡号不能为空")
@ApiModelProperty(value = "付款银行卡卡号", example = "62213545878787")
private String paymentBankCardNo;
@NotBlank(message = "付款凭证不能为空")
@ApiModelProperty(value = "付款凭证", example = "/a.png")
private String paymentImg;
@Override
public String action() {
return PAYMENT_SETTLEMENT;
}
}
package com.clx.performance.sdk.request.action;
import com.msl.common.convertor.type.MoneyInConvert;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import static com.clx.performance.sdk.constant.ActionConstants.ORDER_INFO_SYNC;
/**
* @ClassName SyncOwnerInfoMessage
* @Description 同步货主信息
* @Author kavin
* @Date 2023/10/13 14:39
* @Version 1.0
*/
@Getter
@Setter
@Accessors(chain = true)
public class SyncOrderInfoAction implements Action<String>{
@NotNull(message = "货主编号不能为空")
@ApiModelProperty(value = "货主编号" ,required = true)
private Long ownerUserNo;
@NotBlank(message = "货主姓名不能为空")
@ApiModelProperty(value = "货主姓名" ,required = true)
private String ownerUserName;
@NotNull(message = "拉运类型不能为空")
@ApiModelProperty(value = "拉运类型 0单次拉运 1长期拉运" ,required = true)
private Integer transportType;
@ApiModelProperty(value = "长协合同编号")
private String longTermContractNo;
@NotBlank(message = "货物类型名称不能为空")
@ApiModelProperty(value = "货物类型名称",required = true)
private String goodsTypeName;
@NotBlank(message = "货物名称货物名称不能为空")
@ApiModelProperty(value = "货物名称",required = true)
private String goodsName;
@NotBlank(message = "货物型号不能为空")
@ApiModelProperty(value = "货物型号",required = true)
private String goodsModel;
@NotNull(message = "拉运重量不能为空")
@ApiModelProperty(value = "拉运重量(吨)",required = true)
private BigDecimal transportWeight;
@NotNull(message = "向下浮动量不能为空")
@ApiModelProperty(value = "向下浮动量(吨)",required = true)
private BigDecimal downFloatWeight;
@ApiModelProperty(value = "向上浮动量(吨)")
private BigDecimal upFloatWeight;
@NotNull(message = "是否可超吨不能为空")
@ApiModelProperty(value = "是否可超吨 0 否 1 是")
private Integer overWeight;
@NotNull(message = "损耗单价不能为空")
@ApiModelProperty(value = "损耗单价(元)",required = true)
@MoneyInConvert
private BigDecimal lossPrice;
@NotBlank(message = "联系人不能为空")
@ApiModelProperty(value = "联系人(货主方)",required = true)
private String contactOwner;
@NotBlank(message = "联系电话不能为空")
@ApiModelProperty(value = "联系电话(货主方)",required = true)
private String contactPhoneOwner;
@NotBlank(message = "发货地省不能为空")
@ApiModelProperty(value = "发货地省",example = "北京省")
private String sendProvince;
@NotBlank(message = "发货地市不能为空")
@ApiModelProperty(value = "发货地市",example = "北京市")
private String sendCity;
@NotBlank(message = "发货地区县不能为空")
@ApiModelProperty(value = "发货地区县",example = "西城区")
private String sendCounty;
@NotBlank(message = "发货地详细地址不能为空")
@ApiModelProperty(value = "发货地详细地址",example = "黄寺大街26号楼六号院")
private String sendAddress;
@NotBlank(message = "发货-地址简称不能为空")
@ApiModelProperty(value = "发货-地址简称",required = true)
private String sendAddressShorter;
@NotBlank(message = "场地类型不能为空")
@ApiModelProperty(value = "场地类型",example = "集运站")
private String sendSiteType;
@NotBlank(message = "联系人不能为空")
@ApiModelProperty(value = "联系人",example = "李四")
private String sendContact;
@NotBlank(message = "联系电话不能为空")
@ApiModelProperty(value = "联系电话",example = "12222222222")
private String sendContactPhone;
@ApiModelProperty(value = "地址规则",example = "这就是规则")
private String sendAddressRule;
@NotNull(message = "经度不能为空")
@ApiModelProperty(value = "经度",example = "112.23")
private BigDecimal sendLongitude;
@NotNull(message = "纬度不能为空")
@ApiModelProperty(value = "纬度",example = "36.23")
private BigDecimal sendLatitude;
@ApiModelProperty(value = "发货-是否可超标准 0 否 1 是")
private Integer sendOverStandard;
@ApiModelProperty(value = "发货-预估装车时长(小时)")
private BigDecimal sendEstimatedLoadingTime;
@ApiModelProperty(value = "发货-是否需要系统排队 0 否 1 是")
private Integer sendWaitSystem;
@ApiModelProperty(value = "发货-排队系统名称")
private String sendWaitSystemName;
@ApiModelProperty(value = "发货-预估排队时长")
private BigDecimal sendEstimatedWaitTime;
@NotNull(message = "发货-煤源生产情况不能为空")
@ApiModelProperty(value="发货-煤源生产情况 1 现产现装 2 存煤",required = true)
private Integer sendCoalSourceProductSituation;
@ApiModelProperty(value="发货-现产现装效率(车/小时)")
private BigDecimal sendProductLoadEfficiency;
@NotNull(message = "发货-司机到达货源地范围不能为空")
@ApiModelProperty(value="发货-司机到达货源地范围(千米)",required = true)
private BigDecimal sendDriverArriveRange;
@ApiModelProperty(value="发货-过磅费(元)")
@MoneyInConvert
private BigDecimal sendPoundFee;
@ApiModelProperty(value="发货-其他过磅费(元)")
@MoneyInConvert
private BigDecimal sendOtherPoundFee;
@ApiModelProperty(value="发货-装卸费(元)")
@MoneyInConvert
private BigDecimal sendLoadFee;
@ApiModelProperty(value="发货-其他装卸费(元)")
@MoneyInConvert
private BigDecimal sendOtherLoadFee;
@ApiModelProperty(value="发货-其他费用 数据样例: [{'fee':500,'remark':'其他费用备注'}]")
private String sendOtherFee;
@NotNull(message = "发货-货源地开支金额起不能为空")
@ApiModelProperty(value="发货-货源地开支金额起(元)",required = true)
@MoneyInConvert
private BigDecimal sendPayFeeBegin;
@NotNull(message = "发货-货源地开支金额止不能为空")
@ApiModelProperty(value="发货-货源地开支金额止(元)",required = true)
@MoneyInConvert
private BigDecimal sendPayFeeEnd;
@NotBlank(message = "收货地省不能为空")
@ApiModelProperty(value = "收货地省",example = "北京省")
private String reveiveProvince;
@NotBlank(message = "收货地市不能为空")
@ApiModelProperty(value = "收货地市",example = "北京市")
private String reveiveCity;
@NotBlank(message = "收货地区县不能为空")
@ApiModelProperty(value = "收货地区县",example = "西城区")
private String reveiveCounty;
@NotBlank(message = "收货地详细地址不能为空")
@ApiModelProperty(value = "收货地详细地址",example = "黄寺大街26号楼六号院")
private String reveiveAddress;
@NotBlank(message = "收货-地址简称不能为空")
@ApiModelProperty(value="收货-地址简称",required = true)
private String reveiveAddressShorter;
@NotBlank(message = "场地类型不能为空")
@ApiModelProperty(value = "场地类型",example = "集运站")
private String reveiveSiteType;
@NotBlank(message = "联系人不能为空")
@ApiModelProperty(value = "联系人",example = "李四")
private String reveiveContact;
@NotBlank(message = "联系电话不能为空")
@ApiModelProperty(value = "联系电话",example = "12222222222")
private String reveiveContactPhone;
@ApiModelProperty(value = "地址规则",example = "这就是规则")
private String reveiveAddressRule;
@NotNull(message = "经度不能为空")
@ApiModelProperty(value = "经度",example = "112.23")
private BigDecimal reveiveLongitude;
@NotNull(message = "纬度不能为空")
@ApiModelProperty(value = "纬度",example = "36.23")
private BigDecimal reveiveLatitude;
//@NotNull(message = "收货-是否可超标准不能为空")
@ApiModelProperty(value="收货-是否可超标准 0 否 1 是")
private Integer reveiveOverStandard;
@ApiModelProperty(value="收货-预估卸车时长(小时)")
private BigDecimal reveiveEstimatedUnLoadingTime;
@ApiModelProperty(value="收货-是否需要系统排队 0 否 1 是")
private Integer reveiveWaitSystem;
@ApiModelProperty(value="收货-排队系统名称")
private String reveiveWaitSystemName;
@NotNull(message = "收货-司机到达目的地范围不能为空")
@ApiModelProperty(value="收货-司机到达目的地范围(千米)",required = true)
private BigDecimal reveiveDriverArriveRange;
@ApiModelProperty(value="收发地磅差")
private BigDecimal reveivePoundDiff;
@ApiModelProperty(value="收货-过磅费(元)")
@MoneyInConvert
private BigDecimal reveivePoundFee;
@ApiModelProperty(value="收货-其他过磅费(元)")
@MoneyInConvert
private BigDecimal reveiveOtherPoundFee;
@ApiModelProperty(value="收货-装卸费(元)")
@MoneyInConvert
private BigDecimal reveiveLoadFee;
@ApiModelProperty(value="收货-其他装卸费(元)")
@MoneyInConvert
private BigDecimal reveiveOtherLoadFee;
@ApiModelProperty(value="收货-其他费用 数据样例: [{'fee':500,'remark':'其他费用备注'}]")
private String reveiveOtherFee;
@ApiModelProperty(value="收货-收货地开支金额起(元)")
@MoneyInConvert
private BigDecimal reveivePayFeeBegin;
@ApiModelProperty(value="收货-收货地开支金额止(元)")
@MoneyInConvert
private BigDecimal reveivePayFeeEnd;
@NotNull(message = "用车需求不能为空")
@ApiModelProperty(value = "用车需求: 1平台车辆",required = true)
private Integer truckDemand;
@ApiModelProperty("平台承运吨数")
private BigDecimal platformCarryWeight;
@ApiModelProperty(value = "自有车辆(辆)")
private Integer ownerTruckNumber;
@ApiModelProperty(value = "车型要求列表json",example = "['重型半挂牵引车','重型厢式半挂车']")
private String truckModelList;
@NotNull(message = "拉运开始时间不能为空")
@ApiModelProperty(value = "拉运开始时间",required = true,example = "2023-09-13 12:23:03")
private String transportBeginTime;
@NotNull(message = "拉运结束时间不能为空")
@ApiModelProperty(value = "拉运结束时间",required = true,example = "2023-09-13 12:23:03")
private String transportEndTime;
@NotBlank(message = "可装车时间段开始不能为空")
@ApiModelProperty(value="可装车时间段开始",required = true,example = "08:13:29")
private String loadBeginTime;
@NotBlank(message = "可装车时间段结束不能为空")
@ApiModelProperty(value="可装车时间段结束",required = true,example = "08:13:29")
private String loadEndTime;
@NotBlank(message = "可卸车时间段开始不能为空")
@ApiModelProperty(value="可卸车时间段开始",required = true,example = "08:13:29")
private String unloadBeginTime;
@NotBlank(message = "可卸车时间段结束不能为空")
@ApiModelProperty(value="可卸车时间段结束",required = true,example = "08:13:29")
private String unloadEndTime;
@ApiModelProperty(value="意向运费(元)")
@MoneyInConvert
private BigDecimal intentionFreightPrice;
@Override
public String action() {
return ORDER_INFO_SYNC;
}
}
package com.clx.performance.controller.sdk;
import com.alibaba.fastjson.JSON;
import com.clx.performance.sdk.constant.ActionConstants;
import com.clx.performance.sdk.request.action.PaymentSettlementAction;
import com.clx.performance.service.settle.third.ThirdSettlementOwnerService;
import com.msl.common.dto.HttpDTO;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Objects;
import static org.bouncycastle.cms.CMSSignedGenerator.DATA;
@Api(tags = "第三方")
@RestController
@RequestMapping("/encrypt/third")
@Slf4j
@AllArgsConstructor
public class ThirdPartyController {
private final ThirdSettlementOwnerService thirdSettlementOwnerService;
@PostMapping("/doAction")
public Object doAction(HttpServletRequest request) {
HttpDTO httpDTO = (HttpDTO) request.getAttribute(DATA);
String action = httpDTO.getAction();
if (Objects.equals(action, ActionConstants.PAYMENT_SETTLEMENT)) {
thirdSettlementOwnerService.updateThirdPaymentSettlement(JSON.parseObject(httpDTO.getData(), PaymentSettlementAction.class));
}
return Result.ok();
}
}
...@@ -8,6 +8,7 @@ import com.clx.performance.enums.settle.SettlementOwnerEnum; ...@@ -8,6 +8,7 @@ import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.mapper.settle.SettlementOwnerMapper; import com.clx.performance.mapper.settle.SettlementOwnerMapper;
import com.clx.performance.model.settle.SettlementOwner; import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerParam; import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerParam;
import com.msl.common.base.Optional;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam; import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -71,6 +72,15 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S ...@@ -71,6 +72,15 @@ public class SettlementOwnerDaoImpl extends BaseDaoImpl<SettlementOwnerMapper, S
} }
@Override
public Optional<SettlementOwner> selectBySettlementNo(String settlementNo) {
return Optional.of(settlementNo)
.map(item -> lQrWrapper()
.eq(SettlementOwner::getSettlementNo, item)
.eq(SettlementOwner::getMergeStatus, SettlementOwnerEnum.MergeStatus.NO.getCode()))
.map(super::getOne);
}
@Override @Override
public IPage<SettlementOwner> pageSettlementOwner(PageOwnerSettlementParam param) { public IPage<SettlementOwner> pageSettlementOwner(PageOwnerSettlementParam param) {
LambdaQueryWrapper<SettlementOwner> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SettlementOwner> query = new LambdaQueryWrapper<>();
......
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.SettlementOwnerMapper; import com.clx.performance.mapper.settle.SettlementOwnerMapper;
import com.clx.performance.model.settle.SettlementOwner; import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerParam; import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerParam;
import com.msl.common.base.Optional;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam; import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -21,5 +22,7 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl ...@@ -21,5 +22,7 @@ public interface SettlementOwnerDao extends BaseDao<SettlementOwnerMapper, Settl
IPage<SettlementOwner> pageCarrierSettlementOwner(PageCarrierSettlementOwnerParam param); IPage<SettlementOwner> pageCarrierSettlementOwner(PageCarrierSettlementOwnerParam param);
Optional<SettlementOwner> selectBySettlementNo(@Param("settlementNo")String settlementNo);
IPage<SettlementOwner> pageSettlementOwner(PageOwnerSettlementParam param); IPage<SettlementOwner> pageSettlementOwner(PageOwnerSettlementParam param);
} }
package com.clx.performance.service.impl.settle.third;
import com.clx.performance.dao.settle.SettlementLogDao;
import com.clx.performance.dao.settle.SettlementOwnerDao;
import com.clx.performance.dao.settle.SettlementPlatformAccountDao;
import com.clx.performance.enums.OrderChildLogEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementLogEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.sdk.request.action.PaymentSettlementAction;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.settle.SettlementLogService;
import com.clx.performance.service.settle.third.ThirdSettlementOwnerService;
import com.clx.performance.struct.settle.SettlementLogStruct;
import com.clx.performance.struct.settle.SettlementOwnerStruct;
import com.msl.common.exception.ServiceSystemException;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Objects;
/**
* @author liruixin
* Date 2023-10-12
* Time 09:43
*/
@Slf4j
@Service
@AllArgsConstructor
public class ThirdSettlementOwnerServiceImpl implements ThirdSettlementOwnerService {
private final SettlementOwnerDao settlementOwnerDao;
private final SettlementOwnerStruct settlementOwnerStruct;
private final SettlementLogDao settlementLogDao;
private final SettlementLogStruct settlementLogStruct;
private final SettlementPlatformAccountDao settlementPlatformAccountDao;
private final SettlementLogService settlementLogService;
private final OwnerAccountService ownerAccountService;
@Override
public void updateThirdPaymentSettlement(PaymentSettlementAction param) {
//结算单详情
SettlementOwner settlementOwner =settlementOwnerDao.selectBySettlementNo(param.getSettlementNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//状态判断
if(!Objects.equals(settlementOwner.getStatus(), SettlementOwnerEnum.Status.SHIPPER_TO_PAYMENT.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_ORDER_STATUS_CHANGED);
}
String settlementNo = settlementOwner.getSettlementNo();
//更新状态为平台确认货主付款
SettlementOwner settlement = SettlementOwner.builder().payee(param.getPayee()).payeeBankCardNo(param.getPayeeBankCardNo())
.payeeBankName(param.getPayeeBankName()).paymentBankCardNo(param.getPaymentBankCardNo())
.paymentBankName(param.getPaymentBankName()).paymentImg(param.getPaymentImg())
.settlementNo(settlementOwner.getSettlementNo())
.status(SettlementOwnerEnum.Status.PLATFORM_CONFIRMED_OWNER_PAYMENT.getCode()).build();
settlementOwnerDao.updatePayment(settlement);
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志
settlementLogService.saveSettlementLog(settlementNo,
SettlementLogEnum.Type.SHIPPER_TO_PAYMENT.getCode(),SettlementLogEnum.Type.SHIPPER_TO_PAYMENT.getMsg(),
OrderChildLogEnum.CreateType.OWNER.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
}
...@@ -3,6 +3,7 @@ package com.clx.performance.service.settle; ...@@ -3,6 +3,7 @@ package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.owner.OwnerPaymentSettlementParam; import com.clx.performance.param.pc.owner.OwnerPaymentSettlementParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerParam; import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerParam;
import com.clx.performance.sdk.request.action.PaymentSettlementAction;
import com.clx.performance.param.pc.owner.PageOwnerSettlementParam; import com.clx.performance.param.pc.owner.PageOwnerSettlementParam;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementOwnerVO; import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementOwnerVO;
import com.clx.performance.vo.pc.carrier.settle.CarrierSettlementOwnerDetailVO; import com.clx.performance.vo.pc.carrier.settle.CarrierSettlementOwnerDetailVO;
...@@ -28,5 +29,6 @@ public interface SettlementOwnerService { ...@@ -28,5 +29,6 @@ public interface SettlementOwnerService {
IPage<CarrierPageSettlementOwnerVO> pageCarrierSettlementOwner(PageCarrierSettlementOwnerParam param); IPage<CarrierPageSettlementOwnerVO> pageCarrierSettlementOwner(PageCarrierSettlementOwnerParam param);
IPage<OwnerPageSettlementOwnerVO> pageSettlementOwner(PageOwnerSettlementParam param); IPage<OwnerPageSettlementOwnerVO> pageSettlementOwner(PageOwnerSettlementParam param);
} }
package com.clx.performance.service.settle.third;
import com.clx.performance.sdk.request.action.PaymentSettlementAction;
/**
* @author liruixin
* Date 2023-10-12
* Time 09:43
*/
public interface ThirdSettlementOwnerService {
void updateThirdPaymentSettlement(PaymentSettlementAction action);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论