提交 afb2ad34 authored 作者: 艾庆国's avatar 艾庆国

Merge branch 'refs/heads/v20.9_settlement_20240805' into dev

......@@ -185,6 +185,12 @@ public enum PerformanceResultEnum implements ResultEnum {
UNLOAD_TIME_AFTER_FIRST_UNLOAD_TIME(2108, "交货时间不可晚于首次提交时间"),
SETTLEMENT_NO_NULL_ERROR(2109, "请选择需要下载的数据"),
ORDER_CHILD_RISK_PROCESS_ERROR(2111, "风控已处理"),
SETTLEMENT_OWNER_DETAIL_COMPANY_ADD_ERROR(2112, "所选数据存在状态”已处理“的数据,请核实后重新提交"),
;
private final int code;
private final String msg;
......
......@@ -23,7 +23,8 @@ public enum SettlementLogEnum {
OWNER_CONFIRMED_PLATFORM_PAYMENT(7, "货主确认付款"),
INVOICE_TO_BE_MAILED(8, "邮寄发票"),
COMPLETED(9, "已完结"),
PLATFORM_CONFIRM_ACCOUNT (10, "平台确认对账"),
PLATFORM_TO_BE_CONFIRMED(11, "平台确认结算单"),
;
private final Integer code;
......
......@@ -32,7 +32,7 @@ public enum SettlementOrderChildRiskEnum {
@AllArgsConstructor
public enum ProcessMethod {
SYNC_RETRY(1, "重新同步"),
CONVERT_NORMAL(2, "转普通单"),
CONVERT_ORDINARY(2, "转普通单"),
;
private final Integer code;
......
......@@ -11,6 +11,26 @@ import java.util.Optional;
public enum SettlementOwnerDetailEnum {
;
@Getter
@AllArgsConstructor
public enum InvoiceTypeStatus {
INIT(0, "初始化"),
PROCESSING(1, "获取中"),
SUCCESS(2,"获取成功"),
FAIL(3,"获取失败"),
;
private final Integer code;
private final String msg;
public static Optional<InvoiceTypeStatus> getByCode(int code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.getCode(), code)).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(InvoiceTypeStatus::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum InvoiceStatus {
......@@ -30,7 +50,6 @@ public enum SettlementOwnerDetailEnum {
}
}
@Getter
@AllArgsConstructor
public enum FinalPaymentStatus {
......
......@@ -54,12 +54,16 @@ public enum SettlementOwnerEnum {
public enum Status {
TO_BE_LOCKED(10, "待锁定"),
TO_BE_ACCOUNT(20, "待对账"),
PLATFORM_TO_BE_CONFIRMED(21, "待平台确认"),
OWNER_TO_BE_CONFIRMED(30, "待货主确认"),
SHIPPER_TO_PAYMENT (40, "待货主付款"),
PLATFORM_CONFIRMED_OWNER_PAYMENT(50, "待平台确认付款"),
PLATFORM_TO_PAYMENT(60, "待平台付款"),
OWNER_CONFIRMED_PLATFORM_PAYMENT(70, "待货主确认付款"),
@Deprecated
INVOICE_TO_BE_MAILED(80, "待邮寄发票"),
COMPLETED(90, "已完结"),
;
......
......@@ -53,6 +53,7 @@ public class PageCarrierOrderChildParam extends PageParam {
@ApiModelProperty(value = "运单状态集合")
private List<Integer> statusList;
@ApiModelProperty(value = "时间筛选类型,1:接单时间,2:磅单审核通过时间,3:完成时间")
private Integer timeType;
}
package com.clx.performance.param.pc.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class CarrierSettlementOwnerConfirmAccountParam {
@NotNull(message = "id不能为空")
@ApiModelProperty(value="列表id",example = "10")
private Integer id;
}
package com.clx.performance.param.pc.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class CarrierSettlementOwnerConfirmSettlementParam {
@NotNull(message = "id不能为空")
@ApiModelProperty(value="列表id",example = "10")
private Integer id;
}
package com.clx.performance.param.pc.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class CarrierSettlementOwnerDetailCompanyUpdateParam {
@NotNull(message = "id列表不能为空")
@ApiModelProperty(value="id列表")
private List<Integer> idList;
@NotNull(message = "开票公司id不能为空")
@ApiModelProperty(value="开票公司id")
private Integer companyId;
@NotBlank(message = "开票公司简称不能为空")
@ApiModelProperty(value="开票公司简称")
private String companyShorterName;
@ApiModelProperty(value="开票公司统一社会信用代码")
private String companyGroupCode;
}
package com.clx.performance.param.pc.owner;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class PageInvoiceOwnerSettlementOwnerDetailParam extends PageParam {
@NotNull(message = "是否已开票不能为空")
@ApiModelProperty(value = "是否已开票,0:否,1:是")
private Integer invoiceStatus;
@ApiModelProperty(value = "货主名称")
private String ownerName;
@ApiModelProperty(value = "结算单编号")
private String settlementNo;
@ApiModelProperty(value="运单编号")
private String childNo;
@ApiModelProperty(value="开票公司")
private String invoicingCompanyShorterName;
@ApiModelProperty(value="开票标识:1网运单 2普通单")
private Integer invoiceType;
@ApiModelProperty(value = "开始时间")
private String beginTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
}
package com.clx.performance.param.pc.owner.settle;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class OwnerSettlementOrderChildRiskProcessUpdateParam {
@NotNull(message = "id不能为空")
@ApiModelProperty(value="id",example = "10")
private Integer id;
@NotNull(message = "处理方式不能为空")
@ApiModelProperty(value = "处理方式:1重新同步 2转普通单")
private Integer processMethod;
}
package com.clx.performance.vo.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementOrderChildRiskProcessMqParam {
private Integer id; //id
}
......@@ -61,6 +61,9 @@ public class PageCarrierOrderChildVO {
@ApiModelProperty(value="完成时间",example = "2020-01-01 10:10:10")
private String finishTime;
@ApiModelProperty(value="磅单审核通过时间",example = "2020-01-01 10:10:10")
private String poundAuditTime;
@ApiModelProperty(value="发货地址",example = "吉林")
private String sendAddress;
......
......@@ -52,6 +52,8 @@ public class OpenOrderChildDTO {
private String unloadTime;
@ApiModelProperty(value = "运单完成时间", example = "2020-02-02 10:10:10", required = true, dataType = "String")
private String payFinishedTime;
@ApiModelProperty(value = "磅单审核时间", example = "2020-02-02 10:10:10", required = true, dataType = "String")
private String poundTime;
@ApiModelProperty(value = "收货皮重(吨)")
private BigDecimal receiveTare;
......@@ -63,4 +65,9 @@ public class OpenOrderChildDTO {
@ApiModelProperty(value = "备注", example = "", required = true, dataType = "String")
private String remark;
@ApiModelProperty(value = "1 普通单 2 网运单", example = "1", required = true, dataType = "Integer")
private Integer invoiceFlag;
@ApiModelProperty(value = "线下平台", example = "华祥", required = true, dataType = "String")
private String invoicePlatform;
}
......@@ -123,5 +123,17 @@ public class RabbitSettlementConfig {
.with(RabbitKeySettlementConstants.SETTLEMENT_INVOICE_STATUS_SYNC_ROUTING_KEY);
}
/**
* 风控处理
*/
@Bean
public Queue settlementRiskProcessQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_QUEUE);
}
@Bean
public Binding settlementRiskProcessQueueBinding() {
return BindingBuilder.bind(settlementRiskProcessQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_ROUTING_KEY);
}
}
......@@ -68,4 +68,10 @@ public class RabbitKeySettlementConstants {
public static final String SETTLEMENT_PAY_STATUS_SYNC_QUEUE = PREFIX +"settlementPayStatus.sync"+QUEUE;
public static final String SETTLEMENT_PAY_STATUS_SYNC_ROUTING_KEY = PREFIX +"settlementPayStatus.sync"+QUEUE_ROUTING_KEY;
/**
* 风控处理
*/
public static final String SETTLEMENT_RISK_PROCESS_QUEUE = PREFIX +"settlementRisk.process"+QUEUE;
public static final String SETTLEMENT_RISK_PROCESS_ROUTING_KEY = PREFIX +"settlementRisk.process"+QUEUE_ROUTING_KEY;
}
package com.clx.performance.controller.pc.carrier;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerConfirmAccountParam;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerConfirmSettlementParam;
import com.clx.performance.param.pc.owner.*;
import com.clx.performance.service.settle.SettlementOwnerService;
import com.clx.performance.vo.pc.carrier.settle.*;
......@@ -132,4 +133,21 @@ public class CarrierSettlementOwnerController {
settlementOwnerService.mergeOwnerSettlement(param);
return Result.ok();
}
@ApiOperation(value = "确认对账",notes = "<br>By:艾庆国")
@PostMapping("/updateConfirmAccount")
public Result updateConfirmAccount(@RequestBody @Validated CarrierSettlementOwnerConfirmAccountParam param) {
settlementOwnerService.updateConfirmAccount(param.getId());
return Result.ok();
}
@ApiOperation(value = "确认结算单",notes = "<br>By:艾庆国")
@PostMapping("/updateConfirmSettlement")
public Result updateConfirmSettlement(@RequestBody @Validated CarrierSettlementOwnerConfirmSettlementParam param) {
settlementOwnerService.updateCarrierConfirmSettlement(param.getId());
return Result.ok();
}
}
......@@ -3,8 +3,10 @@ package com.clx.performance.controller.pc.carrier;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerDetailCompanyUpdateParam;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.clx.performance.service.settle.SettlementOwnerDetailService;
......@@ -57,6 +59,23 @@ public class CarrierSettlementOwnerDetailController {
return Result.page(page.getRecords(),page.getTotal(),page.getPages());
}
@ApiOperation(value = "开票管理待开票、已开票列表",notes = "<br>By:杨启发")
@PostMapping("/pageInvoiceOwnerSettlementOrderDetailList")
@UnitCovert(param = false)
public Result<PageData<PageOwnerSettlementOwnerDetailVO>> pageInvoiceOwnerSettlementOrderDetailList(@RequestBody @Validated PageInvoiceOwnerSettlementOwnerDetailParam param) {
IPage<PageOwnerSettlementOwnerDetailVO> page = settlementOwnerDetailService.pageInvoiceOwnerSettlementOrderDetailList(param);
return Result.page(page.getRecords(),page.getTotal(),page.getPages());
}
@ApiOperation(value = "导出开票管理待开票、已开票",notes = "<br>By:杨启发")
@PostMapping("/exportInvoiceOwnerSettlementOrderDetail")
public void exportInvoiceOwnerSettlementOrderDetail(@RequestBody @Validated PageInvoiceOwnerSettlementOwnerDetailParam param, HttpServletResponse response) throws Exception {
try (SXSSFWorkbook workbook = settlementOwnerDetailService.exportInvoiceOwnerSettlementOrderDetail(param)) {
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
workbook.write(response.getOutputStream());
}
}
@ApiOperation(value = "导出货主结算单运单明细",notes = "<br>By:姜文业")
@PostMapping("/exportOwnerSettlementOrderDetailList")
public void exportCarrierSettlementOwnerPageList(@RequestBody @Validated PageOwnerSettlementOwnerDetailParam param, HttpServletResponse response) throws Exception {
......@@ -94,4 +113,12 @@ public class CarrierSettlementOwnerDetailController {
workbook.write(response.getOutputStream());
}
@ApiOperation(value = "更新开票公司",notes = "<br>By:艾庆国")
@PostMapping("/updateInvoiceCompany")
public Result updateInvoiceCompany(@RequestBody @Validated CarrierSettlementOwnerDetailCompanyUpdateParam param) {
settlementOwnerDetailService.updateInvoiceCompany(param);
return Result.ok();
}
}
package com.clx.performance.controller.pc.owner;
import com.clx.performance.param.pc.owner.settle.OwnerSettlementOrderChildRiskProcessUpdateParam;
import com.clx.performance.service.settle.SettlementOrderChildRiskService;
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.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;
@Slf4j
@RestController
@RequestMapping(value="/pc/owner/settlementOrderChildRisk")
@Validated
@Api(tags = "货主端-货主结算")
@AllArgsConstructor
public class OwnerSettlementOrderChildRiskController {
private final SettlementOrderChildRiskService settlementOrderChildRiskService;
@ApiOperation(value = "风控处理",notes = "<br>By:李瑞新")
@PostMapping("/updateProcessRisk")
public Result updateRiskProcess(@RequestBody @Validated OwnerSettlementOrderChildRiskProcessUpdateParam param) {
settlementOrderChildRiskService.updateRiskProcess(param);
return Result.ok();
}
}
......@@ -17,6 +17,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
......@@ -52,6 +53,16 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
);
}
@Override
public boolean updateCompany(List<Integer> idList, Integer companyId, String companyShorterName, String companyGroupCode) {
return update(lUdWrapper()
.in(SettlementDriverDetail::getId, idList)
.set(SettlementDriverDetail::getInvoicingCompanyId, companyId)
.set(SettlementDriverDetail::getInvoicingCompanyShorterName, companyShorterName)
.set(SettlementDriverDetail::getInvoicingCompanyGroupCode, companyGroupCode)
);
}
@Override
public Optional<SettlementDriverDetail> getByChildNo(String childNo) {
return Optional.of(childNo)
......@@ -129,4 +140,11 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
return baseMapper.selectList(lQrWrapper().eq(SettlementDriverDetail::getLoanFlag, code));
}
@Override
public List<SettlementDriverDetail> findListByIdList(List<Integer> idList) {
return list(lQrWrapper()
.in(SettlementDriverDetail::getId, idList)
);
}
}
......@@ -8,6 +8,7 @@ import com.clx.performance.dao.settle.SettlementOrderChildRiskDao;
import com.clx.performance.mapper.settle.SettlementOrderChildRiskMapper;
import com.clx.performance.model.settle.SettlementOrderChildRisk;
import com.clx.performance.param.pc.carrier.PageSettlementOrderChildRiskParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
......@@ -19,6 +20,25 @@ public class SettlementOrderChildRiskDaoImpl
extends BaseDaoImpl<SettlementOrderChildRiskMapper, SettlementOrderChildRisk, Integer>
implements SettlementOrderChildRiskDao {
@Override
public Optional<SettlementOrderChildRisk> getById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(SettlementOrderChildRisk::getId, item)
)
.map(super::getOne);
}
@Override
public Optional<SettlementOrderChildRisk> findLastByChildNo(String childNo) {
return Optional.of(childNo)
.map(item -> lQrWrapper()
.eq(SettlementOrderChildRisk::getChildNo, childNo)
.orderByDesc(SettlementOrderChildRisk::getId)
)
.map(super::getOne);
}
@Override
public IPage<SettlementOrderChildRisk> pageSettlementOrderChildRisk(PageSettlementOrderChildRiskParam param) {
LambdaQueryWrapper<SettlementOrderChildRisk> query = new LambdaQueryWrapper<>();
......
......@@ -12,6 +12,7 @@ import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.msl.common.base.Optional;
......@@ -36,6 +37,24 @@ import static com.clx.performance.enums.settle.SettlementOwnerEnum.InvoiceType.O
@Repository
public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDetailMapper, SettlementOwnerDetail, Integer> implements SettlementOwnerDetailDao {
@Override
public boolean updateInvoiceTypeStatus(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getInvoiceTypeStatus, item.getInvoiceTypeStatus())
);
}
@Override
public boolean updateClearInvoiceCompany(SettlementOwnerDetail item) {
return update(lUdWrapper()
.eq(SettlementOwnerDetail::getId, item.getId())
.set(SettlementOwnerDetail::getInvoicingCompanyId, item.getInvoicingCompanyId())
.set(SettlementOwnerDetail::getInvoicingCompanyShorterName, item.getInvoicingCompanyShorterName())
.set(SettlementOwnerDetail::getInvoicingCompanyGroupCode, item.getInvoicingCompanyGroupCode())
);
}
@Override
public boolean updateInvoiceType(SettlementOwnerDetail item) {
return update(lUdWrapper()
......@@ -180,6 +199,22 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
@Override
public IPage<SettlementOwnerDetail> pageInvoiceOwnerSettlementOrderDetailList(PageInvoiceOwnerSettlementOwnerDetailParam param) {
LambdaQueryWrapper<SettlementOwnerDetail> query = new LambdaQueryWrapper<>();
query.in(SettlementOwnerDetail :: getFinalPaymentStatus, SettlementOwnerDetailEnum.FinalPaymentStatus.YES,SettlementOwnerDetailEnum.FinalPaymentStatus.NO_REQUIRE);
query.eq(SettlementOwnerDetail::getInvoiceStatus,param.getInvoiceStatus());
query.like(StringUtils.isNotBlank(param.getOwnerName()),SettlementOwnerDetail :: getOwnerName,param.getOwnerName());
query.eq(StringUtils.isNotBlank(param.getSettlementNo()),SettlementOwnerDetail :: getSettlementNo,param.getSettlementNo());
query.eq(StringUtils.isNotBlank(param.getChildNo()),SettlementOwnerDetail :: getChildNo,param.getChildNo());
query.like(StringUtils.isNotBlank(param.getInvoicingCompanyShorterName()),SettlementOwnerDetail :: getInvoicingCompanyShorterName,param.getInvoicingCompanyShorterName());
query.eq(Objects.nonNull(param.getInvoiceType()),SettlementOwnerDetail :: getInvoiceType,param.getInvoiceType());
query.between(StringUtils.isNotBlank(param.getBeginTime()) && StringUtils.isNotBlank(param.getEndTime()),SettlementOwnerDetail::getCreateTime,param.getBeginTime(),param.getEndTime());
query.between(StringUtils.isBlank(param.getBeginTime()) || StringUtils.isBlank(param.getEndTime()),SettlementOwnerDetail::getCreateTime,LocalDateTime.now().minusMonths(3),LocalDateTime.now());
query.orderByAsc(SettlementOwnerDetail::getCreateTime);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
}
@Override
public void updateSettlementMerge(String settlementNo, List<String> settlementNos) {
update(lUdWrapper()
......
......@@ -21,6 +21,7 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai
boolean updateInvoiceTypeAndPrepayFreightFlag(SettlementDriverDetail item);
boolean updateSettlementNo(SettlementDriverDetail item);
boolean updateCompany(List<Integer> idList, Integer companyId, String companyShorterName, String companyGroupCode);
Optional<SettlementDriverDetail> getByChildNo(String childNo);
......@@ -39,4 +40,6 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai
SettlementDriverDetail selectLoanTypeFlag(String orderNo);
List<SettlementDriverDetail> selectListByLoanFlag(Integer code);
List<SettlementDriverDetail> findListByIdList(List<Integer> idList);
}
......@@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.settle.SettlementOrderChildRiskMapper;
import com.clx.performance.model.settle.SettlementOrderChildRisk;
import com.clx.performance.param.pc.carrier.PageSettlementOrderChildRiskParam;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
public interface SettlementOrderChildRiskDao
extends BaseDao<SettlementOrderChildRiskMapper,
SettlementOrderChildRisk, Integer> {
Optional<SettlementOrderChildRisk> getById(Integer id);
Optional<SettlementOrderChildRisk> findLastByChildNo(String childNo);
IPage<SettlementOrderChildRisk> pageSettlementOrderChildRisk(PageSettlementOrderChildRiskParam param);
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ import com.clx.performance.mapper.settle.SettlementOwnerDetailMapper;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.msl.common.base.Optional;
......@@ -22,6 +23,8 @@ import java.util.List;
*/
public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailMapper, SettlementOwnerDetail, Integer> {
boolean updateInvoiceTypeStatus(SettlementOwnerDetail item);
boolean updateClearInvoiceCompany(SettlementOwnerDetail item);
boolean updateInvoiceType(SettlementOwnerDetail item);
boolean updatePayStatus(SettlementOwnerDetail item);
boolean updateSettlementNo(SettlementOwnerDetail item);
......@@ -35,9 +38,10 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
List<SettlementOwnerDetail> getBySettlementNoAndInvoiceType(String settlementNo, Integer invoiceType, Integer invoiceStatus);
IPage<SettlementOwnerDetail> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param);
IPage<SettlementOwnerDetail> pageInvoiceOwnerSettlementOrderDetailList(PageInvoiceOwnerSettlementOwnerDetailParam param);
IPage<SettlementOwnerDetail> pageSettlementOwnerDetail(PageCarrierSettlementOwnerDetailParam param);
Integer getInvoiceType(String orderNo);
......
......@@ -6,6 +6,7 @@ import com.clx.performance.vo.pc.broker.TransportVO;
public interface BrokerService {
void orderChildSync(TransportParam param);
void orderChildUpdate(TransportParam param);
TransportVO getOrderChildStatus(String childNo);
......
......@@ -32,6 +32,19 @@ public class BrokerServiceImpl implements BrokerService {
}
log.info("运单同步网络货运, result:{}", JSON.toJSONString(result));
}
@Override
public void orderChildUpdate(TransportParam param) {
param.setUserCode(settlementConfig.getBrokerUserCode());
Result<Object> result = brokerFeign.modifyTransport(param);
if (result.getCode() != 0) {
log.info("运单更新网络货运失败, msg:{}", result.getMsg());
throw new ServiceSystemException(ResultEnum.FEIGN_ERROR, result.getMsg());
}
log.info("运单更新网络货运, result:{}", JSON.toJSONString(result));
}
@Override
public TransportVO getOrderChildStatus(String childNo) {
......
......@@ -21,6 +21,12 @@ public interface BrokerFeign {
@RequestMapping(method = RequestMethod.POST, value = "/broker-service/open/transport/saveTransport")
Result<Object> saveTransport(@RequestBody TransportParam param);
/**
* 运单更新
*/
@RequestMapping(method = RequestMethod.POST, value = "/broker-service/open/transport/modifyTransport")
Result<Object> modifyTransport(@RequestBody TransportParam param);
@RequestMapping(value = "/broker-service/open/transport/getTransportByChildNo", method = RequestMethod.GET)
Result<TransportVO> getTransportByChildNo(@RequestParam @NotBlank(message = "运单编号不能为空") String orderCode,
@RequestParam @NotNull(message = "userCode不能为空") String userCode,
......
......@@ -119,6 +119,7 @@ public class OrderChildSyncTransportListener {
}
else{
settlementOwnerDetail.setInvoiceType(SettlementOwnerEnum.InvoiceType.ONLINE.getCode());
try{
// 同步broker
orderChildBrokerService.orderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
......
package com.clx.performance.listener.settle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.SettlementOrderChildRiskProcessMqParam;
import com.clx.performance.vo.mq.SettlementStatisticsMqParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 统计 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class SettlementRiskProcessListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_QUEUE)
public void process(Message message) {
try{
log.info("结算-风控处理, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementOrderChildRiskProcessMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-风控处理 失败,msg:{}", ExceptionUtils.getStackTrace(e));
}
}
private void process(SettlementOrderChildRiskProcessMqParam mq){
settlementMqHandlerService.riskProcess(mq);
}
}
......@@ -63,6 +63,7 @@ public class SettlementOwnerDetail implements HasKey<Integer> {
private BigDecimal invoiceServiceFee; //开票服务费(分)
private BigDecimal invoiceServiceFeeRate; //开票服务率
private Integer finalPaymentStatus; //尾款状态 0-否,1-是,2-无需支付
private Integer invoiceTypeStatus; // 开票标识状态:0未获取 1获取中 2获取成功 3获取失败
private Integer invoiceStatus; //开票状态 0-否,1-是,2-无需开票
private Integer invoicingCompanyId; //开票公司id
private String invoicingCompanyShorterName; //开票公司简称
......
......@@ -9,4 +9,6 @@ public interface OrderChildBrokerService {
void orderChildSync(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail);
void orderChildUpdate(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail);
}
......@@ -2378,8 +2378,9 @@ public class OrderChildServiceImpl implements OrderChildService {
fieldList.add(new ExcelField(15, "接单时间", "payTime", 5000));
fieldList.add(new ExcelField(16, "完成时间", "finishTime", 5000));
fieldList.add(new ExcelField(17, "发货地址", "sendAddress", 10000));
fieldList.add(new ExcelField(18, "收货地址", "receiveAddress", 10000));
fieldList.add(new ExcelField(17, "磅单审核通过时间", "poundAuditTime", 5000));
fieldList.add(new ExcelField(18, "发货地址", "sendAddress", 10000));
fieldList.add(new ExcelField(19, "收货地址", "receiveAddress", 10000));
// 组装数据
List<List<ExcelData>> dataList = new ArrayList<>();
......@@ -2412,6 +2413,7 @@ public class OrderChildServiceImpl implements OrderChildService {
rowData.add(new ExcelData(dto.getPayTime()));
rowData.add(new ExcelData(dto.getFinishTime()));
rowData.add(new ExcelData(dto.getPoundAuditTime()));
rowData.add(new ExcelData(dto.getSendAddress()));
rowData.add(new ExcelData(dto.getReceiveAddress()));
......
......@@ -6,7 +6,9 @@ import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.performance.dao.OrderChildImageDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.PowerTypeEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.extranal.broker.BrokerService;
import com.clx.performance.extranal.order.InvoicingCompanyService;
import com.clx.performance.model.OrderChild;
......@@ -54,12 +56,37 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
private OrderChildImageDao orderChildImageDao;
@Autowired
private InvoicingCompanyService invoicingCompanyService;
@Autowired
private SettlementOwnerDetailDao settlementOwnerDetailDao;
@Override
public void orderChildSync(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail) {
TransportParam transportParam = buildParam(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
// 更新状态
settlementOwnerDetail.setInvoiceTypeStatus(SettlementOwnerDetailEnum.InvoiceTypeStatus.PROCESSING.getCode());
settlementOwnerDetailDao.updateInvoiceTypeStatus(settlementOwnerDetail);
brokerService.orderChildSync(transportParam);
}
@Override
public void orderChildUpdate(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail, SettlementDriverDetail settlementDriverDetail) {
TransportParam transportParam = buildParam(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
// 更新状态
settlementOwnerDetail.setInvoiceTypeStatus(SettlementOwnerDetailEnum.InvoiceTypeStatus.PROCESSING.getCode());
settlementOwnerDetailDao.updateInvoiceTypeStatus(settlementOwnerDetail);
brokerService.orderChildSync(transportParam);
brokerService.orderChildSync(transportParam);
}
private TransportParam buildParam(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
SettlementDriverDetail settlementDriverDetail){
String host = documentFeign.getHost().getData();
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderGoods.getOrderNo());
......@@ -244,10 +271,13 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
orderChildInfo.setLoadTime(DateUtils.formatDateTime(orderChild.getLoadTime()).get());
orderChildInfo.setUnloadTime(DateUtils.formatDateTime(orderChild.getUnloadTime()).get());
orderChildInfo.setPayFinishedTime(DateUtils.formatDateTime(orderChild.getConfirmTime()).get());
orderChildInfo.setPoundTime(DateUtils.formatDateTime(settlementOwnerDetail.getPoundAuditTime()).get());
orderChildInfo.setReceiveTare(orderChild.getUnloadTare());
orderChildInfo.setReceiveRough(orderChild.getUnloadRough());
orderChildInfo.setReceiveNet(orderChild.getUnloadNet());
orderChildInfo.setInvoiceFlag(settlementOwnerDetail.getInvoiceType());
orderChildInfo.setInvoicePlatform(settlementOwnerDetail.getInvoicingCompanyShorterName());
transportParam.setOrder(orderInfo);
transportParam.setOrderChildImage(imageList);
......@@ -256,6 +286,7 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
transportParam.setOrderChildTruck(truckInfo);
transportParam.setOrderChild(orderChildInfo);
brokerService.orderChildSync(transportParam);
return transportParam;
}
}
......@@ -28,6 +28,7 @@ import com.clx.performance.param.pc.payment.PayParam;
import com.clx.performance.param.pc.payment.PayPlatformFeeParam;
import com.clx.performance.service.OrderChildLogService;
import com.clx.performance.service.PaymentService;
import com.clx.performance.service.broker.OrderChildBrokerService;
import com.clx.performance.service.impl.UniqueOrderNumService;
import com.clx.performance.service.settle.*;
import com.clx.performance.utils.LocalDateTimeUtils;
......@@ -130,6 +131,10 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Autowired
private SettlementOrderChildRiskDao settlementOrderChildRiskDao;
@Autowired
private OrderChildBrokerService orderChildBrokerService;
@Override
@Transactional(rollbackFor = Exception.class)
public void settlementStatistics(SettlementStatisticsMqParam mq) {
......@@ -251,6 +256,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
return;
}
if (settlementOwnerDetail.getInvoiceType() != null) {return;}
if (!Objects.equals(settlementOwnerDetail.getInvoiceTypeStatus(), SettlementOwnerDetailEnum.InvoiceTypeStatus.PROCESSING.getCode())){
return;
}
try {
// 获取状态
......@@ -267,10 +275,17 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
// remark += result.getRiskReason();
// }
if (Objects.equals(result.getSyncStatus(), 0)) {
return;
}
// 同步失败
if (Objects.equals(result.getSyncStatus(), 2)) {
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
remark += result.getSyncMsg();
// 更新状态
settlementOwnerDetail.setInvoiceTypeStatus(SettlementOwnerDetailEnum.InvoiceTypeStatus.FAIL.getCode());
settlementOwnerDetailDao.updateInvoiceTypeStatus(settlementOwnerDetail);
SettlementOrderChildRisk settlementOrderChildRisk = new SettlementOrderChildRisk();
settlementOrderChildRisk.setChildNo(orderChild.getChildNo());
......@@ -285,10 +300,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementOrderChildRiskDao.saveEntity(settlementOrderChildRisk);
}
if (Objects.equals(result.getSyncStatus(), 0)) {
return;
}
// 更新状态
settlementOwnerDetail.setInvoiceTypeStatus(SettlementOwnerDetailEnum.InvoiceTypeStatus.SUCCESS.getCode());
settlementOwnerDetailDao.updateInvoiceTypeStatus(settlementOwnerDetail);
// 发送mq (结算)
settlementMqService.settle(orderChild.getChildNo(), invoiceType, remark);
......@@ -658,6 +672,48 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
return uniqueOrderNumService.getUniqueOrderNum(com.msl.common.utils.LocalDateTimeUtils.convertLocalDateTimeToString(LocalDateTime.now(), com.msl.common.utils.LocalDateTimeUtils.DATE_DAY));
}
@Override
public void riskProcess(SettlementOrderChildRiskProcessMqParam mq) {
SettlementOrderChildRisk settlementOrderChildRisk = settlementOrderChildRiskDao.getById(mq.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(settlementOrderChildRisk.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(settlementOrderChildRisk.getProcessMethod(), SettlementOrderChildRiskEnum.ProcessMethod.CONVERT_ORDINARY.getCode())){
settlementOwnerDetail.setInvoicingCompanyId(null);
settlementOwnerDetail.setInvoicingCompanyShorterName(null);
settlementOwnerDetail.setInvoicingCompanyGroupCode(null);
settlementOwnerDetailDao.updateClearInvoiceCompany(settlementOwnerDetail);
// 发送mq (结算)
settlementMqService.settle(settlementOrderChildRisk.getChildNo(),
SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(), settlementOrderChildRisk.getRiskRemark());
}
else if (Objects.equals(settlementOrderChildRisk.getProcessMethod(), SettlementOrderChildRiskEnum.ProcessMethod.SYNC_RETRY.getCode())){
// 更新状态
settlementOwnerDetail.setInvoiceTypeStatus(SettlementOwnerDetailEnum.InvoiceTypeStatus.PROCESSING.getCode());
settlementOwnerDetailDao.updateInvoiceTypeStatus(settlementOwnerDetail);
OrderChild orderChild = orderChildDao.getByChildNo(settlementOrderChildRisk.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
settlementOwnerDetail.setInvoiceType(SettlementOwnerEnum.InvoiceType.ONLINE.getCode());
try{
// 同步broker
orderChildBrokerService.orderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
} catch (Exception e) {
log.info("当前OrderChildSyncTransportListener监听同步网络货运失败,运单号{}, 错误信息{}", orderChild.getChildNo(), ExceptionUtils.getStackTrace(e));
}
}
}
private BigDecimal invoiceFreightCalc(Integer settlementWay, BigDecimal invoiceServiceFeeRate, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
......
......@@ -106,4 +106,16 @@ public class SettlementMqServiceImpl implements SettlementMqService {
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void riskProcess(Integer id) {
SettlementOrderChildRiskProcessMqParam mq = new SettlementOrderChildRiskProcessMqParam();
mq.setId(id);
MqDelay delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
}
......@@ -3,11 +3,15 @@ package com.clx.performance.service.impl.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.SettlementOrderChildRiskDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.enums.settle.SettlementOrderChildRiskEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.model.settle.SettlementOrderChildRisk;
import com.clx.performance.param.pc.carrier.PageSettlementOrderChildRiskParam;
import com.clx.performance.param.pc.owner.settle.OwnerSettlementOrderChildRiskProcessUpdateParam;
import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.service.settle.SettlementOrderChildRiskService;
import com.clx.performance.struct.settle.SettlementOrderChildRiskStruct;
import com.clx.performance.utils.excel.ExcelData;
......@@ -16,20 +20,48 @@ import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementDriverDetailVO;
import com.clx.performance.vo.pc.carrier.settle.SettlementOrderChildRiskVO;
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.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Service
@Slf4j
@AllArgsConstructor
public class SettlementOrderChildRiskServiceImpl implements SettlementOrderChildRiskService {
private final SettlementOrderChildRiskDao settlementOrderChildRiskDao;
private final SettlementOrderChildRiskStruct settlementOrderChildRiskStruct;
@Autowired
private SettlementOrderChildRiskDao settlementOrderChildRiskDao;
@Autowired
private SettlementOrderChildRiskStruct settlementOrderChildRiskStruct;
@Autowired
private SettlementMqService settlementMqService;
@Override
public void updateRiskProcess(OwnerSettlementOrderChildRiskProcessUpdateParam param) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
SettlementOrderChildRisk settlementOrderChildRisk = settlementOrderChildRiskDao.getById(param.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (Objects.equals(settlementOrderChildRisk.getStatus(), SettlementOrderChildRiskEnum.Status.PROCESSED.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_RISK_PROCESS_ERROR);
}
settlementOrderChildRisk.setStatus(SettlementOrderChildRiskEnum.Status.PROCESSED.getCode());
settlementOrderChildRisk.setProcessMethod(param.getProcessMethod());
settlementOrderChildRisk.setProcessBy(loginUserInfo.getUserName());
settlementOrderChildRisk.setProcessTime(LocalDateTime.now());
// 发送mq (风控处理)
settlementMqService.riskProcess(settlementOrderChildRisk.getId());
}
@Override
public IPage<SettlementOrderChildRiskVO> pageSettlementOrderChildRisk(
......
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
......@@ -13,8 +14,10 @@ import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerDetailCompanyUpdateParam;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.clx.performance.service.settle.SettlementCommonService;
......@@ -27,9 +30,10 @@ import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePendingSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.carrier.settle.CarrierPageSettlementOwnerDetailVO;
import com.clx.performance.vo.pc.owner.settle.PageOwnerSettlementOwnerDetailVO;
import lombok.AllArgsConstructor;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
......@@ -47,14 +51,22 @@ import java.util.Optional;
*/
@Service
@Slf4j
@AllArgsConstructor
public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailService {
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementOwnerDetailStruct settlementOwnerDetailStruct;
private final OrderChildDao orderChildDao;
private final SettlementDriverDetailDao settlementDriverDetailDao;
private final SettlementCommonService settlementCommonService;
@Autowired
private SettlementOwnerDetailDao settlementOwnerDetailDao;
@Autowired
private SettlementOwnerDetailStruct settlementOwnerDetailStruct;
@Autowired
private OrderChildDao orderChildDao;
@Autowired
private SettlementDriverDetailDao settlementDriverDetailDao;
@Autowired
private SettlementCommonService settlementCommonService;
......@@ -134,6 +146,18 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
return settlementOwnerDetail.getId();
}
@Override
public void updateInvoiceCompany(CarrierSettlementOwnerDetailCompanyUpdateParam param) {
List<SettlementDriverDetail> list = settlementDriverDetailDao.findListByIdList(param.getIdList());
for (SettlementDriverDetail item : list) {
if (item.getInvoicingCompanyId() != null) {throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_OWNER_DETAIL_COMPANY_ADD_ERROR);}
}
settlementDriverDetailDao.updateCompany(param.getIdList(), param.getCompanyId(), param.getCompanyShorterName(), param.getCompanyGroupCode());
}
/**
* 吨数计算
*/
......@@ -178,13 +202,20 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
@Override
public IPage<PageOwnerSettlementOwnerDetailVO> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param) {
IPage<SettlementOwnerDetail> settlementOwnerDetail = settlementOwnerDetailDao.pageOwnerSettlementOrderDetailList(param);
List<PageOwnerSettlementOwnerDetailVO> list = settlementOwnerDetailStruct.covertToOwnerList(settlementOwnerDetail.getRecords());
return new Page<PageOwnerSettlementOwnerDetailVO>().setRecords(list).setTotal(settlementOwnerDetail.getTotal()).setPages(settlementOwnerDetail.getPages());
}
@Override
public IPage<PageOwnerSettlementOwnerDetailVO> pageInvoiceOwnerSettlementOrderDetailList(PageInvoiceOwnerSettlementOwnerDetailParam param) {
IPage<SettlementOwnerDetail> settlementOwnerDetail = settlementOwnerDetailDao.pageInvoiceOwnerSettlementOrderDetailList(param);
List<PageOwnerSettlementOwnerDetailVO> list = settlementOwnerDetailStruct.covertToOwnerList(settlementOwnerDetail.getRecords());
return new Page<PageOwnerSettlementOwnerDetailVO>().setRecords(list).setTotal(settlementOwnerDetail.getTotal()).setPages(settlementOwnerDetail.getPages());
}
@Override
public SXSSFWorkbook exportOwnerSettlementOrderDetail(PageOwnerSettlementOwnerDetailParam param) {
param.setPage(1);
......@@ -517,4 +548,86 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
//创建excel
return ExcelUtil.create(excelSheet);
}
@Override
public SXSSFWorkbook exportInvoiceOwnerSettlementOrderDetail(PageInvoiceOwnerSettlementOwnerDetailParam param) {
param.setPage(1);
param.setPageSize(1000000);
IPage<PageOwnerSettlementOwnerDetailVO> settlementOwnerDetailPage = pageInvoiceOwnerSettlementOrderDetailList(param);
List<PageOwnerSettlementOwnerDetailVO> list = settlementOwnerDetailPage.getRecords();
// 组装表头
List<ExcelField> fieldList = new ArrayList<>();
fieldList.add(new ExcelField(0, "运单编号", "childNo", 5000));
fieldList.add(new ExcelField(1, "货主名称", "ownerName", 5000));
fieldList.add(new ExcelField(2, "结算方式", "settlementWay", 5000));
fieldList.add(new ExcelField(3, "开票公司", "invoicingCompanyShorterName", 5000));
fieldList.add(new ExcelField(4, "开票标识", "invoiceTypeMsg", 5000));
fieldList.add(new ExcelField(5, "货物名称", "goodsName", 5000));
fieldList.add(new ExcelField(6, "装车净重(吨)", "loadNet", 5000));
fieldList.add(new ExcelField(7, "卸车净重(吨)", "unloadNet", 5000));
fieldList.add(new ExcelField(8, "实际净重(吨)", "weight", 5000));
fieldList.add(new ExcelField(9, "平台运费报价", "freightPrice", 5000));
fieldList.add(new ExcelField(10, "应付运费", "freight", 5000));
fieldList.add(new ExcelField(11, "货损吨数", "lossWeight", 5000));
fieldList.add(new ExcelField(12, "货损单价", "lossPrice", 5000));
fieldList.add(new ExcelField(13, "货损金额", "lossFreight", 5000));
fieldList.add(new ExcelField(14, "管理费率(%)", "invoiceServiceFeeRate", 5000));
fieldList.add(new ExcelField(15, "管理费", "invoiceServiceFee", 5000));
fieldList.add(new ExcelField(16, "预付运费金额", "prepayFreight", 5000));
fieldList.add(new ExcelField(17, "借款抵扣金额", "loanFreight", 5000));
fieldList.add(new ExcelField(18, "结算金额", "settlementFreight", 5000));
fieldList.add(new ExcelField(19, "开票金额", "invoiceFreight", 5000));
fieldList.add(new ExcelField(20, "订单编号", "orderNo", 5000));
fieldList.add(new ExcelField(21, "结算单号", "settlementNo", 5000));
fieldList.add(new ExcelField(22, "结算子单号", "settlementSubNo", 5000));
fieldList.add(new ExcelField(23, "创建时间", "createTime", 5000));
fieldList.add(new ExcelField(24, "是否已付尾款", "finalPaymentStatusMsg", 5000));
fieldList.add(new ExcelField(25, "是否已开票", "invoiceStatusMsg", 5000));
fieldList.add(new ExcelField(26, "备注", "remark", 5000));
// 组装数据
List<List<ExcelData>> dataList = new ArrayList<>();
for (PageOwnerSettlementOwnerDetailVO vo : list) {
List<ExcelData> rowData = new ArrayList<>();
rowData.add(new ExcelData(vo.getChildNo()));
rowData.add(new ExcelData(vo.getOwnerName()));
rowData.add(new ExcelData(SettlementWayEnum.WayType.getMsgByCode(vo.getSettlementWay())));
rowData.add(new ExcelData(vo.getInvoicingCompanyShorterName()));
rowData.add(new ExcelData(vo.getInvoiceTypeMsg()));
rowData.add(new ExcelData(vo.getGoodsName()));
rowData.add(new ExcelData(vo.getLoadNet()));
rowData.add(new ExcelData(vo.getUnloadNet()));
rowData.add(new ExcelData(vo.getWeight()));
rowData.add(new ExcelData(vo.getFreightPrice()));
rowData.add(new ExcelData(vo.getFreight()));
rowData.add(new ExcelData(vo.getLossWeight()));
rowData.add(new ExcelData(vo.getLossPrice()));
rowData.add(new ExcelData(vo.getLossFreight()));
rowData.add(new ExcelData(vo.getInvoiceServiceFeeRate()));
rowData.add(new ExcelData(vo.getInvoiceServiceFee()));
rowData.add(new ExcelData(vo.getPrepayFreight()));
rowData.add(new ExcelData(vo.getLoanFreight()));
rowData.add(new ExcelData(vo.getSettlementFreight()));
rowData.add(new ExcelData(vo.getInvoiceFreight()));
rowData.add(new ExcelData(vo.getOrderNo()));
rowData.add(new ExcelData(vo.getSettlementNo()));
rowData.add(new ExcelData(vo.getSettlementSubNo()));
rowData.add(new ExcelData(vo.getCreateTime()));
rowData.add(new ExcelData(vo.getFinalPaymentStatusMsg()));
rowData.add(new ExcelData(vo.getInvoiceStatusMsg()));
rowData.add(new ExcelData(vo.getRemark()));
dataList.add(rowData);
}
ExcelSheet excelSheet = new ExcelSheet("待开票列表", "待开票列表", fieldList, dataList);
//创建excel
return ExcelUtil.create(excelSheet);
}
}
......@@ -27,6 +27,7 @@ import com.clx.performance.model.settle.SettlementLog;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.model.settle.SettlementPlatformAccount;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerDetailCompanyUpdateParam;
import com.clx.performance.param.pc.owner.*;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.service.PlatformAccountConfigService;
......@@ -171,6 +172,51 @@ public class SettlementOwnerServiceImpl implements SettlementOwnerService {
settlementOwnerDao.updateStatusBySettlementNo(settlementNo,status);
}
@Override
public void updateConfirmAccount(Integer id) {
//结算单详情
SettlementOwner settlementOwner = settlementOwnerDao.getEntityByKey(id).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//状态判断
if(!Objects.equals(settlementOwner.getStatus(), SettlementOwnerEnum.Status.TO_BE_ACCOUNT.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_ORDER_STATUS_CHANGED);
}
String settlementNo = settlementOwner.getSettlementNo();
settlementOwnerDao.updateStatusBySettlementNo(settlementNo
,SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode());
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----
settlementLogService.saveSettlementLog(settlementNo,
SettlementLogEnum.Type.PLATFORM_CONFIRM_ACCOUNT.getCode(),SettlementLogEnum.Type.PLATFORM_CONFIRM_ACCOUNT.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
}
@Override
public void updateCarrierConfirmSettlement(Integer id) {
//结算单详情
SettlementOwner settlementOwner =settlementOwnerDao.getEntityByKey(id).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//状态判断
if(!Objects.equals(settlementOwner.getStatus(), SettlementOwnerEnum.Status.PLATFORM_TO_BE_CONFIRMED.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.SETTLEMENT_ORDER_STATUS_CHANGED);
}
String settlementNo = settlementOwner.getSettlementNo();
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
//保存结算单日志----平台确认结算单
settlementLogService.saveSettlementLog(settlementNo,
SettlementLogEnum.Type.PLATFORM_TO_BE_CONFIRMED.getCode(),SettlementLogEnum.Type.PLATFORM_TO_BE_CONFIRMED.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),loginUserInfo.getUserNo(),loginUserInfo.getUserName());
int status = SettlementOwnerEnum.Status.OWNER_TO_BE_CONFIRMED.getCode();
//更新状态
settlementOwnerDao.updateStatusBySettlementNo(settlementNo,status);
}
@Override
public SettlementPlatformAccountVO getSettlementPlatformAccount() {
//平台账号
......
......@@ -23,4 +23,5 @@ public interface SettlementMqHandlerService {
String settlementNoGenerate();
void riskProcess(SettlementOrderChildRiskProcessMqParam mq);
}
......@@ -13,4 +13,7 @@ public interface SettlementMqService {
void invoiceStatusSync(String childNo);
void payStatusSync(String childNo);
void riskProcess(Integer id);
}
......@@ -2,11 +2,14 @@ package com.clx.performance.service.settle;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.carrier.PageSettlementOrderChildRiskParam;
import com.clx.performance.param.pc.owner.settle.OwnerSettlementOrderChildRiskProcessUpdateParam;
import com.clx.performance.vo.pc.carrier.settle.SettlementOrderChildRiskVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
public interface SettlementOrderChildRiskService {
void updateRiskProcess(OwnerSettlementOrderChildRiskProcessUpdateParam param);
IPage<SettlementOrderChildRiskVO> pageSettlementOrderChildRisk(PageSettlementOrderChildRiskParam param);
SXSSFWorkbook exportSettlementOrderChildRisk(PageSettlementOrderChildRiskParam param);
......
......@@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.pc.carrier.CarrierSettlementOwnerDetailCompanyUpdateParam;
import com.clx.performance.param.pc.carrier.ExportBatchOwnerSettlementDetailParam;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageInvoiceOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PagePendingCarrierSettlementOwnerDetailParam;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePendingSettlementOwnerDetailVO;
......@@ -23,8 +25,12 @@ public interface SettlementOwnerDetailService {
Integer saveSettlementDetail(OrderChild orderChild, OrderGoods orderGoods, SettlementDriverDetail settlementDriverDetail);
void updateInvoiceCompany(CarrierSettlementOwnerDetailCompanyUpdateParam param);
IPage<PageOwnerSettlementOwnerDetailVO> pageOwnerSettlementOrderDetailList(PageOwnerSettlementOwnerDetailParam param);
IPage<PageOwnerSettlementOwnerDetailVO> pageInvoiceOwnerSettlementOrderDetailList(PageInvoiceOwnerSettlementOwnerDetailParam param);
IPage<CarrierPageSettlementOwnerDetailVO> pageSettlementOwnerDetail(PageCarrierSettlementOwnerDetailParam param);
SXSSFWorkbook exportOwnerSettlementOrderDetail(PageOwnerSettlementOwnerDetailParam param);
......@@ -39,5 +45,5 @@ public interface SettlementOwnerDetailService {
SXSSFWorkbook exportBatchSettlementOwnerDetail(ExportBatchOwnerSettlementDetailParam param);
SXSSFWorkbook exportInvoiceOwnerSettlementOrderDetail(PageInvoiceOwnerSettlementOwnerDetailParam param);
}
......@@ -18,6 +18,8 @@ public interface SettlementOwnerService {
CarrierSettlementOwnerDetailVO getCarrierSettlementOwnerDetail(Integer id);
void updateConfirmSettlement(Integer id);
void updateConfirmAccount(Integer id);
void updateCarrierConfirmSettlement(Integer id);
SettlementPlatformAccountVO getSettlementPlatformAccount();
......
......@@ -118,10 +118,19 @@ public class OrderChildSqlProvider {
"freight_price,send_address,receive_address,load_rough,load_tare,unload_rough,unload_tare," +
"driver_name,driver_mobile,load_net,unload_net," +
"date_format(pay_time, '%Y-%m-%d %H:%i:%s') as payTime," +
"date_format(finish_time, '%Y-%m-%d %H:%i:%s') as finishTime");
"date_format(finish_time, '%Y-%m-%d %H:%i:%s') as finishTime," +
"date_format(pound_audit_time, '%Y-%m-%d %H:%i:%s') as poundAuditTime");
FROM("order_child ");
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("pay_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("pay_time <= #{param.endTime}");}
if (Objects.equals(param.getTimeType(),1)) {
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("pay_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("pay_time <= #{param.endTime}");}
}else if (Objects.equals(param.getTimeType(),2)) {
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("pound_audit_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("pound_audit_time <= #{param.endTime}");}
}else if (Objects.equals(param.getTimeType(),3)) {
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("finish_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("finish_time <= #{param.endTime}");}
}
if (StringUtils.isNotBlank(param.getOrderGoodsNo())) {WHERE("order_goods_no = #{param.orderGoodsNo}");}
if (StringUtils.isNotBlank(param.getChildNo())) {WHERE("child_no = #{param.childNo}");}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论