Compare commits

...

3 Commits

Author SHA1 Message Date
shenyifei
3c2cb917c5 feat(order): 更新订单审核流程并添加审核返回值
- 修改OrderController中的审核相关接口,统一返回AuditVO对象
- 更新OrderServiceI接口,将审核方法的返回值从void改为AuditVO
- 在订单相关命令类中添加auditId字段,用于关联审核记录
- 调整订单状态枚举,移除已驳回状态,重新定义状态码
- 更新成本和经销商实体,添加默认标识和初始车次号相关字段
- 修改订单审核流程的执行器,统一返回审核结果对象
- 修正订单发货实体中经销商ID字段为必填项
- 调整Order实体中的发货信息列表类型定义
2025-12-28 09:24:57 +08:00
shenyifei
6d5b4e001c feat(supplier): 添加银行名称字段并完善供应商信息
- 在SupplierCreateCmd中添加银行名称字段并设置为必填
- 更新OrderSupplier相关DTO和实体类,添加银行名称字段
- 在SupplierVO和OrderSupplierVO中增加银行名称属性
- 完善WxMaOcrBankCardVO,添加银行名称字段支持
- 在数据库实体OrderSupplierDO和SupplierDO中增加银行名称映射
- 更新SupplierCreateCmd中的收款人姓名和手机号为必填字段
- 在Mapper XML文件中添加银行名称字段映射
- 实现微信OCR银行卡识别时通过API获取银行名称功能
- 添加微信银行信息查询相关的请求和响应数据结构
2025-12-25 11:17:51 +08:00
shenyifei
3824c80899 feat(order): 添加发货单类型字段并优化相关实体和映射
- 新增 OrderShipTypeEnum 枚举定义发货单类型:采购发货、调货发货、改签发货、退货发货
- 在 OrderShip、OrderShipVO、OrderShipPageQry 等 DTO 中添加 type 字段
- 将 OrderShipItem 的 itemId 字段重命名为 orderShipItemId 并更新相关映射
- 修改 OrderShipDO 实体将 orderVehicleDO 替换为 orderDO 并更新映射关系
- 更新 OrderShipAssembler 和 OrderShipConvert 中的映射配置
- 修复 OrderGatewayImpl 中的发货单编号前缀从 SO 改为 FH
- 修正 OrderShipItemDO 的主键字段名称和相关查询逻辑
- 更新数据库表名 order 为 `order` 以避免关键字冲突
- 修改 OrderShipMapper.xml 和 OrderShipItemMapper.xml 中的字段映射
- 优化 OrderShipGatewayImpl 中的分页查询逻辑,使用订单信息替代车辆信息
2025-12-24 11:34:55 +08:00
72 changed files with 780 additions and 296 deletions

View File

@ -10,6 +10,7 @@ import com.alibaba.cola.dto.SingleResponse;
import com.xunhong.erp.turbo.api.biz.api.OrderServiceI;
import com.xunhong.erp.turbo.api.biz.dto.cmd.*;
import com.xunhong.erp.turbo.api.biz.dto.qry.*;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.api.biz.dto.vo.OrderVO;
import com.xunhong.erp.turbo.api.rbac.dto.constants.RoleConstant;
import com.xunhong.erp.turbo.api.user.api.AdminServiceI;
@ -86,49 +87,49 @@ public class OrderController {
@SaCheckLogin
@PostMapping("submitReviewOrder")
@Operation(summary = "采购订单提审(产地/市场采购员提审)", method = "POST")
public Response submitReviewOrder(@RequestBody @Validated OrderSubmitReviewCmd orderSubmitReviewCmd) {
orderService.submitReview(orderSubmitReviewCmd);
return Response.buildSuccess();
public SingleResponse<AuditVO> submitReviewOrder(@RequestBody @Validated OrderSubmitReviewCmd orderSubmitReviewCmd) {
AuditVO auditVO = orderService.submitReview(orderSubmitReviewCmd);
return SingleResponse.of(auditVO);
}
@SaCheckLogin
@PostMapping("withdrawReviewOrder")
@Operation(summary = "采购订单撤回提审(产地/市场采购员撤回提审)", method = "POST")
public Response withdrawReviewOrder(@RequestBody @Validated OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
orderService.withdrawReview(orderWithdrawReviewCmd);
return Response.buildSuccess();
public SingleResponse<AuditVO> withdrawReviewOrder(@RequestBody @Validated OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
AuditVO auditVO = orderService.withdrawReview(orderWithdrawReviewCmd);
return SingleResponse.of(auditVO);
}
@SaCheckLogin
@PostMapping("approveOrder")
@Operation(summary = "采购订单审核(审核员审核)", method = "POST")
public Response approveOrder(@RequestBody @Validated OrderApproveCmd orderApproveCmd) {
orderService.approve(orderApproveCmd);
return Response.buildSuccess();
public SingleResponse<AuditVO> approveOrder(@RequestBody @Validated OrderApproveCmd orderApproveCmd) {
AuditVO auditVO = orderService.approve(orderApproveCmd);
return SingleResponse.of(auditVO);
}
@SaCheckLogin
@PostMapping("rejectApproveOrder")
@Operation(summary = "采购订单驳回审核(审核员驳回审核)", method = "POST")
public Response rejectApproveOrder(@RequestBody @Validated OrderRejectApproveCmd orderRejectApproveCmd) {
orderService.rejectApprove(orderRejectApproveCmd);
return Response.buildSuccess();
public SingleResponse<AuditVO> rejectApproveOrder(@RequestBody @Validated OrderRejectApproveCmd orderRejectApproveCmd) {
AuditVO auditVO = orderService.rejectApprove(orderRejectApproveCmd);
return SingleResponse.of(auditVO);
}
@SaCheckLogin
@PostMapping("finalApproveOrder")
@Operation(summary = "采购订单审批(老板审批)", method = "POST")
public Response finalApproveOrder(@RequestBody @Validated OrderFinalApproveCmd orderFinalApproveCmd) {
orderService.finalApprove(orderFinalApproveCmd);
return Response.buildSuccess();
public SingleResponse<AuditVO> finalApproveOrder(@RequestBody @Validated OrderFinalApproveCmd orderFinalApproveCmd) {
AuditVO auditVO = orderService.finalApprove(orderFinalApproveCmd);
return SingleResponse.of(auditVO);
}
@SaCheckLogin
@PostMapping("rejectFinalOrder")
@Operation(summary = "采购订单驳回审批(老板驳回审批)", method = "POST")
public Response rejectFinalOrder(@RequestBody @Validated OrderRejectFinalCmd orderRejectFinalCmd) {
orderService.rejectFinal(orderRejectFinalCmd);
return Response.buildSuccess();
public SingleResponse<AuditVO> rejectFinalOrder(@RequestBody @Validated OrderRejectFinalCmd orderRejectFinalCmd) {
AuditVO auditVO = orderService.rejectFinal(orderRejectFinalCmd);
return SingleResponse.of(auditVO);
}
@SaCheckLogin

View File

@ -3,13 +3,16 @@ package com.xunhong.erp.turbo.biz.app.assembler;
import com.xunhong.erp.turbo.api.biz.dto.vo.OrderShipVO;
import com.xunhong.erp.turbo.biz.domain.entity.OrderShip;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.NullValueCheckStrategy;
/**
* @author shenyifei
*/
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {OrderAssembler.class})
public interface OrderShipAssembler {
@Mapping(target = "farmerInfo", ignore = true)
@Mapping(target = "orderVO", source = "order")
OrderShipVO toOrderShipVO(OrderShip orderShip);
}

View File

@ -1,10 +1,15 @@
package com.xunhong.erp.turbo.biz.app.executor.cmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderApproveCmd;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.app.assembler.AuditAssembler;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import com.xunhong.erp.turbo.biz.domain.gateway.OrderGateway;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* @author shenyifei
@ -15,8 +20,15 @@ import org.springframework.stereotype.Component;
public class OrderApproveCmdExe {
private final OrderGateway orderGateway;
private final AuditGateway auditGateway;
public void execute(OrderApproveCmd orderApproveCmd) {
private final AuditAssembler auditAssembler;
@Transactional
public AuditVO execute(OrderApproveCmd orderApproveCmd) {
Audit audit = auditGateway.approve(orderApproveCmd);
orderGateway.approve(orderApproveCmd);
return auditAssembler.toAuditVO(audit);
}
}

View File

@ -1,6 +1,10 @@
package com.xunhong.erp.turbo.biz.app.executor.cmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderFinalApproveCmd;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.app.assembler.AuditAssembler;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import com.xunhong.erp.turbo.biz.domain.gateway.ExpenseRecordGateway;
import com.xunhong.erp.turbo.biz.domain.gateway.OrderGateway;
import lombok.RequiredArgsConstructor;
@ -20,11 +24,17 @@ public class OrderFinalApproveCmdExe {
private final ExpenseRecordGateway expenseRecordGateway;
private final AuditGateway auditGateway;
private final AuditAssembler auditAssembler;
@Transactional
public void execute(OrderFinalApproveCmd orderFinalApproveCmd) {
public AuditVO execute(OrderFinalApproveCmd orderFinalApproveCmd) {
Audit audit = auditGateway.finalApprove(orderFinalApproveCmd);
orderGateway.finalApprove(orderFinalApproveCmd);
// 计提费计入发货日期的花销
expenseRecordGateway.addProvision(orderFinalApproveCmd.getOrderId());
return auditAssembler.toAuditVO(audit);
}
}

View File

@ -1,10 +1,15 @@
package com.xunhong.erp.turbo.biz.app.executor.cmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderRejectApproveCmd;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.app.assembler.AuditAssembler;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import com.xunhong.erp.turbo.biz.domain.gateway.OrderGateway;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* @author shenyifei
@ -15,8 +20,13 @@ import org.springframework.stereotype.Component;
public class OrderRejectApproveCmdExe {
private final OrderGateway orderGateway;
private final AuditGateway auditGateway;
private final AuditAssembler auditAssembler;
public void execute(OrderRejectApproveCmd orderRejectApproveCmd) {
@Transactional
public AuditVO execute(OrderRejectApproveCmd orderRejectApproveCmd) {
Audit audit = auditGateway.rejectApprove(orderRejectApproveCmd);
orderGateway.rejectApprove(orderRejectApproveCmd);
return auditAssembler.toAuditVO(audit);
}
}

View File

@ -1,10 +1,15 @@
package com.xunhong.erp.turbo.biz.app.executor.cmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderRejectFinalCmd;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.app.assembler.AuditAssembler;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import com.xunhong.erp.turbo.biz.domain.gateway.OrderGateway;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* @author shenyifei
@ -15,8 +20,14 @@ import org.springframework.stereotype.Component;
public class OrderRejectFinalCmdExe {
private final OrderGateway orderGateway;
private final AuditGateway auditGateway;
public void execute(OrderRejectFinalCmd orderRejectFinalCmd) {
private final AuditAssembler auditAssembler;
@Transactional
public AuditVO execute(OrderRejectFinalCmd orderRejectFinalCmd) {
Audit audit = auditGateway.rejectFinal(orderRejectFinalCmd);
orderGateway.rejectFinal(orderRejectFinalCmd);
return auditAssembler.toAuditVO(audit);
}
}

View File

@ -1,10 +1,15 @@
package com.xunhong.erp.turbo.biz.app.executor.cmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderSubmitReviewCmd;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.app.assembler.AuditAssembler;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import com.xunhong.erp.turbo.biz.domain.gateway.OrderGateway;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* @author shenyifei
@ -15,8 +20,15 @@ import org.springframework.stereotype.Component;
public class OrderSubmitReviewCmdExe {
private final OrderGateway orderGateway;
private final AuditAssembler auditAssembler;
public void execute(OrderSubmitReviewCmd orderSubmitReviewCmd) {
private final AuditGateway auditGateway;
@Transactional
public AuditVO execute(OrderSubmitReviewCmd orderSubmitReviewCmd) {
Audit audit = auditGateway.submitReview(orderSubmitReviewCmd);
orderGateway.submitReview(orderSubmitReviewCmd);
return auditAssembler.toAuditVO(audit);
}
}

View File

@ -1,10 +1,15 @@
package com.xunhong.erp.turbo.biz.app.executor.cmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderWithdrawReviewCmd;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.biz.app.assembler.AuditAssembler;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import com.xunhong.erp.turbo.biz.domain.gateway.OrderGateway;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* @author shenyifei
@ -15,8 +20,14 @@ import org.springframework.stereotype.Component;
public class OrderWithdrawReviewCmdExe {
private final OrderGateway orderGateway;
private final AuditGateway auditGateway;
public void execute(OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
private final AuditAssembler auditAssembler;
@Transactional
public AuditVO execute(OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
Audit audit = auditGateway.withdrawReview(orderWithdrawReviewCmd);
orderGateway.withdrawReview(orderWithdrawReviewCmd);
return auditAssembler.toAuditVO(audit);
}
}

View File

@ -3,6 +3,7 @@ package com.xunhong.erp.turbo.biz.app.service;
import com.xunhong.erp.turbo.api.biz.api.OrderServiceI;
import com.xunhong.erp.turbo.api.biz.dto.cmd.*;
import com.xunhong.erp.turbo.api.biz.dto.qry.*;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.api.biz.dto.vo.OrderVO;
import com.xunhong.erp.turbo.base.dto.PageDTO;
import com.xunhong.erp.turbo.biz.app.executor.cmd.*;
@ -75,33 +76,33 @@ public class OrderServiceImpl implements OrderServiceI {
}
@Override
public void approve(OrderApproveCmd orderApproveCmd) {
orderApproveCmdExe.execute(orderApproveCmd);
public AuditVO approve(OrderApproveCmd orderApproveCmd) {
return orderApproveCmdExe.execute(orderApproveCmd);
}
@Override
public void submitReview(OrderSubmitReviewCmd orderSubmitReviewCmd) {
orderSubmitReviewCmdExe.execute(orderSubmitReviewCmd);
public AuditVO submitReview(OrderSubmitReviewCmd orderSubmitReviewCmd) {
return orderSubmitReviewCmdExe.execute(orderSubmitReviewCmd);
}
@Override
public void withdrawReview(OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
orderWithdrawReviewCmdExe.execute(orderWithdrawReviewCmd);
public AuditVO withdrawReview(OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
return orderWithdrawReviewCmdExe.execute(orderWithdrawReviewCmd);
}
@Override
public void rejectApprove(OrderRejectApproveCmd orderRejectApproveCmd) {
orderRejectApproveCmdExe.execute(orderRejectApproveCmd);
public AuditVO rejectApprove(OrderRejectApproveCmd orderRejectApproveCmd) {
return orderRejectApproveCmdExe.execute(orderRejectApproveCmd);
}
@Override
public void finalApprove(OrderFinalApproveCmd orderFinalApproveCmd) {
orderFinalApproveCmdExe.execute(orderFinalApproveCmd);
public AuditVO finalApprove(OrderFinalApproveCmd orderFinalApproveCmd) {
return orderFinalApproveCmdExe.execute(orderFinalApproveCmd);
}
@Override
public void rejectFinal(OrderRejectFinalCmd orderRejectFinalCmd) {
orderRejectFinalCmdExe.execute(orderRejectFinalCmd);
public AuditVO rejectFinal(OrderRejectFinalCmd orderRejectFinalCmd) {
return orderRejectFinalCmdExe.execute(orderRejectFinalCmd);
}
@Override

View File

@ -64,6 +64,11 @@ public class Cost extends DTO {
*/
private Boolean status;
/**
* 是否默认
*/
private Boolean isDefault;
private List<Long> costItemIds;
private List<CostItem> costItemList;

View File

@ -138,4 +138,14 @@ public class Dealer extends DTO {
*/
private BigDecimal lossAmount;
/**
* 是否启用初始车次号
*/
private Boolean enableInitialTrainNo;
/**
* 初始车次号
*/
private Integer initialTrainNo;
}

View File

@ -52,7 +52,7 @@ public class Order extends DTO {
private OrderPricingMethodEnum pricingMethod;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
private OrderStateEnum state;
@ -129,6 +129,6 @@ public class Order extends DTO {
/**
* 采购订单发货信息
*/
private List<OrderShip> orderShipList;
private List<com.xunhong.erp.turbo.api.biz.dto.common.OrderShip> orderShipList;
}

View File

@ -92,7 +92,7 @@ public class OrderCost extends DTO {
private Order order;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
private OrderStateEnum poState;

View File

@ -75,7 +75,7 @@ public class OrderRebate extends DTO {
private Order order;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
private OrderStateEnum poState;

View File

@ -4,8 +4,8 @@ import com.alibaba.cola.domain.Entity;
import com.alibaba.cola.dto.DTO;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderCost;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderShipItem;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderVehicle;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipTypeEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -106,6 +106,11 @@ public class OrderShip extends DTO {
*/
private OrderShipStateEnum state;
/**
* 发货单类型1_采购发货2_调货发货3_改签发货4_退货发货
*/
private OrderShipTypeEnum type;
/**
* 备注
*/
@ -139,5 +144,5 @@ public class OrderShip extends DTO {
/**
* 订单运输表
*/
private OrderVehicle orderVehicle;
private Order order;
}

View File

@ -55,6 +55,11 @@ public class OrderSupplier extends DTO {
*/
private String idCard;
/**
* 银行名称
*/
private String bankName;
/**
* 银行卡号
*/
@ -216,7 +221,7 @@ public class OrderSupplier extends DTO {
private Order order;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
private OrderStateEnum poState;

View File

@ -41,6 +41,11 @@ public class Supplier extends DTO {
*/
private String phone;
/**
* 银行名称
*/
private String bankName;
/**
* 银行卡号
*/

View File

@ -1,7 +1,7 @@
package com.xunhong.erp.turbo.biz.domain.gateway;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xunhong.erp.turbo.api.biz.dto.cmd.AuditUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.*;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditPageQry;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditShowQry;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
@ -16,5 +16,17 @@ public interface AuditGateway {
Audit update(AuditUpdateCmd auditUpdateCmd);
Audit show(AuditShowQry auditShowQry);
Audit submitReview(OrderSubmitReviewCmd orderSubmitReviewCmd);
Audit withdrawReview(OrderWithdrawReviewCmd orderWithdrawReviewCmd);
Audit rejectApprove(OrderRejectApproveCmd orderRejectApproveCmd);
Audit finalApprove(OrderFinalApproveCmd orderFinalApproveCmd);
Audit rejectFinal(OrderRejectFinalCmd orderRejectFinalCmd);
Audit approve(OrderApproveCmd orderApproveCmd);
}

View File

@ -29,6 +29,8 @@ public interface DealerConvert {
@Mapping(target = "enableAccrualTax", source = "setting.enableAccrualTax")
@Mapping(target = "companyRebateRatio", source = "setting.companyRebateRatio")
@Mapping(target = "accrualTaxRatio", source = "setting.accrualTaxRatio")
@Mapping(target = "enableInitialTrainNo", source = "setting.enableInitialTrainNo")
@Mapping(target = "initialTrainNo", source = "setting.initialTrainNo")
@Mapping(target = "dealerPaymentAccountList", source = "dealerPaymentAccountDOList")
Dealer toDealer(DealerDO dealerDO);
@ -57,6 +59,8 @@ public interface DealerConvert {
dealerSettingDO.setShareAdjusted(dealerCreateCmd.getShareAdjusted());
dealerSettingDO.setEnableLoss(dealerCreateCmd.getEnableLoss());
dealerSettingDO.setLossAmount(dealerCreateCmd.getLossAmount());
dealerSettingDO.setEnableInitialTrainNo(dealerCreateCmd.getEnableInitialTrainNo());
dealerSettingDO.setInitialTrainNo(dealerCreateCmd.getInitialTrainNo());
return dealerSettingDO;
}

View File

@ -1,14 +1,9 @@
package com.xunhong.erp.turbo.biz.infrastructure.convert;
import com.xunhong.erp.turbo.api.biz.dto.cmd.*;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderCost;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderRebate;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderSupplier;
import com.xunhong.erp.turbo.api.biz.dto.common.*;
import com.xunhong.erp.turbo.biz.domain.entity.Order;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderCostDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderRebateDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderSupplierDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.*;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
@ -19,7 +14,7 @@ import java.util.List;
/**
* @author shenyifei
*/
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {OrderVehicleConvert.class, OrderCostConvert.class, OrderPackageConvert.class, OrderDealerConvert.class, OrderRebateConvert.class, OrderCompanyConvert.class, OrderPackageConvert.class, OrderShipItemConvert.class, OrderShipConvert.class})
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {OrderVehicleConvert.class, OrderCostConvert.class, OrderPackageConvert.class, OrderDealerConvert.class, OrderRebateConvert.class, OrderCompanyConvert.class, OrderPackageConvert.class})
public interface OrderConvert {
@Mapping(target = "orderShipList", source = "orderShipDOList")
@ -31,7 +26,7 @@ public interface OrderConvert {
@Mapping(target = "orderCostItemList", source = "orderCostItemDOList")
@Mapping(target = "orderSupplierList", source = "orderSupplierDOList")
@Mapping(target = "orderVehicle", source = "orderVehicleDO")
Order toOrder(OrderDO orderDO);
Order toOrder(OrderDO orderDO);
@Mapping(target = "orderShipDOList", ignore = true)
@Mapping(target = "orderCostItemDOList", ignore = true)
@ -187,5 +182,33 @@ public interface OrderConvert {
OrderRebateDO toOrderRebateDO(OrderRebate orderRebate);
OrderRebate toOrderRebate(OrderRebateDO orderRebateDO);
@Mapping(target = "file", ignore = true)
@Mapping(target = "orderDO", ignore = true)
@Mapping(target = "orderCostDOList", ignore = true)
@Mapping(target = "orderShipItemDOList", ignore = true)
@Mapping(target = "version", ignore = true)
@Mapping(target = "updatedAt", ignore = true)
@Mapping(target = "isDelete", ignore = true)
@Mapping(target = "createdAt", ignore = true)
@Mapping(target = "farmerInfo", ignore = true)
OrderShipDO toOrderShipDO(OrderShip orderShip);
List<OrderShip> toOrderShipList(List<OrderShipDO> orderShipDOList);
@Mapping(target = "picUrl", source = "file.picUrl")
@Mapping(target = "pdfUrl", source = "file.pdfUrl")
@Mapping(target = "orderShipItemList", source = "orderShipItemDOList")
OrderShip toOrderShip(OrderShipDO orderShipDO);
List<OrderShipItem> toOrderShipItemList(List<OrderShipItemDO> orderShipItemDOList);
OrderShipItem toOrderShipItem(OrderShipItemDO orderShipItemDO);
@Mapping(target = "version", ignore = true)
@Mapping(target = "updatedAt", ignore = true)
@Mapping(target = "isDelete", ignore = true)
@Mapping(target = "createdAt", ignore = true)
OrderShipItemDO toOrderShipItemDO(OrderShipItem orderShipItem);
}

View File

@ -3,7 +3,7 @@ package com.xunhong.erp.turbo.biz.infrastructure.convert;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderShipCreateCmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderShipGenerateDocumentCmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderShipUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderShip;
import com.xunhong.erp.turbo.biz.domain.entity.OrderShip;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipFileDO;
import org.mapstruct.Mapper;
@ -14,20 +14,21 @@ import org.mapstruct.NullValueCheckStrategy;
/**
* @author shenyifei
*/
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, uses = {OrderConvert.class})
public interface OrderShipConvert {
@Mapping(target = "picUrl", source = "file.picUrl")
@Mapping(target = "pdfUrl", source = "file.pdfUrl")
@Mapping(target = "orderVehicle", source = "orderVehicleDO")
@Mapping(target = "order", source = "orderDO")
@Mapping(target = "orderCostList", source = "orderCostDOList")
@Mapping(target = "orderShipItemList", source = "orderShipItemDOList")
com.xunhong.erp.turbo.biz.domain.entity.OrderShip toOrderShip(OrderShipDO orderShipDO);
OrderShip toOrderShip(OrderShipDO orderShipDO);
@Mapping(target = "type", ignore = true)
@Mapping(target = "file", ignore = true)
@Mapping(target = "dealerName", ignore = true)
@Mapping(target = "dealerId", ignore = true)
@Mapping(target = "orderVehicleDO", ignore = true)
@Mapping(target = "orderDO", ignore = true)
@Mapping(target = "orderCostDOList", ignore = true)
@Mapping(target = "warehouseName", ignore = true)
@Mapping(target = "warehouseId", ignore = true)
@ -39,10 +40,11 @@ public interface OrderShipConvert {
@Mapping(target = "createdAt", ignore = true)
OrderShipDO toOrderShipDO(OrderShipCreateCmd orderShipCreateCmd);
@Mapping(target = "type", ignore = true)
@Mapping(target = "file", ignore = true)
@Mapping(target = "dealerName", ignore = true)
@Mapping(target = "dealerId", ignore = true)
@Mapping(target = "orderVehicleDO", ignore = true)
@Mapping(target = "orderDO", ignore = true)
@Mapping(target = "orderId", ignore = true)
@Mapping(target = "orderCostDOList", ignore = true)
@Mapping(target = "warehouseName", ignore = true)
@ -59,10 +61,11 @@ public interface OrderShipConvert {
@Mapping(target = "createdAt", ignore = true)
void toOrderShipDO(@MappingTarget OrderShipDO orderShipDO, OrderShipUpdateCmd orderShipUpdateCmd);
@Mapping(target = "type", ignore = true)
@Mapping(target = "file", expression = "java(this.toOrderShipFileDO(orderShipGenerateDocumentCmd))")
@Mapping(target = "dealerName", ignore = true)
@Mapping(target = "dealerId", ignore = true)
@Mapping(target = "orderVehicleDO", ignore = true)
@Mapping(target = "orderDO", ignore = true)
@Mapping(target = "orderId", ignore = true)
@Mapping(target = "orderCostDOList", ignore = true)
@Mapping(target = "companyName", ignore = true)
@ -88,16 +91,5 @@ public interface OrderShipConvert {
orderShipFileDO.setPdfUrl(orderShipGenerateDocumentCmd.getPdfUrl());
return orderShipFileDO;
}
@Mapping(target = "file", ignore = true)
@Mapping(target = "orderVehicleDO", ignore = true)
@Mapping(target = "orderCostDOList", ignore = true)
@Mapping(target = "orderShipItemDOList", ignore = true)
@Mapping(target = "version", ignore = true)
@Mapping(target = "updatedAt", ignore = true)
@Mapping(target = "isDelete", ignore = true)
@Mapping(target = "createdAt", ignore = true)
@Mapping(target = "farmerInfo", ignore = true)
OrderShipDO toOrderShipDO(OrderShip orderShip);
}

View File

@ -19,11 +19,11 @@ public interface OrderShipItemConvert {
@Mapping(target = "createdAt", ignore = true)
OrderShipItemDO toOrderShipItemDO(OrderShipItem orderShipItem);
@Mapping(target = "itemId", ignore = true)
@Mapping(target = "orderShipItemId", ignore = true)
@Mapping(target = "orderShipId", ignore = true)
@Mapping(target = "version", ignore = true)
@Mapping(target = "updatedAt", ignore = true)
@Mapping(target = "isDelete", ignore = true)
@Mapping(target = "createdAt", ignore = true)
void toOrderShipItemDO(@MappingTarget OrderShipItemDO orderShipItemDO, OrderShipItem orderShipItem);
}
}

View File

@ -17,7 +17,7 @@ import java.time.LocalDateTime;
* @author shenyifei
*/
@Data
@TableName(value = "order_audit")
@TableName(value = "audit")
@EqualsAndHashCode(callSuper = true)
public class AuditDO extends BaseDO<AuditDO> {

View File

@ -82,6 +82,12 @@ public class CostDO extends BaseDO<CostDO> {
@TableField(value = "status")
private Boolean status;
/**
* 是否默认1_是0_否
*/
@TableField(value = "is_default")
private Boolean isDefault;
@TableField(exist = false)
private List<CostItemDO> costItemDOList;

View File

@ -77,4 +77,35 @@ public class DealerSettingDO extends DTO {
* 损耗金额
*/
private BigDecimal lossAmount;
/**
* 是否启用初始车次号
*/
private Boolean enableInitialTrainNo;
/**
* 初始车次号
*/
private Integer initialTrainNo;
public static DealerSettingDO getDefaultSetting() {
DealerSettingDO setting = new DealerSettingDO();
setting.setEnableShare(false);
setting.setShareRatio(new BigDecimal(0));
setting.setFreightCostFlag(false);
setting.setStrawMatCostFlag(false);
setting.setIncludePackingFlag(false);
setting.setIncludeFreightFlag(false);
setting.setEnableAccrualTax(false);
setting.setAccrualTaxRatio(new BigDecimal(0));
setting.setEnableCompanyRebate(false);
setting.setCompanyRebateRatio(new BigDecimal(0));
setting.setShareAdjusted(false);
setting.setEnableLoss(false);
setting.setLossAmount(new BigDecimal(0));
setting.setEnableInitialTrainNo(false);
setting.setInitialTrainNo(0);
return setting;
}
}

View File

@ -18,7 +18,7 @@ import java.util.List;
* @author shenyifei
*/
@Data
@TableName(value = "order")
@TableName(value = "`order`")
@EqualsAndHashCode(callSuper = true)
public class OrderDO extends BaseDO<OrderDO> {
@ -59,7 +59,7 @@ public class OrderDO extends BaseDO<OrderDO> {
private OrderPricingMethodEnum pricingMethod;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
@TableField(value = "state")
private OrderStateEnum state;

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipTypeEnum;
import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -118,6 +119,12 @@ public class OrderShipDO extends BaseDO<OrderShipDO> {
@TableField(value = "state")
private OrderShipStateEnum state;
/**
* 发货单类型1_采购发货2_调货发货3_改签发货4_退货发货
*/
@TableField(value = "type")
private OrderShipTypeEnum type;
/**
* 发货单文件
*/
@ -154,6 +161,6 @@ public class OrderShipDO extends BaseDO<OrderShipDO> {
private List<OrderCostDO> orderCostDOList;
@TableField(exist = false)
private OrderVehicleDO orderVehicleDO;
private OrderDO orderDO;
}

View File

@ -21,8 +21,8 @@ public class OrderShipItemDO extends BaseDO<OrderShipItemDO> {
/**
* 发货单子项ID
*/
@TableId(value = "item_id", type = IdType.ASSIGN_ID)
private Long itemId;
@TableId(value = "order_ship_item_id", type = IdType.ASSIGN_ID)
private Long orderShipItemId;
/**
* 发货单ID

View File

@ -53,6 +53,7 @@ public class OrderSupplierDO extends BaseDO<OrderSupplierDO> {
/**
* 收款人姓名
*/
@TableField(value = "payee_name")
private String payeeName;
/**
@ -61,6 +62,12 @@ public class OrderSupplierDO extends BaseDO<OrderSupplierDO> {
@TableField(value = "id_card")
private String idCard;
/**
* 银行名称
*/
@TableField(value = "bank_name")
private String bankName;
/**
* 银行卡号
*/

View File

@ -47,6 +47,12 @@ public class SupplierDO extends BaseDO<SupplierDO> {
@TableField(value = "phone")
private String phone;
/**
* 银行名称
*/
@TableField(value = "bank_name")
private String bankName;
/**
* 银行卡号
*/

View File

@ -5,10 +5,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xunhong.erp.turbo.api.biz.dto.cmd.AuditUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.*;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditSubjectTypeEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.AuditTypeEnum;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditPageQry;
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditShowQry;
import com.xunhong.erp.turbo.api.biz.exception.BizErrorCode;
import com.xunhong.erp.turbo.api.biz.exception.BizException;
import com.xunhong.erp.turbo.biz.domain.entity.Audit;
import com.xunhong.erp.turbo.biz.domain.gateway.AuditGateway;
import com.xunhong.erp.turbo.biz.infrastructure.convert.AuditConvert;
@ -19,6 +23,7 @@ import com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -32,14 +37,14 @@ import java.util.stream.Collectors;
@Repository
@RequiredArgsConstructor
public class AuditGatewayImpl implements AuditGateway {
private final AuditMapper auditMapper;
private final AuditConvert auditConvert;
private final AuditMapper auditMapper;
private final AuditConvert auditConvert;
private final OrderMapper orderMapper;
@Override
public IPage<Audit> page(AuditPageQry auditPageQry) {
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
@Override
public IPage<Audit> page(AuditPageQry auditPageQry) {
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
queryWrapper.eq(Objects.nonNull(auditPageQry.getAuditId()), AuditDO::getAuditId, auditPageQry.getAuditId());
queryWrapper.eq(Objects.nonNull(auditPageQry.getType()), AuditDO::getType, auditPageQry.getType());
@ -48,8 +53,8 @@ public class AuditGatewayImpl implements AuditGateway {
queryWrapper.orderByDesc(AuditDO::getCreatedAt);
IPage<AuditDO> page = new Page<>(auditPageQry.getPageIndex(), auditPageQry.getPageSize());
page = auditMapper.selectPage(page, queryWrapper);
IPage<AuditDO> page = new Page<>(auditPageQry.getPageIndex(), auditPageQry.getPageSize());
page = auditMapper.selectPage(page, queryWrapper);
Set<Long> orderIdList = page.getRecords().stream().filter(auditDO -> auditDO.getSubjectType().equals(AuditSubjectTypeEnum.PURCHASE_ORDER)).map(AuditDO::getSubjectId).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(orderIdList)) {
List<OrderDO> orderDOList = orderMapper.selectByOrderIdList(orderIdList);
@ -61,10 +66,10 @@ public class AuditGatewayImpl implements AuditGateway {
}
return page.convert(auditConvert::toAudit);
}
}
@Override
public Audit update(AuditUpdateCmd auditUpdateCmd) {
@Override
public Audit update(AuditUpdateCmd auditUpdateCmd) {
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
queryWrapper.eq(AuditDO::getAuditId, auditUpdateCmd.getAuditId());
queryWrapper.last("limit 1");
@ -74,17 +79,185 @@ public class AuditGatewayImpl implements AuditGateway {
auditConvert.toAuditDO(auditDO, auditUpdateCmd);
auditMapper.updateById(auditDO);
return auditConvert.toAudit(auditDO);
}
return auditConvert.toAudit(auditDO);
}
@Override
public Audit show(AuditShowQry auditShowQry) {
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
queryWrapper.eq(AuditDO::getAuditId, auditShowQry.getAuditId());
queryWrapper.last("limit 1");
@Override
public Audit show(AuditShowQry auditShowQry) {
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
queryWrapper.eq(AuditDO::getAuditId, auditShowQry.getAuditId());
queryWrapper.last("limit 1");
AuditDO auditDO = auditMapper.selectOne(queryWrapper);
return auditConvert.toAudit(auditDO);
}
AuditDO auditDO = auditMapper.selectOne(queryWrapper);
if (Objects.nonNull(auditDO)) {
if (auditDO.getSubjectType().equals(AuditSubjectTypeEnum.PURCHASE_ORDER)) {
OrderDO orderDO = orderMapper.selectByOrderId(auditDO.getSubjectId());
auditDO.setOrderDO(orderDO);
}
}
return auditConvert.toAudit(auditDO);
}
@Override
public Audit submitReview(OrderSubmitReviewCmd orderSubmitReviewCmd) {
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderSubmitReviewCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getSubjectType, AuditSubjectTypeEnum.PURCHASE_ORDER);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
auditQueryWrapper.last("limit 1");
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (Objects.isNull(auditDO)) {
auditDO = new AuditDO();
auditDO.setSubjectId(orderSubmitReviewCmd.getOrderId());
auditDO.setSubjectType(AuditSubjectTypeEnum.PURCHASE_ORDER);
auditDO.setType(AuditTypeEnum.REVIEWER_AUDIT);
auditDO.setState(AuditStateEnum.WAITING_AUDIT);
auditDO.setCreatedBy(orderSubmitReviewCmd.getCreatedBy());
auditDO.setCreatedByName(orderSubmitReviewCmd.getCreatedByName());
auditMapper.insert(auditDO);
} else {
auditDO.setState(AuditStateEnum.WAITING_AUDIT);
auditMapper.updateById(auditDO);
}
return auditConvert.toAudit(auditDO);
}
@Override
public Audit withdrawReview(OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
// 更新审核记录状态为草稿撤回审核
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderWithdrawReviewCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getSubjectType, AuditSubjectTypeEnum.PURCHASE_ORDER);
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
auditQueryWrapper.last("limit 1");
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_CANCEL);
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderWithdrawReviewCmd.getCreatedBy());
auditDO.setAuditByName(orderWithdrawReviewCmd.getCreatedByName());
auditMapper.updateById(auditDO);
}
return auditConvert.toAudit(auditDO);
}
@Override
public Audit rejectApprove(OrderRejectApproveCmd orderRejectApproveCmd) {
// 更新审核记录
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getAuditId, orderRejectApproveCmd.getAuditId());
auditQueryWrapper.eq(AuditDO::getSubjectId, orderRejectApproveCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getSubjectType, AuditSubjectTypeEnum.PURCHASE_ORDER);
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
auditQueryWrapper.last("limit 1");
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_REJECTED);
auditDO.setAuditReason(orderRejectApproveCmd.getRejectReason());
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderRejectApproveCmd.getCreatedBy());
auditDO.setAuditByName(orderRejectApproveCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
return auditConvert.toAudit(auditDO);
}
@Override
public Audit finalApprove(OrderFinalApproveCmd orderFinalApproveCmd) {
// 更新审核记录为审核成功
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderFinalApproveCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getSubjectType, AuditSubjectTypeEnum.PURCHASE_ORDER);
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.BOSS_AUDIT);
auditQueryWrapper.eq(AuditDO::getAuditId, orderFinalApproveCmd.getAuditId());
auditQueryWrapper.last("limit 1");
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_SUCCESS);
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderFinalApproveCmd.getCreatedBy());
auditDO.setAuditByName(orderFinalApproveCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
return auditConvert.toAudit(auditDO);
}
@Override
public Audit rejectFinal(OrderRejectFinalCmd orderRejectFinalCmd) {
// 更新审核记录
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderRejectFinalCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getSubjectType, AuditSubjectTypeEnum.PURCHASE_ORDER);
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.BOSS_AUDIT);
auditQueryWrapper.eq(AuditDO::getAuditId, orderRejectFinalCmd.getAuditId());
auditQueryWrapper.last("limit 1");
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_REJECTED);
auditDO.setAuditReason(orderRejectFinalCmd.getRejectReason());
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderRejectFinalCmd.getCreatedBy());
auditDO.setAuditByName(orderRejectFinalCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
return auditConvert.toAudit(auditDO);
}
@Override
public Audit approve(OrderApproveCmd orderApproveCmd) {
// 更新审核记录状态为审核成功
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderApproveCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getSubjectType, AuditSubjectTypeEnum.PURCHASE_ORDER);
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (Objects.isNull(auditDO)) {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
if (orderApproveCmd.getDraft()) {
return auditConvert.toAudit(auditDO);
}
auditDO.setState(AuditStateEnum.AUDIT_SUCCESS);
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderApproveCmd.getCreatedBy());
auditDO.setAuditByName(orderApproveCmd.getCreatedByName());
auditMapper.updateById(auditDO);
// 自动生成报老板待审核记录每次都创建新记录
AuditDO auditDO1 = new AuditDO();
auditDO1.setSubjectId(orderApproveCmd.getOrderId());
auditDO1.setSubjectType(AuditSubjectTypeEnum.PURCHASE_ORDER);
auditDO1.setType(AuditTypeEnum.BOSS_AUDIT);
auditDO1.setState(AuditStateEnum.WAITING_AUDIT);
auditDO1.setCreatedBy(orderApproveCmd.getCreatedBy());
auditDO1.setCreatedByName(orderApproveCmd.getCreatedByName());
auditMapper.insert(auditDO1);
return auditConvert.toAudit(auditDO1);
}
}

View File

@ -19,6 +19,7 @@ import com.xunhong.erp.turbo.biz.domain.gateway.DealerGateway;
import com.xunhong.erp.turbo.biz.infrastructure.convert.DealerConvert;
import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerPaymentAccountDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.DealerSettingDO;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerMapper;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.DealerPaymentAccountMapper;
import lombok.RequiredArgsConstructor;
@ -45,6 +46,8 @@ public class DealerGatewayImpl implements DealerGateway {
@Override
public Dealer save(DealerCreateCmd dealerCreateCmd) {
DealerDO dealerDO = dealerConvert.toDealerDO(dealerCreateCmd);
DealerSettingDO defaultSetting = DealerSettingDO.getDefaultSetting();
dealerDO.setSetting(defaultSetting);
dealerMapper.insert(dealerDO);
return dealerConvert.toDealer(dealerDO);

View File

@ -22,7 +22,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -68,7 +68,7 @@ public class OrderGatewayImpl implements OrderGateway {
private final SupplierMapper supplierMapper;
private final SupplierConvert supplierConvert;
private final AuditMapper auditMapper;
private final DealerMapper dealerMapper;
@Override
@Transactional
@ -225,11 +225,10 @@ public class OrderGatewayImpl implements OrderGateway {
}
@Override
@Transactional
public void approve(OrderApproveCmd orderApproveCmd) {
LambdaQueryWrapper<OrderDO> queryWrapper = Wrappers.lambdaQuery(OrderDO.class);
queryWrapper.eq(OrderDO::getOrderId, orderApproveCmd.getOrderId());
queryWrapper.eq(OrderDO::getState, OrderStateEnum.WAITING_AUDIT);
queryWrapper.eq(OrderDO::getState, OrderStateEnum.AUDITING);
queryWrapper.last("limit 1");
OrderDO orderDO = orderMapper.selectOne(queryWrapper);
@ -238,37 +237,8 @@ public class OrderGatewayImpl implements OrderGateway {
throw new BizException(BizErrorCode.B_BIZ_ORDER_NOT_WAITING_AUDIT);
}
orderDO.setPricingMethod(orderApproveCmd.getPricingMethod());
if (!orderApproveCmd.getDraft()) {
orderDO.setAuditState(OrderAuditStateEnum.PENDING_BOSS_APPROVAL);
// 更新审核记录状态为审核成功
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderApproveCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_SUCCESS);
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderApproveCmd.getCreatedBy());
auditDO.setAuditByName(orderApproveCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
// 自动生成报老板待审核记录每次都创建新记录
AuditDO auditDO1 = new AuditDO();
auditDO1.setSubjectId(orderApproveCmd.getOrderId());
auditDO1.setType(AuditTypeEnum.BOSS_AUDIT);
auditDO1.setState(AuditStateEnum.WAITING_AUDIT);
auditDO1.setCreatedBy(orderApproveCmd.getCreatedBy());
auditDO1.setCreatedByName(orderApproveCmd.getCreatedByName());
auditMapper.insert(auditDO1);
}
orderMapper.updateById(orderDO);
@ -400,7 +370,7 @@ public class OrderGatewayImpl implements OrderGateway {
for (OrderShip updatedShip : orderShipList) {
updatedShip.setOrderId(orderId);
OrderShipDO orderShipDO = orderShipConvert.toOrderShipDO(updatedShip);
OrderShipDO orderShipDO = orderConvert.toOrderShipDO(updatedShip);
orderShipDO.setCreatedBy(orderApproveCmd.getCreatedBy());
orderShipDO.setCreatedByName(orderApproveCmd.getCreatedByName());
if (orderApproveCmd.getDraft()) {
@ -417,9 +387,10 @@ public class OrderGatewayImpl implements OrderGateway {
existingShipMap.remove(updatedShip.getOrderShipId());
} else {
// 新增发货单
orderShipDO.setOrderShipId(null);
// 生成发货单编号
if (StrUtil.isBlank(orderShipDO.getOrderSn())) {
orderShipDO.setOrderSn("SO" + generateOrderShipSn());
orderShipDO.setOrderSn("FH" + generateOrderShipSn());
}
shipsToInsert.add(orderShipDO);
}
@ -435,6 +406,7 @@ public class OrderGatewayImpl implements OrderGateway {
.map(item -> {
OrderShipItemDO itemDO = orderShipItemConvert.toOrderShipItemDO(item);
itemDO.setOrderShipId(null); // 稍后设置
itemDO.setOrderShipItemId(null);
return itemDO;
})
.collect(Collectors.toList());
@ -469,6 +441,7 @@ public class OrderGatewayImpl implements OrderGateway {
/**
* 保存发货单明细
* 根据 orderShipId unitPrice 两个字段判断是否新增更新或删除
*/
private void saveOrderShipItems(OrderShipDO orderShipDO, List<OrderShipItem> orderShipItemList) {
if (CollUtil.isEmpty(orderShipItemList)) {
@ -480,34 +453,50 @@ public class OrderGatewayImpl implements OrderGateway {
itemQueryWrapper.eq(OrderShipItemDO::getOrderShipId, orderShipDO.getOrderShipId());
List<OrderShipItemDO> existingItems = orderShipItemMapper.selectList(itemQueryWrapper);
// 将现有明细映射到 itemId 字典中便于查找
Map<Long, OrderShipItemDO> existingItemMap = existingItems.stream()
.filter(item -> item.getItemId() != null)
.collect(Collectors.toMap(OrderShipItemDO::getItemId, Function.identity()));
// 将现有明细映射到 unitPrice 字典中便于查找
// 使用 BigDecimal compareTo 作为比较器确保精确匹配
Map<BigDecimal, OrderShipItemDO> existingItemMap = existingItems.stream()
.filter(item -> item.getUnitPrice() != null)
.collect(Collectors.toMap(
OrderShipItemDO::getUnitPrice,
Function.identity(),
(existing, replacement) -> existing // 如果有重复的unitPrice保留第一个
));
// 收集需要更新和新增的明细
List<OrderShipItemDO> itemsToInsert = new ArrayList<>();
List<OrderShipItemDO> itemsToUpdate = new ArrayList<>();
for (OrderShipItem updatedItem : orderShipItemList) {
OrderShipItemDO itemDO = orderShipItemConvert.toOrderShipItemDO(updatedItem);
if (updatedItem.getUnitPrice() == null) {
continue; // 跳过单价为空的记录
}
if (existingItemMap.containsKey(updatedItem.getItemId())) {
// 更新已存在的明细
itemDO.setItemId(updatedItem.getItemId());
itemDO.setOrderShipId(orderShipDO.getOrderShipId());
// 查找是否存在相同 unitPrice 的记录
OrderShipItemDO existingItem = existingItemMap.entrySet().stream()
.filter(entry -> entry.getKey().compareTo(updatedItem.getUnitPrice()) == 0)
.map(Map.Entry::getValue)
.findFirst()
.orElse(null);
OrderShipItemDO itemDO = orderShipItemConvert.toOrderShipItemDO(updatedItem);
itemDO.setOrderShipId(orderShipDO.getOrderShipId());
if (existingItem != null) {
// 更新已存在的明细基于 unitPrice 匹配
itemDO.setOrderShipItemId(existingItem.getOrderShipItemId());
itemsToUpdate.add(itemDO);
// 从现有映射中移除剩下的就是需要删除的
existingItemMap.remove(updatedItem.getItemId());
existingItemMap.remove(existingItem.getUnitPrice());
} else {
itemDO.setOrderShipItemId(null);
// 新增明细
itemDO.setOrderShipId(orderShipDO.getOrderShipId());
itemsToInsert.add(itemDO);
}
}
// 删除不再需要的明细
existingItemMap.values().forEach(OrderShipItemDO::deleteById);
// 删除不再需要的明细数据库中存在但新列表中没有的 unitPrice
existingItemMap.values().forEach(item -> orderShipItemMapper.deleteById(item.getOrderShipItemId()));
// 执行更新操作
itemsToUpdate.forEach(orderShipItemMapper::updateById);
@ -517,7 +506,6 @@ public class OrderGatewayImpl implements OrderGateway {
}
@Override
@Transactional
public void submitReview(OrderSubmitReviewCmd orderSubmitReviewCmd) {
LambdaQueryWrapper<OrderDO> queryWrapper = Wrappers.lambdaQuery(OrderDO.class);
queryWrapper.eq(OrderDO::getOrderId, orderSubmitReviewCmd.getOrderId());
@ -530,27 +518,17 @@ public class OrderGatewayImpl implements OrderGateway {
throw new BizException(BizErrorCode.B_BIZ_ORDER_NOT_DRAFT);
}
orderDO.setState(OrderStateEnum.WAITING_AUDIT);
orderDO.setState(OrderStateEnum.AUDITING);
orderDO.setAuditState(OrderAuditStateEnum.PENDING_QUOTE_APPROVAL);
orderMapper.updateById(orderDO);
// 自动生成报价审核员待审核记录每次都创建新记录
AuditDO auditDO = new AuditDO();
auditDO.setSubjectId(orderSubmitReviewCmd.getOrderId());
auditDO.setType(AuditTypeEnum.REVIEWER_AUDIT);
auditDO.setState(AuditStateEnum.WAITING_AUDIT);
auditDO.setCreatedBy(orderSubmitReviewCmd.getCreatedBy());
auditDO.setCreatedByName(orderSubmitReviewCmd.getCreatedByName());
auditMapper.insert(auditDO);
}
@Override
@Transactional
public void withdrawReview(OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
LambdaQueryWrapper<OrderDO> queryWrapper = Wrappers.lambdaQuery(OrderDO.class);
queryWrapper.eq(OrderDO::getOrderId, orderWithdrawReviewCmd.getOrderId());
queryWrapper.eq(OrderDO::getState, OrderStateEnum.WAITING_AUDIT);
queryWrapper.eq(OrderDO::getState, OrderStateEnum.AUDITING);
queryWrapper.eq(OrderDO::getAuditState, OrderAuditStateEnum.PENDING_QUOTE_APPROVAL);
queryWrapper.last("limit 1");
@ -560,33 +538,16 @@ public class OrderGatewayImpl implements OrderGateway {
throw new BizException(BizErrorCode.B_BIZ_ORDER_NOT_WAITING_FOR_WITHDRAW);
}
orderDO.setState(OrderStateEnum.DRAFT);
orderDO.setAuditState(OrderAuditStateEnum.NONE);
orderMapper.updateById(orderDO);
// 更新审核记录状态为草稿撤回审核
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderWithdrawReviewCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_CANCEL);
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderWithdrawReviewCmd.getCreatedBy());
auditDO.setAuditByName(orderWithdrawReviewCmd.getCreatedByName());
auditMapper.updateById(auditDO);
}
}
@Override
@Transactional
public void rejectApprove(OrderRejectApproveCmd orderRejectApproveCmd) {
LambdaQueryWrapper<OrderDO> queryWrapper = Wrappers.lambdaQuery(OrderDO.class);
queryWrapper.eq(OrderDO::getOrderId, orderRejectApproveCmd.getOrderId());
queryWrapper.eq(OrderDO::getState, OrderStateEnum.WAITING_AUDIT);
queryWrapper.eq(OrderDO::getState, OrderStateEnum.AUDITING);
queryWrapper.eq(OrderDO::getAuditState, OrderAuditStateEnum.PENDING_QUOTE_APPROVAL);
queryWrapper.last("limit 1");
@ -596,30 +557,11 @@ public class OrderGatewayImpl implements OrderGateway {
throw new BizException(BizErrorCode.B_BIZ_ORDER_NOT_WAITING_AUDIT);
}
orderDO.setState(OrderStateEnum.REJECTED);
orderDO.setState(OrderStateEnum.DRAFT);
orderDO.setAuditState(OrderAuditStateEnum.QUOTE_REJECTED);
orderMapper.updateById(orderDO);
// 更新审核记录
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderRejectApproveCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.REVIEWER_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_REJECTED);
auditDO.setAuditReason(orderRejectApproveCmd.getRejectReason());
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderRejectApproveCmd.getCreatedBy());
auditDO.setAuditByName(orderRejectApproveCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
// 发货单改成草稿
LambdaUpdateWrapper<OrderShipDO> updateWrapper = Wrappers.lambdaUpdate(OrderShipDO.class);
updateWrapper.eq(OrderShipDO::getOrderId, orderDO.getOrderId());
@ -631,7 +573,7 @@ public class OrderGatewayImpl implements OrderGateway {
public void finalApprove(OrderFinalApproveCmd orderFinalApproveCmd) {
LambdaQueryWrapper<OrderDO> queryWrapper = Wrappers.lambdaQuery(OrderDO.class);
queryWrapper.eq(OrderDO::getOrderId, orderFinalApproveCmd.getOrderId());
queryWrapper.eq(OrderDO::getState, OrderStateEnum.WAITING_AUDIT);
queryWrapper.eq(OrderDO::getState, OrderStateEnum.AUDITING);
queryWrapper.eq(OrderDO::getAuditState, OrderAuditStateEnum.PENDING_BOSS_APPROVAL);
queryWrapper.last("limit 1");
@ -645,24 +587,6 @@ public class OrderGatewayImpl implements OrderGateway {
orderDO.setState(OrderStateEnum.COMPLETED);
orderDO.setAuditState(OrderAuditStateEnum.BOSS_APPROVED);
// 更新审核记录为审核成功
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderFinalApproveCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.BOSS_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_SUCCESS);
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderFinalApproveCmd.getCreatedBy());
auditDO.setAuditByName(orderFinalApproveCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
orderMapper.updateById(orderDO);
// 发货单改成已发货待回款
@ -684,11 +608,10 @@ public class OrderGatewayImpl implements OrderGateway {
}
@Override
@Transactional
public void rejectFinal(OrderRejectFinalCmd orderRejectFinalCmd) {
LambdaQueryWrapper<OrderDO> queryWrapper = Wrappers.lambdaQuery(OrderDO.class);
queryWrapper.eq(OrderDO::getOrderId, orderRejectFinalCmd.getOrderId());
queryWrapper.eq(OrderDO::getState, OrderStateEnum.WAITING_AUDIT);
queryWrapper.eq(OrderDO::getState, OrderStateEnum.AUDITING);
queryWrapper.eq(OrderDO::getAuditState, OrderAuditStateEnum.PENDING_BOSS_APPROVAL);
queryWrapper.last("limit 1");
@ -698,28 +621,8 @@ public class OrderGatewayImpl implements OrderGateway {
throw new BizException(BizErrorCode.B_BIZ_ORDER_NOT_WAITING_FOR_REJECT_FINAL);
}
orderDO.setState(OrderStateEnum.REJECTED);
orderDO.setAuditState(OrderAuditStateEnum.BOSS_REJECTED);
orderMapper.updateById(orderDO);
// 更新审核记录
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
auditQueryWrapper.eq(AuditDO::getSubjectId, orderRejectFinalCmd.getOrderId());
auditQueryWrapper.eq(AuditDO::getState, AuditStateEnum.WAITING_AUDIT);
auditQueryWrapper.eq(AuditDO::getType, AuditTypeEnum.BOSS_AUDIT);
AuditDO auditDO = auditMapper.selectOne(auditQueryWrapper);
if (auditDO != null) {
auditDO.setState(AuditStateEnum.AUDIT_REJECTED);
auditDO.setAuditReason(orderRejectFinalCmd.getRejectReason());
auditDO.setAuditAt(LocalDateTime.now());
auditDO.setAuditBy(orderRejectFinalCmd.getCreatedBy());
auditDO.setAuditByName(orderRejectFinalCmd.getCreatedByName());
auditMapper.updateById(auditDO);
} else {
// 如果审核记录不存在抛出异常
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
}
}
@Override
@ -1034,7 +937,18 @@ public class OrderGatewayImpl implements OrderGateway {
queryWrapper.last("limit 1");
OrderVehicleDO orderVehicleDO = orderVehicleMapper.selectOne(queryWrapper);
return orderVehicleDO != null ? orderVehicleDO.getVehicleNo() : null;
if (Objects.nonNull(orderVehicleDO)) {
return orderVehicleDO.getVehicleNo();
}
DealerDO dealerDO = dealerMapper.selectById(lastVehicleNoQry.getDealerId());
if (dealerDO.getSetting().getEnableInitialTrainNo()) {
return dealerDO.getSetting().getInitialTrainNo().toString();
} else {
return "0";
}
}
/**

View File

@ -19,19 +19,17 @@ import com.xunhong.erp.turbo.biz.domain.entity.OrderShip;
import com.xunhong.erp.turbo.biz.domain.gateway.OrderShipGateway;
import com.xunhong.erp.turbo.biz.infrastructure.convert.OrderShipConvert;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderCostDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipItemDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderVehicleDO;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderCostMapper;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderShipItemMapper;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderShipMapper;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderVehicleMapper;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.*;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -49,6 +47,7 @@ public class OrderShipGatewayImpl implements OrderShipGateway {
private final OrderCostMapper orderCostMapper;
private final OrderVehicleMapper orderVehicleMapper;
private final OrderMapper orderMapper;
@Override
public OrderShip save(OrderShipCreateCmd orderShipCreateCmd) {
@ -70,14 +69,12 @@ public class OrderShipGatewayImpl implements OrderShipGateway {
IPage<OrderShipDO> page = new Page<>(orderShipPageQry.getPageIndex(), orderShipPageQry.getPageSize());
page = orderShipMapper.selectPage(page, queryWrapper);
List<Long> orderIdList = page.getRecords().stream().map(OrderShipDO::getOrderId).toList();
Set<Long> orderIdList = page.getRecords().stream().map(OrderShipDO::getOrderId).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(orderIdList)) {
LambdaQueryWrapper<OrderVehicleDO> queryWrapper1 = Wrappers.lambdaQuery(OrderVehicleDO.class);
queryWrapper1.in(OrderVehicleDO::getOrderId, orderIdList);
List<OrderVehicleDO> orderVehicleDOList = orderVehicleMapper.selectList(queryWrapper1);
Map<Long, OrderVehicleDO> orderVehicleDOMap = orderVehicleDOList.stream().collect(Collectors.toMap(OrderVehicleDO::getOrderId, Function.identity()));
List<OrderDO> orderDOList = orderMapper.selectByOrderIdList(orderIdList);
Map<Long, OrderDO> orderDOMap = orderDOList.stream().collect(Collectors.toMap(OrderDO::getOrderId, Function.identity()));
page.getRecords().forEach(orderShipDO -> {
orderShipDO.setOrderVehicleDO(orderVehicleDOMap.get(orderShipDO.getOrderId()));
orderShipDO.setOrderDO(orderDOMap.get(orderShipDO.getOrderId()));
});
}

View File

@ -19,6 +19,7 @@ import java.util.Set;
public interface OrderMapper extends BaseMapper<OrderDO> {
List<OrderDO> selectByOrderIdList(@Param("orderIdList") Set<Long> orderIdList);
OrderDO selectByOrderId(@Param("orderId") Long orderId);
IPage<OrderDO> selectPage(IPage<OrderDO> page, @Param(Constants.WRAPPER) LambdaQueryWrapper<OrderDO> queryWrapper, @Param("query") OrderPageQry orderPageQry);
}

View File

@ -12,7 +12,6 @@
<result property="price" column="price"/>
<result property="rule" column="rule"/>
<result property="sort" column="sort"/>
<result property="costId" column="cost_id"/>
<result property="remark" column="remark"/>
<result property="status" column="status"/>
<result property="createdAt" column="created_at"/>

View File

@ -11,6 +11,7 @@
<result property="costItemIds" column="cost_item_ids"
typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
<result property="remark" column="remark"/>
<result property="isDefault" column="is_default"/>
<result property="sort" column="sort"/>
<result property="status" column="status"/>
<result property="createdAt" column="created_at"/>

View File

@ -55,7 +55,7 @@
FROM order_cost oc
LEFT JOIN order_vehicle ov ON oc.order_id = ov.order_id AND ov.is_delete
= 0
LEFT JOIN order po ON oc.order_id = po.order_id AND
LEFT JOIN `order` po ON oc.order_id = po.order_id AND
po.is_delete = 0
<where>
oc.is_delete = 0
@ -95,7 +95,7 @@
ov.dealer_name
FROM order_cost oc
LEFT JOIN order_vehicle ov ON oc.order_id = ov.order_id AND ov.is_delete = 0
LEFT JOIN order po ON oc.order_id = po.order_id AND
LEFT JOIN `order` po ON oc.order_id = po.order_id AND
po.is_delete = 0
WHERE oc.order_id = #{orderId}
AND oc.name = #{name}

View File

@ -114,5 +114,20 @@
</if>
</where>
</select>
<select id="selectByOrderId"
resultType="com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDO"
resultMap="SelectByOrderIdListResultMap">
SELECT
po.order_id, po.order_sn, po.state, po.audit_state, po.type,
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin,
ov.destination
FROM `order` po
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
= 0
where po.is_delete = 0
AND po.order_id = #{orderId}
limit 1
</select>
</mapper>

View File

@ -29,7 +29,7 @@
po.state as po_state
FROM order_rebate ore
LEFT JOIN order_vehicle ov ON ore.order_id = ov.order_id AND ov.is_delete = 0
LEFT JOIN order po ON ore.order_id = po.order_id AND po.is_delete = 0
LEFT JOIN `order` po ON ore.order_id = po.order_id AND po.is_delete = 0
<where>
ore.is_delete = 0
<if test="query.createdBy != null">

View File

@ -5,7 +5,7 @@
namespace="com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderShipItemMapper">
<resultMap id="BaseResultMap"
type="com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipItemDO">
<result property="itemId" column="item_id"/>
<result property="orderShipItemId" column="order_ship_item_id"/>
<result property="orderId" column="order_id"/>
<result property="orderShipId" column="order_ship_id"/>
<result property="grossWeight" column="gross_weight"/>

View File

@ -22,6 +22,7 @@
<result property="file" column="file"
typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
<result property="state" column="state"/>
<result property="type" column="type"/>
<result property="remark" column="remark"/>
<result property="createdBy" column="created_by"/>
<result property="createdByName" column="created_by_name"/>

View File

@ -11,6 +11,7 @@
<result property="name" column="name"/>
<result property="payeeName" column="payee_name"/>
<result property="idCard" column="id_card"/>
<result property="bankName" column="bank_name"/>
<result property="bankCard" column="bank_card"/>
<result property="phone" column="phone"/>
<result property="wechatQr" column="wechat_qr"/>
@ -59,7 +60,7 @@
po.state as po_state
FROM order_supplier os
LEFT JOIN order_vehicle ov ON os.order_id = ov.order_id AND ov.is_delete = 0
LEFT JOIN order po ON os.order_id = po.order_id AND po.is_delete = 0
LEFT JOIN `order` po ON os.order_id = po.order_id AND po.is_delete = 0
<where>
os.is_delete = 0
<if test="query.deliveryTime != null and query.deliveryTime.size() == 2">

View File

@ -10,6 +10,7 @@
<result property="payeeName" column="payee_name"/>
<result property="idCard" column="id_card"/>
<result property="phone" column="phone"/>
<result property="bankName" column="bank_name"/>
<result property="bankCard" column="bank_card"/>
<result property="wechatQr" column="wechat_qr"/>
<result property="type" column="type"/>

View File

@ -1,15 +1,24 @@
package com.xunhong.erp.turbo.facade.app.executor.cmd;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.hutool.core.collection.CollUtil;
import com.google.gson.annotations.SerializedName;
import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrBankCardVO;
import com.xunhong.erp.turbo.api.infra.api.SettingServiceI;
import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.SneakyThrows;
import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* @author shenyifei
*/
@ -29,6 +38,65 @@ public class WxMaOcrBankCardCmdExe extends WxCmdExe {
wxMaOcrBankCardVO.setNumber(number);
wxMaOcrBankCardVO.setOcrUrl(ocrUrl);
GetBankByNumRequest getBankByNumRequest = new GetBankByNumRequest();
getBankByNumRequest.setSetAccountNumber(number);
String responseContent = wxMaService.post("https://api.weixin.qq.com/shop/funds/getbankbynum", getBankByNumRequest);
WxGetBankByNumResult wxGetBankByNumResult = WxGetBankByNumResult.fromJson(responseContent);
List<BankInfo> data = wxGetBankByNumResult.getData();
if (CollUtil.isNotEmpty(data)) {
wxMaOcrBankCardVO.setBankName(data.getFirst().getBankName());
}
return wxMaOcrBankCardVO;
}
@Getter
@Setter
public static class GetBankByNumRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@SerializedName("account_number")
private String setAccountNumber;
}
@Getter
@Setter
public static class WxGetBankByNumResult implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@SerializedName("total_count")
private Integer totalCount;
private List<BankInfo> data;
public static WxGetBankByNumResult fromJson(String json) {
return WxGsonBuilder.create().fromJson(json, WxGetBankByNumResult.class);
}
public String toString() {
return WxGsonBuilder.create().toJson(this);
}
}
@Getter
@Setter
public static class BankInfo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@SerializedName("bank_code")
private String bankCode;
@SerializedName("bank_id")
private String bankId;
@SerializedName("bank_name")
private String bankName;
@SerializedName("need_branch")
private Boolean needBranch;
@SerializedName("account_bank")
private String accountBank;
}
}

View File

@ -2,6 +2,7 @@ package com.xunhong.erp.turbo.api.biz.api;
import com.xunhong.erp.turbo.api.biz.dto.cmd.*;
import com.xunhong.erp.turbo.api.biz.dto.qry.*;
import com.xunhong.erp.turbo.api.biz.dto.vo.AuditVO;
import com.xunhong.erp.turbo.api.biz.dto.vo.OrderVO;
import com.xunhong.erp.turbo.base.dto.PageDTO;
@ -23,17 +24,17 @@ public interface OrderServiceI {
void destroy(OrderDestroyCmd orderDestroyCmd);
void approve(OrderApproveCmd orderApproveCmd);
AuditVO approve(OrderApproveCmd orderApproveCmd);
void submitReview(OrderSubmitReviewCmd orderSubmitReviewCmd);
AuditVO submitReview(OrderSubmitReviewCmd orderSubmitReviewCmd);
void withdrawReview(OrderWithdrawReviewCmd orderWithdrawReviewCmd);
AuditVO withdrawReview(OrderWithdrawReviewCmd orderWithdrawReviewCmd);
void rejectApprove(OrderRejectApproveCmd orderRejectApproveCmd);
AuditVO rejectApprove(OrderRejectApproveCmd orderRejectApproveCmd);
void finalApprove(OrderFinalApproveCmd orderFinalApproveCmd);
AuditVO finalApprove(OrderFinalApproveCmd orderFinalApproveCmd);
void rejectFinal(OrderRejectFinalCmd orderRejectFinalCmd);
AuditVO rejectFinal(OrderRejectFinalCmd orderRejectFinalCmd);
Long countOrderByState(OrderCountQry orderCountQry);

View File

@ -60,6 +60,12 @@ public class CostCreateCmd extends Command {
@Schema(title = "备注")
private String remark;
/**
* 是否默认
*/
@Schema(title = "是否默认")
private Boolean isDefault;
/**
* 排序号
*/

View File

@ -136,5 +136,17 @@ public class DealerCreateCmd extends Command {
@Schema(title = "损耗金额")
private BigDecimal lossAmount;
/**
* 是否启用初始车次号
*/
@Schema(title = "是否启用初始车次号")
private Boolean enableInitialTrainNo;
/**
* 初始车次号
*/
@Schema(title = "初始车次号")
private Integer initialTrainNo;
}

View File

@ -21,6 +21,9 @@ public class OrderApproveCmd extends OrderCreateCmd {
@Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
private Long orderId;
@Schema(title = "审核ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long auditId;
@Schema(title = "是否是暂存", type = "boolean", requiredMode = Schema.RequiredMode.REQUIRED)
private Boolean draft;

View File

@ -15,5 +15,8 @@ public class OrderFinalApproveCmd extends Command {
@Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
private Long orderId;
@Schema(title = "审核ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long auditId;
}

View File

@ -16,6 +16,9 @@ public class OrderRejectApproveCmd extends Command {
@Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
private Long orderId;
@Schema(title = "审核ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long auditId;
@Schema(title = "审核原因", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
private String rejectReason;
}

View File

@ -16,6 +16,9 @@ public class OrderRejectFinalCmd extends Command {
@Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
private Long orderId;
@Schema(title = "审核ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long auditId;
@Schema(title = "驳回原因", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
private String rejectReason;
}

View File

@ -15,5 +15,8 @@ public class OrderWithdrawReviewCmd extends Command {
@Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
private Long orderId;
@Schema(title = "审核ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
private Long auditId;
}

View File

@ -30,7 +30,7 @@ public class SupplierCreateCmd extends Command {
/**
* 收款人姓名
*/
@Schema(title = "收款人姓名")
@Schema(title = "收款人姓名", requiredMode = Schema.RequiredMode.REQUIRED)
private String payeeName;
/**
@ -42,9 +42,16 @@ public class SupplierCreateCmd extends Command {
/**
* 手机号
*/
@Schema(title = "手机号")
@Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED)
private String phone;
/**
* 银行名称
*/
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
/**
* 银行卡号
*/

View File

@ -2,6 +2,7 @@ package com.xunhong.erp.turbo.api.biz.dto.common;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipTypeEnum;
import com.xunhong.erp.turbo.base.dto.Command;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -119,6 +120,12 @@ public class OrderShip extends Command {
@Schema(title = "发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结", requiredMode = Schema.RequiredMode.REQUIRED)
private OrderShipStateEnum state;
/**
* 发货单类型1_采购发货2_调货发货3_改签发货4_退货发货
*/
@Schema(title = "发货单类型1_采购发货2_调货发货3_改签发货4_退货发货")
private OrderShipTypeEnum type;
/**
* 备注
*/

View File

@ -20,7 +20,7 @@ public class OrderShipItem extends DTO {
* 发货单子项ID
*/
@Schema(title = "发货单子项ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long itemId;
private Long orderShipItemId;
/**
* 发货单ID

View File

@ -57,6 +57,12 @@ public class OrderSupplier extends Command {
@Schema(title = "身份证号", requiredMode = Schema.RequiredMode.REQUIRED)
private String idCard;
/**
* 银行名称
*/
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
/**
* 银行卡号
*/
@ -250,9 +256,9 @@ public class OrderSupplier extends Command {
private Boolean selected;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭;")
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已关闭;")
private OrderStateEnum poState;
/**

View File

@ -0,0 +1,22 @@
package com.xunhong.erp.turbo.api.biz.dto.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum OrderShipTypeEnum {
/**
* 发货单类型1_采购发货2_调货发货3_改签发货4_退货发货
*/
PURCHASE_SHIP(1, "采购发货"),
TRANSFER_SHIP(2, "调货发货"),
CHANGE_SHIP(3, "改签发货"),
RETURN_SHIP(4, "退货发货");
@EnumValue
private final int type;
private final String message;
}

View File

@ -8,13 +8,12 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public enum OrderStateEnum {
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成4_已关闭
*/
DRAFT(0, "草稿"),
WAITING_AUDIT(1, "审核中"),
AUDITING(1, "审核中"),
COMPLETED(2, "已完结"),
REJECTED(3, "已驳回"),
CLOSED(4, "已关闭"),
CLOSED(3, "已关闭"),
;
@EnumValue

View File

@ -17,9 +17,9 @@ import lombok.EqualsAndHashCode;
public class OrderCountQry extends Query {
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭;")
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已关闭;")
private OrderStateEnum state;
/**

View File

@ -23,9 +23,9 @@ public class OrderListQry extends Query {
private String orderSn;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭;")
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已关闭;")
private OrderStateEnum state;
/**

View File

@ -26,9 +26,9 @@ public class OrderPageQry extends PageQuery {
private String orderSn;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭;")
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已关闭;")
private OrderStateEnum state;
/**

View File

@ -1,6 +1,7 @@
package com.xunhong.erp.turbo.api.biz.dto.qry;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipTypeEnum;
import com.xunhong.erp.turbo.base.dto.PageQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -28,6 +29,12 @@ public class OrderShipPageQry extends PageQuery {
@Schema(title = "发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结")
private OrderShipStateEnum state;
/**
* 发货单类型1_采购发货2_调货发货3_改签发货4_退货发货
*/
@Schema(title = "发货单类型1_采购发货2_调货发货3_改签发货4_退货发货")
private OrderShipTypeEnum type;
@Schema(title = "供应商名称", type = "string")
private String supplierName;

View File

@ -61,6 +61,12 @@ public class CostVO extends DTO {
@Schema(title = "备注")
private String remark;
/**
* 是否默认
*/
@Schema(title = "是否默认")
private Boolean isDefault;
/**
* 排序号
*/

View File

@ -155,5 +155,17 @@ public class DealerVO extends DTO {
*/
@Schema(title = "损耗金额")
private BigDecimal lossAmount;
/**
* 是否启用初始车次号
*/
@Schema(title = "是否启用初始车次号")
private Boolean enableInitialTrainNo;
/**
* 初始车次号
*/
@Schema(title = "初始车次号")
private Integer initialTrainNo;
}

View File

@ -96,9 +96,9 @@ public class OrderCostVO extends Command {
private LocalDateTime createdAt;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭;")
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已关闭;")
private OrderStateEnum poState;
/**

View File

@ -75,9 +75,9 @@ public class OrderRebateVO extends Command {
private LocalDateTime createdAt;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭;")
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已关闭;")
private OrderStateEnum poState;
/**

View File

@ -4,8 +4,8 @@ import com.alibaba.cola.dto.DTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderCost;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderShipItem;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderVehicle;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipStateEnum;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -38,19 +38,19 @@ public class OrderShipVO extends DTO {
/**
* 经销商ID
*/
@Schema(title = "经销商ID", type = "string")
@Schema(title = "经销商ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private Long dealerId;
/**
* 经销商名称
*/
@Schema(title = "经销商名称")
@Schema(title = "经销商名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String dealerName;
/**
* 发货单编号
*/
@Schema(title = "发货单编号")
@Schema(title = "发货单编号", requiredMode = Schema.RequiredMode.REQUIRED)
private String orderSn;
/**
@ -132,9 +132,15 @@ public class OrderShipVO extends DTO {
/**
* 发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结
*/
@Schema(title = "发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结")
@Schema(title = "发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结", requiredMode = Schema.RequiredMode.REQUIRED)
private OrderShipStateEnum state;
/**
* 发货单类型1_采购发货2_调货发货3_改签发货4_退货发货
*/
@Schema(title = "发货单类型1_采购发货2_调货发货3_改签发货4_退货发货", requiredMode = Schema.RequiredMode.REQUIRED)
private OrderShipTypeEnum type;
/**
* 备注
*/
@ -176,6 +182,6 @@ public class OrderShipVO extends DTO {
* 采购订单车辆运输信息
*/
@Schema(title = "采购订单车辆运输信息")
private OrderVehicle orderVehicle;
private OrderVO orderVO;
}

View File

@ -59,6 +59,12 @@ public class OrderSupplierVO extends DTO {
@Schema(title = "身份证号", requiredMode = Schema.RequiredMode.REQUIRED)
private String idCard;
/**
* 银行名称
*/
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
/**
* 银行卡号
*/
@ -222,9 +228,9 @@ public class OrderSupplierVO extends DTO {
private LocalDateTime createdAt;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭;")
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已关闭;")
private OrderStateEnum poState;
/**

View File

@ -66,9 +66,9 @@ public class OrderVO extends DTO {
private OrderPricingMethodEnum pricingMethod;
/**
* 采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭
* 采购订单状态: 0_草稿1_审核中2_已完成3_已关闭
*/
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已驳回4_已关闭;", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(title = "采购订单状态: 0_草稿1_审核中2_已完成3_已关闭;", requiredMode = Schema.RequiredMode.REQUIRED)
private OrderStateEnum state;
/**

View File

@ -31,7 +31,7 @@ public class SupplierVO extends DTO {
/**
* 收款人姓名
*/
@Schema(title = "收款人姓名")
@Schema(title = "收款人姓名", requiredMode = Schema.RequiredMode.REQUIRED)
private String payeeName;
/**
@ -43,9 +43,15 @@ public class SupplierVO extends DTO {
/**
* 手机号
*/
@Schema(title = "手机号")
@Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED)
private String phone;
/**
* 银行名称
*/
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
/**
* 银行卡号
*/

View File

@ -16,6 +16,9 @@ public class WxMaOcrBankCardVO extends DTO {
@Schema(title = "银行卡号", requiredMode = Schema.RequiredMode.REQUIRED)
private String number;
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
@Schema(title = "银行卡图片", requiredMode = Schema.RequiredMode.REQUIRED)
private String ocrUrl;
}