feat(purchase-order): 实现采购订单分步提交功能
- 新增三个分步提交接口:savePurchaseOrderStep1、savePurchaseOrderStep2、savePurchaseOrderStep3 - 添加对应的服务层方法和网关方法支持分步提交逻辑 - 修改OrderDealerDO实体类,移除冗余字段并新增财务相关字段 - 更新OrderPackageDO和ShipOrderDO等实体类以支持新业务需求 - 调整DTO和VO对象,增加companyId和companyName等相关属性 - 优化查询条件构造逻辑,增强dealerRebateCustomer查询的灵活性 - 废弃原有的createPurchaseOrder接口,改为分步提交模式
This commit is contained in:
parent
2ac7654203
commit
61ebd14181
25
.lingma/rules/addFiled.md
Normal file
25
.lingma/rules/addFiled.md
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
trigger: manual
|
||||
---
|
||||
|
||||
注意:
|
||||
不用管 erp-turbo-svc 这个目录的代码
|
||||
增加字段规则,举例如果需要在 AAAA.java 增加 BBB 字段
|
||||
|
||||
那么需要增加的地方有以下地方:
|
||||
|
||||
> 必须加
|
||||
- AAAA.java
|
||||
- AAAADO.java
|
||||
- AAAAVO.java
|
||||
- AAAAMapper.java
|
||||
- AAAAMapper.xml
|
||||
- AAAACreateCmd.java
|
||||
|
||||
> 可加可不加
|
||||
- AAAAListQry.java
|
||||
- AAAAPageQry.java
|
||||
|
||||
> 判断加不加
|
||||
- AAAAConvert.java
|
||||
- AAAAAssembler.java
|
||||
@ -1,6 +1,7 @@
|
||||
package com.xunhong.erp.turbo.admin.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaCheckRole;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import com.alibaba.cola.dto.MultiResponse;
|
||||
@ -14,6 +15,7 @@ import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderListQry;
|
||||
import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderPageQry;
|
||||
import com.xunhong.erp.turbo.api.biz.dto.qry.PurchaseOrderShowQry;
|
||||
import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO;
|
||||
import com.xunhong.erp.turbo.api.rbac.dto.constants.PermissionConstant;
|
||||
import com.xunhong.erp.turbo.api.rbac.dto.constants.RoleConstant;
|
||||
import com.xunhong.erp.turbo.api.user.api.AdminServiceI;
|
||||
import com.xunhong.erp.turbo.api.user.dto.qry.AdminShowQry;
|
||||
@ -59,12 +61,31 @@ public class PurchaseOrderController {
|
||||
return SingleResponse.of(purchaseOrderService.countPurchaseOrderByState(purchaseOrderCountQry));
|
||||
}
|
||||
|
||||
// 分步提交第一步:车辆信息和经销商信息保存
|
||||
@SaCheckLogin
|
||||
// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_PURCHASE_ORDER_CREATE})
|
||||
@PostMapping("createPurchaseOrder")
|
||||
@Operation(summary = "创建采购订单(暂存)", method = "POST")
|
||||
public SingleResponse<PurchaseOrderVO> createPurchaseOrder(@RequestBody @Validated PurchaseOrderCreateCmd purchaseOrderCreateCmd) {
|
||||
return SingleResponse.of(purchaseOrderService.create(purchaseOrderCreateCmd));
|
||||
@PostMapping("savePurchaseOrderStep1")
|
||||
@Operation(summary = "采购订单第一步:车辆信息和经销商信息保存", method = "POST")
|
||||
public SingleResponse<PurchaseOrderVO> savePurchaseOrderStep1(@RequestBody @Validated PurchaseOrderStep1Cmd purchaseOrderStep1Cmd) {
|
||||
return SingleResponse.of(purchaseOrderService.saveStep1(purchaseOrderStep1Cmd));
|
||||
}
|
||||
|
||||
// 分步提交第二步:供应商信息保存
|
||||
@SaCheckLogin
|
||||
@PostMapping("savePurchaseOrderStep2")
|
||||
@Operation(summary = "采购订单第二步:供应商信息保存", method = "POST")
|
||||
public Response savePurchaseOrderStep2(@RequestBody @Validated PurchaseOrderStep2Cmd purchaseOrderStep2Cmd) {
|
||||
purchaseOrderService.saveStep2(purchaseOrderStep2Cmd);
|
||||
return Response.buildSuccess();
|
||||
}
|
||||
|
||||
// 分步提交第三步:人工和辅料等费用信息保存
|
||||
@SaCheckLogin
|
||||
@PostMapping("savePurchaseOrderStep3")
|
||||
@Operation(summary = "采购订单第三步:人工和辅料等费用信息保存", method = "POST")
|
||||
public Response savePurchaseOrderStep3(@RequestBody @Validated PurchaseOrderStep3Cmd purchaseOrderStep3Cmd) {
|
||||
purchaseOrderService.saveStep3(purchaseOrderStep3Cmd);
|
||||
return Response.buildSuccess();
|
||||
}
|
||||
|
||||
@SaCheckLogin
|
||||
@ -143,6 +164,17 @@ public class PurchaseOrderController {
|
||||
return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent());
|
||||
}
|
||||
|
||||
// 注释掉原有的创建接口
|
||||
@Deprecated
|
||||
@SaCheckLogin
|
||||
// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_PURCHASE_ORDER_CREATE})
|
||||
@PostMapping("createPurchaseOrder")
|
||||
@Operation(summary = "创建采购订单(暂存)", method = "POST")
|
||||
public SingleResponse<PurchaseOrderVO> createPurchaseOrder(@RequestBody @Validated PurchaseOrderCreateCmd purchaseOrderCreateCmd) {
|
||||
return SingleResponse.of(purchaseOrderService.create(purchaseOrderCreateCmd));
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@SaCheckLogin
|
||||
// @SaCheckPermission(value = {PermissionConstant.MDB_BUSINESS_PURCHASE_ORDER_UPDATE})
|
||||
@RequestMapping(value = "updatePurchaseOrder", method = {RequestMethod.PATCH, RequestMethod.PUT})
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
package com.xunhong.erp.turbo.biz.app.executor.cmd;
|
||||
|
||||
import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderStep1Cmd;
|
||||
import com.xunhong.erp.turbo.api.biz.dto.vo.PurchaseOrderVO;
|
||||
import com.xunhong.erp.turbo.biz.app.assembler.PurchaseOrderAssembler;
|
||||
import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder;
|
||||
import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author shenyifei
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class PurchaseOrderStep1CmdExe {
|
||||
|
||||
private final PurchaseOrderAssembler purchaseOrderAssembler;
|
||||
private final PurchaseOrderGateway purchaseOrderGateway;
|
||||
|
||||
public PurchaseOrderVO execute(PurchaseOrderStep1Cmd purchaseOrderStep1Cmd) {
|
||||
PurchaseOrder purchaseOrder = purchaseOrderGateway.saveStep1(purchaseOrderStep1Cmd);
|
||||
return purchaseOrderAssembler.toPurchaseOrderVO(purchaseOrder);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package com.xunhong.erp.turbo.biz.app.executor.cmd;
|
||||
|
||||
import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderStep2Cmd;
|
||||
import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author shenyifei
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class PurchaseOrderStep2CmdExe {
|
||||
|
||||
private final PurchaseOrderGateway purchaseOrderGateway;
|
||||
|
||||
public void execute(PurchaseOrderStep2Cmd purchaseOrderStep2Cmd) {
|
||||
purchaseOrderGateway.saveStep2(purchaseOrderStep2Cmd);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package com.xunhong.erp.turbo.biz.app.executor.cmd;
|
||||
|
||||
import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderStep3Cmd;
|
||||
import com.xunhong.erp.turbo.biz.domain.gateway.PurchaseOrderGateway;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author shenyifei
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class PurchaseOrderStep3CmdExe {
|
||||
|
||||
private final PurchaseOrderGateway purchaseOrderGateway;
|
||||
|
||||
public void execute(PurchaseOrderStep3Cmd purchaseOrderStep3Cmd) {
|
||||
purchaseOrderGateway.saveStep3(purchaseOrderStep3Cmd);
|
||||
}
|
||||
}
|
||||
@ -43,6 +43,11 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderServiceI {
|
||||
private final PurchaseOrderRejectFinalCmdExe purchaseOrderRejectFinalCmdExe;
|
||||
private final PurchaseOrderCountQryExe purchaseOrderCountQryExe;
|
||||
|
||||
// 新增分步提交执行器
|
||||
private final PurchaseOrderStep1CmdExe purchaseOrderStep1CmdExe;
|
||||
private final PurchaseOrderStep2CmdExe purchaseOrderStep2CmdExe;
|
||||
private final PurchaseOrderStep3CmdExe purchaseOrderStep3CmdExe;
|
||||
|
||||
@Override
|
||||
public PurchaseOrderVO create(PurchaseOrderCreateCmd purchaseOrderCreateCmd) {
|
||||
return purchaseOrderCreateCmdExe.execute(purchaseOrderCreateCmd);
|
||||
@ -107,5 +112,20 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderServiceI {
|
||||
public Long countPurchaseOrderByState(PurchaseOrderCountQry purchaseOrderCountQry) {
|
||||
return purchaseOrderCountQryExe.execute(purchaseOrderCountQry);
|
||||
}
|
||||
}
|
||||
|
||||
// 新增分步提交方法
|
||||
@Override
|
||||
public PurchaseOrderVO saveStep1(PurchaseOrderStep1Cmd purchaseOrderStep1Cmd) {
|
||||
return purchaseOrderStep1CmdExe.execute(purchaseOrderStep1Cmd);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveStep2(PurchaseOrderStep2Cmd purchaseOrderStep2Cmd) {
|
||||
purchaseOrderStep2CmdExe.execute(purchaseOrderStep2Cmd);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveStep3(PurchaseOrderStep3Cmd purchaseOrderStep3Cmd) {
|
||||
purchaseOrderStep3CmdExe.execute(purchaseOrderStep3Cmd);
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,6 +56,16 @@ public class ShipOrder extends DTO {
|
||||
*/
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 公司ID
|
||||
*/
|
||||
private Long companyId;
|
||||
|
||||
/**
|
||||
* 公司名称
|
||||
*/
|
||||
private String companyName;
|
||||
|
||||
/**
|
||||
* 车次号
|
||||
*/
|
||||
@ -196,4 +206,3 @@ public class ShipOrder extends DTO {
|
||||
*/
|
||||
private List<ShipOrderPackage> shipOrderPackageList;
|
||||
}
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@ package com.xunhong.erp.turbo.biz.domain.entity;
|
||||
|
||||
import com.alibaba.cola.domain.Entity;
|
||||
import com.alibaba.cola.dto.DTO;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
@ -55,6 +56,16 @@ public class Supplier extends DTO {
|
||||
*/
|
||||
private Boolean status;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 创建人姓名
|
||||
*/
|
||||
private String createdByName;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@ -16,6 +16,11 @@ import java.util.List;
|
||||
public interface PurchaseOrderGateway {
|
||||
PurchaseOrder save(PurchaseOrderCreateCmd purchaseOrderCreateCmd);
|
||||
|
||||
// 新增分步提交方法
|
||||
PurchaseOrder saveStep1(PurchaseOrderStep1Cmd purchaseOrderStep1Cmd);
|
||||
void saveStep2(PurchaseOrderStep2Cmd purchaseOrderStep2Cmd);
|
||||
void saveStep3(PurchaseOrderStep3Cmd purchaseOrderStep3Cmd);
|
||||
|
||||
IPage<PurchaseOrder> page(PurchaseOrderPageQry purchaseOrderPageQry);
|
||||
|
||||
List<PurchaseOrder> list(PurchaseOrderListQry purchaseOrderListQry);
|
||||
|
||||
@ -17,5 +17,7 @@ public interface OrderDealerConvert {
|
||||
@Mapping(target = "createdAt", ignore = true)
|
||||
OrderDealerDO toOrderDealerDO(OrderDealer orderDealer);
|
||||
|
||||
@Mapping(target = "createdByName", ignore = true)
|
||||
@Mapping(target = "createdBy", ignore = true)
|
||||
OrderDealer toOrderDealer(OrderDealerDO orderDealerDO);
|
||||
}
|
||||
|
||||
@ -25,6 +25,8 @@ public interface OrderSupplierConvert {
|
||||
|
||||
List<OrderSupplier> toOrderSupplierList(List<OrderSupplierDO> orderSupplierDOList);
|
||||
|
||||
@Mapping(target = "createdByName", ignore = true)
|
||||
@Mapping(target = "createdBy", ignore = true)
|
||||
@Mapping(target = "orderPackageList", source = "orderPackageDOList")
|
||||
OrderSupplier toOrderSupplier(OrderSupplierDO orderSupplierDO);
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package com.xunhong.erp.turbo.biz.infrastructure.convert;
|
||||
|
||||
import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderCreateCmd;
|
||||
import com.xunhong.erp.turbo.api.biz.dto.cmd.PurchaseOrderUpdateCmd;
|
||||
import com.xunhong.erp.turbo.api.biz.dto.cmd.*;
|
||||
import com.xunhong.erp.turbo.biz.domain.entity.PurchaseOrder;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.entity.PurchaseOrderDO;
|
||||
import org.mapstruct.Mapper;
|
||||
@ -23,6 +22,18 @@ public interface PurchaseOrderConvert {
|
||||
@Mapping(target = "orderVehicle", source = "orderVehicleDO")
|
||||
PurchaseOrder toPurchaseOrder(PurchaseOrderDO purchaseOrderDO);
|
||||
|
||||
@Mapping(target = "totalCost", ignore = true)
|
||||
@Mapping(target = "supplierCount", ignore = true)
|
||||
@Mapping(target = "saleAmount", ignore = true)
|
||||
@Mapping(target = "rebate", ignore = true)
|
||||
@Mapping(target = "pricingMethod", ignore = true)
|
||||
@Mapping(target = "packageFee", ignore = true)
|
||||
@Mapping(target = "orderRebateDO", ignore = true)
|
||||
@Mapping(target = "orderCompanyDO", ignore = true)
|
||||
@Mapping(target = "netWeight", ignore = true)
|
||||
@Mapping(target = "grossWeight", ignore = true)
|
||||
@Mapping(target = "freightCharge", ignore = true)
|
||||
@Mapping(target = "avgUnitPrice", ignore = true)
|
||||
@Mapping(target = "orderDealerDO", ignore = true)
|
||||
@Mapping(target = "orderCostDOList", ignore = true)
|
||||
@Mapping(target = "orderSn", ignore = true)
|
||||
@ -36,6 +47,18 @@ public interface PurchaseOrderConvert {
|
||||
@Mapping(target = "createdAt", ignore = true)
|
||||
PurchaseOrderDO toPurchaseOrderDO(PurchaseOrderCreateCmd purchaseOrderCreateCmd);
|
||||
|
||||
@Mapping(target = "totalCost", ignore = true)
|
||||
@Mapping(target = "supplierCount", ignore = true)
|
||||
@Mapping(target = "saleAmount", ignore = true)
|
||||
@Mapping(target = "rebate", ignore = true)
|
||||
@Mapping(target = "pricingMethod", ignore = true)
|
||||
@Mapping(target = "packageFee", ignore = true)
|
||||
@Mapping(target = "orderRebateDO", ignore = true)
|
||||
@Mapping(target = "orderCompanyDO", ignore = true)
|
||||
@Mapping(target = "netWeight", ignore = true)
|
||||
@Mapping(target = "grossWeight", ignore = true)
|
||||
@Mapping(target = "freightCharge", ignore = true)
|
||||
@Mapping(target = "avgUnitPrice", ignore = true)
|
||||
@Mapping(target = "orderDealerDO", ignore = true)
|
||||
@Mapping(target = "orderCostDOList", ignore = true)
|
||||
@Mapping(target = "orderVehicleDO", ignore = true)
|
||||
@ -48,5 +71,37 @@ public interface PurchaseOrderConvert {
|
||||
@Mapping(target = "isDelete", ignore = true)
|
||||
@Mapping(target = "createdAt", ignore = true)
|
||||
void toPurchaseOrderDO(@MappingTarget PurchaseOrderDO purchaseOrderDO, PurchaseOrderUpdateCmd purchaseOrderUpdateCmd);
|
||||
|
||||
PurchaseOrderStep1Cmd toPurchaseOrderStep1Cmd(PurchaseOrderCreateCmd purchaseOrderCreateCmd);
|
||||
|
||||
PurchaseOrderStep2Cmd toPurchaseOrderStep2Cmd(PurchaseOrderCreateCmd purchaseOrderCreateCmd);
|
||||
|
||||
PurchaseOrderStep3Cmd toPurchaseOrderStep3Cmd(PurchaseOrderCreateCmd purchaseOrderCreateCmd);
|
||||
|
||||
@Mapping(target = "originPrincipal", source = "createdByName")
|
||||
@Mapping(target = "version", ignore = true)
|
||||
@Mapping(target = "updatedAt", ignore = true)
|
||||
@Mapping(target = "totalCost", ignore = true)
|
||||
@Mapping(target = "supplierCount", ignore = true)
|
||||
@Mapping(target = "state", ignore = true)
|
||||
@Mapping(target = "saleAmount", ignore = true)
|
||||
@Mapping(target = "remark", ignore = true)
|
||||
@Mapping(target = "rebate", ignore = true)
|
||||
@Mapping(target = "pricingMethod", ignore = true)
|
||||
@Mapping(target = "packageFee", ignore = true)
|
||||
@Mapping(target = "orderVehicleDO", ignore = true)
|
||||
@Mapping(target = "orderSupplierDOList", ignore = true)
|
||||
@Mapping(target = "orderSn", ignore = true)
|
||||
@Mapping(target = "orderRebateDO", ignore = true)
|
||||
@Mapping(target = "orderDealerDO", ignore = true)
|
||||
@Mapping(target = "orderCostDOList", ignore = true)
|
||||
@Mapping(target = "orderCompanyDO", ignore = true)
|
||||
@Mapping(target = "netWeight", ignore = true)
|
||||
@Mapping(target = "isDelete", ignore = true)
|
||||
@Mapping(target = "grossWeight", ignore = true)
|
||||
@Mapping(target = "freightCharge", ignore = true)
|
||||
@Mapping(target = "createdAt", ignore = true)
|
||||
@Mapping(target = "avgUnitPrice", ignore = true)
|
||||
PurchaseOrderDO toPurchaseOrderDO(PurchaseOrderStep1Cmd purchaseOrderStep1Cmd);
|
||||
}
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@ package com.xunhong.erp.turbo.biz.infrastructure.convert;
|
||||
|
||||
import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierCreateCmd;
|
||||
import com.xunhong.erp.turbo.api.biz.dto.cmd.SupplierUpdateCmd;
|
||||
import com.xunhong.erp.turbo.api.biz.dto.common.OrderSupplier;
|
||||
import com.xunhong.erp.turbo.biz.domain.entity.Supplier;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.entity.SupplierDO;
|
||||
import org.mapstruct.Mapper;
|
||||
@ -28,5 +29,13 @@ public interface SupplierConvert {
|
||||
@Mapping(target = "isDelete", ignore = true)
|
||||
@Mapping(target = "createdAt", ignore = true)
|
||||
void toSupplierDO(@MappingTarget SupplierDO supplierDO, SupplierUpdateCmd supplierUpdateCmd);
|
||||
|
||||
@Mapping(target = "version", ignore = true)
|
||||
@Mapping(target = "updatedAt", ignore = true)
|
||||
@Mapping(target = "status", ignore = true)
|
||||
@Mapping(target = "remark", ignore = true)
|
||||
@Mapping(target = "isDelete", ignore = true)
|
||||
@Mapping(target = "createdAt", ignore = true)
|
||||
SupplierDO toSupplierDO(OrderSupplier updatedSupplier);
|
||||
}
|
||||
|
||||
|
||||
@ -87,88 +87,27 @@ public class OrderDealerDO extends BaseDO<OrderDealerDO> {
|
||||
private String documentTypes;
|
||||
|
||||
/**
|
||||
* 账户ID
|
||||
* 税费补贴
|
||||
*/
|
||||
@TableField(value = "account_id")
|
||||
private Long accountId;
|
||||
@TableField(value = "tax_subsidy")
|
||||
private BigDecimal taxSubsidy;
|
||||
|
||||
/**
|
||||
* 公司名称
|
||||
* 计提税金
|
||||
*/
|
||||
@TableField(value = "company_name")
|
||||
private String companyName;
|
||||
@TableField(value = "tax_provision")
|
||||
private BigDecimal taxProvision;
|
||||
|
||||
/**
|
||||
* 税号
|
||||
* 成本差异
|
||||
*/
|
||||
@TableField(value = "tax_number")
|
||||
private String taxNumber;
|
||||
@TableField(value = "cost_difference")
|
||||
private BigDecimal costDifference;
|
||||
|
||||
/**
|
||||
* 银行账号
|
||||
* 利润分成
|
||||
*/
|
||||
@TableField(value = "bank_account")
|
||||
private String bankAccount;
|
||||
|
||||
/**
|
||||
* 单位地址
|
||||
*/
|
||||
@TableField(value = "company_address")
|
||||
private String companyAddress;
|
||||
|
||||
/**
|
||||
* 电话
|
||||
*/
|
||||
@TableField(value = "phone")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 开户行
|
||||
*/
|
||||
@TableField(value = "opening_bank")
|
||||
private String openingBank;
|
||||
|
||||
/**
|
||||
* 仓库ID
|
||||
*/
|
||||
@TableField(value = "warehouse_id")
|
||||
private Long warehouseId;
|
||||
|
||||
/**
|
||||
* 仓库名称
|
||||
*/
|
||||
@TableField(value = "warehouse_name")
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 仓库地址
|
||||
*/
|
||||
@TableField(value = "warehouse_address")
|
||||
private String warehouseAddress;
|
||||
|
||||
/**
|
||||
* 联系人
|
||||
*/
|
||||
@TableField(value = "contact_person")
|
||||
private String contactPerson;
|
||||
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
@TableField(value = "contact_phone")
|
||||
private String contactPhone;
|
||||
|
||||
/**
|
||||
* 收货人姓名
|
||||
*/
|
||||
@TableField(value = "receiver_name")
|
||||
private String receiverName;
|
||||
|
||||
/**
|
||||
* 收货人电话
|
||||
*/
|
||||
@TableField(value = "receiver_phone")
|
||||
private String receiverPhone;
|
||||
@TableField(value = "profit_sharing")
|
||||
private BigDecimal profitSharing;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -43,6 +43,12 @@ public class OrderPackageDO extends BaseDO<OrderPackageDO> {
|
||||
@TableField(value = "box_brand_name")
|
||||
private String boxBrandName;
|
||||
|
||||
/**
|
||||
* 箱子品牌图片
|
||||
*/
|
||||
@TableField(value = "box_brand_image")
|
||||
private String boxBrandImage;
|
||||
|
||||
/**
|
||||
* 箱子分类ID
|
||||
*/
|
||||
@ -92,4 +98,3 @@ public class OrderPackageDO extends BaseDO<OrderPackageDO> {
|
||||
private OrderPackageBoxTypeEnum boxType;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -63,6 +63,18 @@ public class ShipOrderDO extends BaseDO<ShipOrderDO> {
|
||||
@TableField(value = "warehouse_name")
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 公司ID
|
||||
*/
|
||||
@TableField(value = "company_id")
|
||||
private Long companyId;
|
||||
|
||||
/**
|
||||
* 公司名称
|
||||
*/
|
||||
@TableField(value = "company_name")
|
||||
private String companyName;
|
||||
|
||||
/**
|
||||
* 车次号
|
||||
*/
|
||||
@ -227,4 +239,3 @@ public class ShipOrderDO extends BaseDO<ShipOrderDO> {
|
||||
private List<ShipOrderItemDO> shipOrderItemDOList;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -71,6 +71,4 @@ public class ShipOrderPackageDO extends BaseDO<ShipOrderPackageDO> {
|
||||
*/
|
||||
@TableField(value = "total_weight")
|
||||
private BigDecimal totalWeight;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -58,6 +58,18 @@ public class SupplierDO extends BaseDO<SupplierDO> {
|
||||
@TableField(value = "remark")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 创建人ID
|
||||
*/
|
||||
@TableField(value = "created_by")
|
||||
private Long createdBy;
|
||||
|
||||
/**
|
||||
* 创建人姓名
|
||||
*/
|
||||
@TableField(value = "created_by_name")
|
||||
private String createdByName;
|
||||
|
||||
/**
|
||||
* 状态:1_启用;0_禁用;
|
||||
*/
|
||||
|
||||
@ -98,7 +98,11 @@ public class DealerRebateCustomerGatewayImpl implements DealerRebateCustomerGate
|
||||
@Override
|
||||
public DealerRebateCustomer show(DealerRebateCustomerShowQry dealerRebateCustomerShowQry) {
|
||||
LambdaQueryWrapper<DealerRebateCustomerDO> queryWrapper = Wrappers.lambdaQuery(DealerRebateCustomerDO.class);
|
||||
queryWrapper.eq(DealerRebateCustomerDO::getCustomerId, dealerRebateCustomerShowQry.getCustomerId());
|
||||
queryWrapper.eq(Objects.nonNull(dealerRebateCustomerShowQry.getCustomerId()), DealerRebateCustomerDO::getCustomerId, dealerRebateCustomerShowQry.getCustomerId());
|
||||
queryWrapper.eq(Objects.nonNull(dealerRebateCustomerShowQry.getDealerId()), DealerRebateCustomerDO::getDealerId, dealerRebateCustomerShowQry.getDealerId());
|
||||
queryWrapper.eq(Objects.nonNull(dealerRebateCustomerShowQry.getStatus()), DealerRebateCustomerDO::getStatus, dealerRebateCustomerShowQry.getStatus());
|
||||
|
||||
|
||||
queryWrapper.last("limit 1");
|
||||
|
||||
DealerRebateCustomerDO dealerRebateCustomerDO = dealerRebateCustomerMapper.selectOne(queryWrapper);
|
||||
|
||||
@ -66,47 +66,17 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
|
||||
private final ShipOrderItemMapper shipOrderItemMapper;
|
||||
private final ShipOrderPackageMapper shipOrderPackageMapper;
|
||||
|
||||
private final SupplierMapper supplierMapper;
|
||||
private final SupplierConvert supplierConvert;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PurchaseOrder save(PurchaseOrderCreateCmd purchaseOrderCreateCmd) {
|
||||
PurchaseOrderDO purchaseOrderDO = purchaseOrderConvert.toPurchaseOrderDO(purchaseOrderCreateCmd);
|
||||
purchaseOrderDO.setState(PurchaseOrderStateEnum.DRAFT);
|
||||
purchaseOrderDO.setOrderSn("CG" + generateShipOrderSn());
|
||||
purchaseOrderMapper.insert(purchaseOrderDO);
|
||||
|
||||
// 订单运输信息
|
||||
OrderVehicle orderVehicle = purchaseOrderCreateCmd.getOrderVehicle();
|
||||
orderVehicle.setOrderId(purchaseOrderDO.getOrderId());
|
||||
OrderVehicleDO orderVehicleDO = orderVehicleConvert.toOrderVehicleDO(orderVehicle);
|
||||
orderVehicleMapper.insert(orderVehicleDO);
|
||||
|
||||
// 订单经销商信息
|
||||
OrderDealer orderDealer = purchaseOrderCreateCmd.getOrderDealer();
|
||||
orderDealer.setOrderId(purchaseOrderDO.getOrderId());
|
||||
OrderDealerDO orderDealerDO = orderDealerConvert.toOrderDealerDO(orderDealer);
|
||||
orderDealerMapper.insert(orderDealerDO);
|
||||
|
||||
// 订单供应商信息
|
||||
purchaseOrderCreateCmd.getOrderSupplierList().forEach(orderSupplier -> {
|
||||
orderSupplier.setOrderId(purchaseOrderDO.getOrderId());
|
||||
OrderSupplierDO orderSupplierDO = orderSupplierConvert.toOrderSupplierDO(orderSupplier);
|
||||
orderSupplierMapper.insert(orderSupplierDO);
|
||||
|
||||
// 订单包材信息
|
||||
orderSupplier.getOrderPackageList().forEach(orderPackage -> {
|
||||
orderPackage.setOrderSupplierId(orderSupplierDO.getOrderSupplierId());
|
||||
OrderPackageDO orderPackageDO = orderPackageConvert.toOrderPackageDO(orderPackage);
|
||||
orderPackageMapper.insert(orderPackageDO);
|
||||
});
|
||||
});
|
||||
|
||||
// 订单费用信息
|
||||
purchaseOrderCreateCmd.getOrderCostList().forEach(orderCost -> {
|
||||
orderCost.setOrderId(purchaseOrderDO.getOrderId());
|
||||
orderCostMapper.insert(orderCostConvert.toOrderCostDO(orderCost));
|
||||
});
|
||||
|
||||
return purchaseOrderConvert.toPurchaseOrder(purchaseOrderDO);
|
||||
PurchaseOrder purchaseOrder = saveStep1(purchaseOrderConvert.toPurchaseOrderStep1Cmd(purchaseOrderCreateCmd));
|
||||
purchaseOrderCreateCmd.setOrderId(purchaseOrder.getOrderId());
|
||||
saveStep2(purchaseOrderConvert.toPurchaseOrderStep2Cmd(purchaseOrderCreateCmd));
|
||||
saveStep3(purchaseOrderConvert.toPurchaseOrderStep3Cmd(purchaseOrderCreateCmd));
|
||||
return purchaseOrder;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -129,10 +99,9 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
|
||||
}
|
||||
}
|
||||
|
||||
if (Objects.nonNull(purchaseOrderPageQry.getDealerId()) || Objects.nonNull(purchaseOrderPageQry.getDealerPaymentAccountId())) {
|
||||
if (Objects.nonNull(purchaseOrderPageQry.getDealerId())) {
|
||||
LambdaQueryWrapper<OrderDealerDO> queryWrapper1 = Wrappers.lambdaQuery(OrderDealerDO.class);
|
||||
queryWrapper1.eq(Objects.nonNull(purchaseOrderPageQry.getDealerId()), OrderDealerDO::getDealerId, purchaseOrderPageQry.getDealerId());
|
||||
queryWrapper1.eq(Objects.nonNull(purchaseOrderPageQry.getDealerPaymentAccountId()), OrderDealerDO::getAccountId, purchaseOrderPageQry.getDealerPaymentAccountId());
|
||||
List<OrderDealerDO> orderDealerDOList = orderDealerMapper.selectList(queryWrapper1);
|
||||
|
||||
if (CollUtil.isNotEmpty(orderDealerDOList)) {
|
||||
@ -174,159 +143,7 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
|
||||
@Override
|
||||
@Transactional
|
||||
public PurchaseOrder update(PurchaseOrderUpdateCmd purchaseOrderUpdateCmd) {
|
||||
LambdaQueryWrapper<PurchaseOrderDO> queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class);
|
||||
queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderUpdateCmd.getOrderId());
|
||||
queryWrapper.last("limit 1");
|
||||
|
||||
PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper);
|
||||
|
||||
purchaseOrderConvert.toPurchaseOrderDO(purchaseOrderDO, purchaseOrderUpdateCmd);
|
||||
purchaseOrderMapper.updateById(purchaseOrderDO);
|
||||
|
||||
// 更新车辆信息
|
||||
OrderVehicle orderVehicle = purchaseOrderUpdateCmd.getOrderVehicle();
|
||||
OrderVehicleDO orderVehicleDO = orderVehicleConvert.toOrderVehicleDO(orderVehicle);
|
||||
orderVehicleDO.setOrderId(purchaseOrderDO.getOrderId());
|
||||
orderVehicleMapper.updateById(orderVehicleDO);
|
||||
|
||||
// 更新经销商信息
|
||||
OrderDealer orderDealer = purchaseOrderUpdateCmd.getOrderDealer();
|
||||
orderDealer.setOrderId(purchaseOrderDO.getOrderId());
|
||||
OrderDealerDO orderDealerDO = orderDealerConvert.toOrderDealerDO(orderDealer);
|
||||
// 先尝试更新,如果不存在则插入
|
||||
if (orderDealerDO.getOrderDealerId() != null) {
|
||||
orderDealerMapper.updateById(orderDealerDO);
|
||||
} else {
|
||||
LambdaQueryWrapper<OrderDealerDO> dealerQueryWrapper = Wrappers.lambdaQuery(OrderDealerDO.class);
|
||||
dealerQueryWrapper.eq(OrderDealerDO::getOrderId, purchaseOrderDO.getOrderId());
|
||||
OrderDealerDO existingDealer = orderDealerMapper.selectOne(dealerQueryWrapper);
|
||||
if (existingDealer != null) {
|
||||
orderDealerDO.setOrderDealerId(existingDealer.getOrderDealerId());
|
||||
orderDealerMapper.updateById(orderDealerDO);
|
||||
} else {
|
||||
orderDealerMapper.insert(orderDealerDO);
|
||||
}
|
||||
}
|
||||
|
||||
// 更新供应商信息(精细化处理)
|
||||
// 获取现有的供应商列表
|
||||
LambdaQueryWrapper<OrderSupplierDO> supplierQueryWrapper = Wrappers.lambdaQuery(OrderSupplierDO.class);
|
||||
supplierQueryWrapper.eq(OrderSupplierDO::getOrderId, purchaseOrderDO.getOrderId());
|
||||
List<OrderSupplierDO> existingSuppliers = orderSupplierMapper.selectList(supplierQueryWrapper);
|
||||
|
||||
// 获取更新的供应商列表
|
||||
List<OrderSupplier> updatedSuppliers = purchaseOrderUpdateCmd.getOrderSupplierList();
|
||||
|
||||
// 将现有供应商映射到ID字典中便于查找
|
||||
Map<Long, OrderSupplierDO> existingSupplierMap = existingSuppliers.stream()
|
||||
.collect(Collectors.toMap(OrderSupplierDO::getOrderSupplierId, Function.identity()));
|
||||
|
||||
// 收集需要更新和新增的供应商
|
||||
List<OrderSupplierDO> suppliersToInsert = new ArrayList<>();
|
||||
List<OrderSupplierDO> suppliersToUpdate = new ArrayList<>();
|
||||
|
||||
for (OrderSupplier updatedSupplier : updatedSuppliers) {
|
||||
updatedSupplier.setOrderId(purchaseOrderDO.getOrderId());
|
||||
OrderSupplierDO supplierDO = orderSupplierConvert.toOrderSupplierDO(updatedSupplier);
|
||||
|
||||
if (updatedSupplier.getOrderSupplierId() != null && existingSupplierMap.containsKey(updatedSupplier.getOrderSupplierId())) {
|
||||
// 更新已存在的供应商
|
||||
supplierDO.setOrderSupplierId(updatedSupplier.getOrderSupplierId());
|
||||
suppliersToUpdate.add(supplierDO);
|
||||
// 从现有映射中移除,剩下的就是需要删除的
|
||||
existingSupplierMap.remove(updatedSupplier.getOrderSupplierId());
|
||||
} else {
|
||||
// 新增供应商
|
||||
suppliersToInsert.add(supplierDO);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除不再需要的供应商
|
||||
existingSupplierMap.values().forEach(supplier -> supplier.deleteById());
|
||||
|
||||
// 执行更新操作
|
||||
suppliersToUpdate.forEach(orderSupplierMapper::updateById);
|
||||
|
||||
// 执行插入操作
|
||||
suppliersToInsert.forEach(orderSupplierMapper::insert);
|
||||
|
||||
// 处理包材信息(对更新和新增的供应商)
|
||||
List<OrderSupplierDO> allAffectedSuppliers = new ArrayList<>();
|
||||
allAffectedSuppliers.addAll(suppliersToUpdate);
|
||||
allAffectedSuppliers.addAll(suppliersToInsert);
|
||||
|
||||
for (OrderSupplierDO supplierDO : allAffectedSuppliers) {
|
||||
// 查找对应的更新数据
|
||||
OrderSupplier updatedSupplier = updatedSuppliers.stream()
|
||||
.filter(s -> (s.getOrderSupplierId() != null && s.getOrderSupplierId().equals(supplierDO.getOrderSupplierId()))
|
||||
|| (s.getOrderSupplierId() == null && supplierDO.getOrderSupplierId() != null
|
||||
&& s.getSupplierId().equals(supplierDO.getSupplierId())))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (updatedSupplier != null && updatedSupplier.getOrderPackageList() != null && !updatedSupplier.getOrderPackageList().isEmpty()) {
|
||||
// 删除旧的包材信息
|
||||
LambdaQueryWrapper<OrderPackageDO> packageDeleteWrapper = Wrappers.lambdaQuery(OrderPackageDO.class);
|
||||
packageDeleteWrapper.eq(OrderPackageDO::getOrderSupplierId, supplierDO.getOrderSupplierId());
|
||||
orderPackageMapper.delete(packageDeleteWrapper);
|
||||
|
||||
// 插入新的包材信息
|
||||
for (OrderPackage orderPackage : updatedSupplier.getOrderPackageList()) {
|
||||
orderPackage.setOrderSupplierId(supplierDO.getOrderSupplierId());
|
||||
OrderPackageDO orderPackageDO = orderPackageConvert.toOrderPackageDO(orderPackage);
|
||||
orderPackageMapper.insert(orderPackageDO);
|
||||
}
|
||||
} else if (updatedSupplier != null) {
|
||||
// 如果更新的数据中包材列表为空,则删除所有包材信息
|
||||
LambdaQueryWrapper<OrderPackageDO> packageDeleteWrapper = Wrappers.lambdaQuery(OrderPackageDO.class);
|
||||
packageDeleteWrapper.eq(OrderPackageDO::getOrderSupplierId, supplierDO.getOrderSupplierId());
|
||||
orderPackageMapper.delete(packageDeleteWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
// 更新费用信息(精细化处理)
|
||||
// 获取现有的费用列表
|
||||
LambdaQueryWrapper<OrderCostDO> costQueryWrapper = Wrappers.lambdaQuery(OrderCostDO.class);
|
||||
costQueryWrapper.eq(OrderCostDO::getOrderId, purchaseOrderDO.getOrderId());
|
||||
List<OrderCostDO> existingCosts = orderCostMapper.selectList(costQueryWrapper);
|
||||
|
||||
// 获取更新的费用列表
|
||||
List<OrderCost> updatedCosts = purchaseOrderUpdateCmd.getOrderCostList();
|
||||
|
||||
// 将现有费用映射到ID字典中便于查找
|
||||
Map<Long, OrderCostDO> existingCostMap = existingCosts.stream()
|
||||
.collect(Collectors.toMap(OrderCostDO::getOrderCostId, Function.identity()));
|
||||
|
||||
// 收集需要更新和新增的费用
|
||||
List<OrderCostDO> costsToInsert = new ArrayList<>();
|
||||
List<OrderCostDO> costsToUpdate = new ArrayList<>();
|
||||
|
||||
for (OrderCost updatedCost : updatedCosts) {
|
||||
updatedCost.setOrderId(purchaseOrderDO.getOrderId());
|
||||
OrderCostDO costDO = orderCostConvert.toOrderCostDO(updatedCost);
|
||||
|
||||
if (updatedCost.getOrderCostId() != null && existingCostMap.containsKey(updatedCost.getOrderCostId())) {
|
||||
// 更新已存在的费用
|
||||
costDO.setOrderCostId(updatedCost.getOrderCostId());
|
||||
costsToUpdate.add(costDO);
|
||||
// 从现有映射中移除,剩下的就是需要删除的
|
||||
existingCostMap.remove(updatedCost.getOrderCostId());
|
||||
} else {
|
||||
// 新增费用
|
||||
costsToInsert.add(costDO);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除不再需要的费用
|
||||
existingCostMap.values().forEach(cost -> cost.deleteById());
|
||||
|
||||
// 执行更新操作
|
||||
costsToUpdate.forEach(orderCostMapper::updateById);
|
||||
|
||||
// 执行插入操作
|
||||
costsToInsert.forEach(orderCostMapper::insert);
|
||||
|
||||
return purchaseOrderConvert.toPurchaseOrder(purchaseOrderDO);
|
||||
return save(purchaseOrderUpdateCmd);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -603,6 +420,7 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
|
||||
shipOrderDO.setDriverName(orderVehicleDO.getDriver());
|
||||
shipOrderDO.setDriverPhone(orderVehicleDO.getPhone());
|
||||
shipOrderDO.setShippingDate(orderVehicleDO.getDeliveryTime());
|
||||
shipOrderDO.setShippingAddress(orderVehicleDO.getOrigin());
|
||||
shipOrderDO.setFreightDebt(orderVehicleDO.getPrice());
|
||||
if (orderVehicleDO.getOpenStrawCurtain()) {
|
||||
shipOrderDO.setStrawMatDebt(orderVehicleDO.getStrawCurtainPrice());
|
||||
@ -612,16 +430,23 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
|
||||
shipOrderDO.setVehicleNo(orderVehicleDO.getVehicleNo());
|
||||
}
|
||||
|
||||
// 从公司信息中获取相关信息
|
||||
OrderCompanyDO orderCompanyDO = orderCompanyMapper.selectOne(
|
||||
Wrappers.lambdaQuery(OrderCompanyDO.class)
|
||||
.eq(OrderCompanyDO::getOrderId, purchaseOrderDO.getOrderId())
|
||||
);
|
||||
|
||||
if (orderCompanyDO != null) {
|
||||
shipOrderDO.setCompanyId(orderCompanyDO.getCompanyId());
|
||||
shipOrderDO.setCompanyName(orderCompanyDO.getFullName());
|
||||
}
|
||||
|
||||
// 从经销商信息中获取相关信息
|
||||
OrderDealerDO orderDealerDO = orderDealerMapper.selectOne(
|
||||
Wrappers.lambdaQuery(OrderDealerDO.class)
|
||||
.eq(OrderDealerDO::getOrderId, purchaseOrderDO.getOrderId())
|
||||
);
|
||||
|
||||
if (orderDealerDO != null) {
|
||||
shipOrderDO.setReceivingAddress(orderDealerDO.getWarehouseAddress());
|
||||
}
|
||||
|
||||
// 设置其他基本信息
|
||||
shipOrderDO.setCreatedBy(purchaseOrderFinalApproveCmd.getCreatedBy());
|
||||
shipOrderDO.setCreatedByName(purchaseOrderFinalApproveCmd.getCreatedByName());
|
||||
@ -734,8 +559,6 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
|
||||
BigDecimal totalAmount = unitPrice.multiply(BigDecimal.valueOf(totalQuantity));
|
||||
shipOrderPackageDO.setItemAmount(totalAmount);
|
||||
|
||||
shipOrderPackageDO.setSingleWeight(shipOrderPackageDO.getTotalWeight().divide(shipOrderPackageDO.getUnitPrice(), 2, RoundingMode.HALF_UP));
|
||||
|
||||
// 计算总重量(如果有)
|
||||
BigDecimal totalWeight = packages.stream()
|
||||
.map(p -> {
|
||||
@ -747,6 +570,8 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
shipOrderPackageDO.setTotalWeight(totalWeight);
|
||||
|
||||
shipOrderPackageDO.setSingleWeight(shipOrderPackageDO.getTotalWeight().divide(shipOrderPackageDO.getUnitPrice(), 2, RoundingMode.HALF_UP));
|
||||
|
||||
shipOrderPackageMapper.insert(shipOrderPackageDO);
|
||||
}
|
||||
|
||||
@ -832,5 +657,269 @@ public class PurchaseOrderGatewayImpl implements PurchaseOrderGateway {
|
||||
queryWrapper.eq(PurchaseOrderDO::getState, purchaseOrderCountQry.getState());
|
||||
return purchaseOrderMapper.selectCount(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PurchaseOrder saveStep1(PurchaseOrderStep1Cmd purchaseOrderStep1Cmd) {
|
||||
PurchaseOrderDO purchaseOrderDO;
|
||||
|
||||
// 如果订单ID为空,则创建新订单
|
||||
if (purchaseOrderStep1Cmd.getOrderId() == null) {
|
||||
purchaseOrderDO = purchaseOrderConvert.toPurchaseOrderDO(purchaseOrderStep1Cmd);
|
||||
purchaseOrderDO.setState(PurchaseOrderStateEnum.DRAFT);
|
||||
purchaseOrderDO.setOrderSn("CG" + generateShipOrderSn());
|
||||
purchaseOrderMapper.insert(purchaseOrderDO);
|
||||
} else {
|
||||
// 否则更新现有订单
|
||||
LambdaQueryWrapper<PurchaseOrderDO> queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class);
|
||||
queryWrapper.eq(PurchaseOrderDO::getOrderId, purchaseOrderStep1Cmd.getOrderId());
|
||||
queryWrapper.select(PurchaseOrderDO::getOrderId, PurchaseOrderDO::getActive);
|
||||
queryWrapper.last("limit 1");
|
||||
purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper);
|
||||
purchaseOrderDO.setActive(purchaseOrderStep1Cmd.getActive());
|
||||
purchaseOrderMapper.updateById(purchaseOrderDO);
|
||||
}
|
||||
|
||||
// 保存或更新车辆信息
|
||||
OrderVehicle orderVehicle = purchaseOrderStep1Cmd.getOrderVehicle();
|
||||
orderVehicle.setOrderId(purchaseOrderDO.getOrderId());
|
||||
OrderVehicleDO orderVehicleDO = orderVehicleConvert.toOrderVehicleDO(orderVehicle);
|
||||
|
||||
if (orderVehicle.getVehicleId() != null) {
|
||||
orderVehicleMapper.updateById(orderVehicleDO);
|
||||
} else {
|
||||
// 检查是否已存在车辆信息
|
||||
LambdaQueryWrapper<OrderVehicleDO> vehicleQueryWrapper = Wrappers.lambdaQuery(OrderVehicleDO.class);
|
||||
vehicleQueryWrapper.eq(OrderVehicleDO::getOrderId, purchaseOrderDO.getOrderId());
|
||||
OrderVehicleDO existingVehicle = orderVehicleMapper.selectOne(vehicleQueryWrapper);
|
||||
|
||||
if (existingVehicle != null) {
|
||||
orderVehicleDO.setVehicleId(existingVehicle.getVehicleId());
|
||||
orderVehicleMapper.updateById(orderVehicleDO);
|
||||
} else {
|
||||
orderVehicleMapper.insert(orderVehicleDO);
|
||||
}
|
||||
}
|
||||
|
||||
// 保存或更新经销商信息
|
||||
OrderDealer orderDealer = purchaseOrderStep1Cmd.getOrderDealer();
|
||||
orderDealer.setOrderId(purchaseOrderDO.getOrderId());
|
||||
OrderDealerDO orderDealerDO = orderDealerConvert.toOrderDealerDO(orderDealer);
|
||||
|
||||
if (orderDealer.getOrderDealerId() != null) {
|
||||
orderDealerMapper.updateById(orderDealerDO);
|
||||
} else {
|
||||
// 检查是否已存在经销商信息
|
||||
LambdaQueryWrapper<OrderDealerDO> dealerQueryWrapper = Wrappers.lambdaQuery(OrderDealerDO.class);
|
||||
dealerQueryWrapper.eq(OrderDealerDO::getOrderId, purchaseOrderDO.getOrderId());
|
||||
OrderDealerDO existingDealer = orderDealerMapper.selectOne(dealerQueryWrapper);
|
||||
|
||||
if (existingDealer != null) {
|
||||
orderDealerDO.setOrderDealerId(existingDealer.getOrderDealerId());
|
||||
orderDealerMapper.updateById(orderDealerDO);
|
||||
} else {
|
||||
orderDealerMapper.insert(orderDealerDO);
|
||||
}
|
||||
}
|
||||
|
||||
return purchaseOrderConvert.toPurchaseOrder(purchaseOrderDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void saveStep2(PurchaseOrderStep2Cmd purchaseOrderStep2Cmd) {
|
||||
Long orderId = purchaseOrderStep2Cmd.getOrderId();
|
||||
|
||||
// 否则更新现有订单
|
||||
LambdaQueryWrapper<PurchaseOrderDO> queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class);
|
||||
queryWrapper.eq(PurchaseOrderDO::getOrderId, orderId);
|
||||
queryWrapper.select(PurchaseOrderDO::getOrderId, PurchaseOrderDO::getActive);
|
||||
queryWrapper.last("limit 1");
|
||||
PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper);
|
||||
purchaseOrderDO.setActive(purchaseOrderStep2Cmd.getActive());
|
||||
purchaseOrderMapper.updateById(purchaseOrderDO);
|
||||
|
||||
// 更新供应商信息(精细化处理)
|
||||
// 获取现有的供应商列表
|
||||
LambdaQueryWrapper<OrderSupplierDO> supplierQueryWrapper = Wrappers.lambdaQuery(OrderSupplierDO.class);
|
||||
supplierQueryWrapper.eq(OrderSupplierDO::getOrderId, orderId);
|
||||
List<OrderSupplierDO> existingSuppliers = orderSupplierMapper.selectList(supplierQueryWrapper);
|
||||
|
||||
// 获取更新的供应商列表
|
||||
List<OrderSupplier> updatedSuppliers = purchaseOrderStep2Cmd.getOrderSupplierList();
|
||||
|
||||
// 将现有供应商映射到ID字典中便于查找
|
||||
Map<Long, OrderSupplierDO> existingOrderSupplierMap = existingSuppliers.stream()
|
||||
.collect(Collectors.toMap(OrderSupplierDO::getSupplierId, Function.identity()));
|
||||
|
||||
// 将更新后的供应商映射到ID字典中便于查找
|
||||
Map<Long, Long> existingSupplierMap = existingSuppliers.stream().collect(Collectors.toMap(OrderSupplierDO::getSupplierId, OrderSupplierDO::getOrderSupplierId));
|
||||
|
||||
// 收集需要更新和新增的供应商
|
||||
List<OrderSupplierDO> suppliersToInsert = new ArrayList<>();
|
||||
List<OrderSupplierDO> suppliersToUpdate = new ArrayList<>();
|
||||
|
||||
for (OrderSupplier updatedSupplier : updatedSuppliers) {
|
||||
// 检查供应商ID是否为空,如果为空则创建新的供应商
|
||||
if (Objects.isNull(updatedSupplier.getSupplierId())) {
|
||||
SupplierDO supplierDO1 = supplierConvert.toSupplierDO(updatedSupplier);
|
||||
supplierDO1.setStatus(Boolean.TRUE);
|
||||
supplierDO1.setCreatedBy(purchaseOrderStep2Cmd.getCreatedBy());
|
||||
supplierDO1.setCreatedByName(purchaseOrderStep2Cmd.getCreatedByName());
|
||||
supplierMapper.insert(supplierDO1);
|
||||
|
||||
updatedSupplier.setSupplierId(supplierDO1.getSupplierId());
|
||||
}
|
||||
|
||||
updatedSupplier.setOrderId(orderId);
|
||||
OrderSupplierDO orderSupplierDO = orderSupplierConvert.toOrderSupplierDO(updatedSupplier);
|
||||
|
||||
if (updatedSupplier.getSupplierId() != null && existingOrderSupplierMap.containsKey(updatedSupplier.getSupplierId())) {
|
||||
// 更新已存在的供应商
|
||||
orderSupplierDO.setSupplierId(updatedSupplier.getSupplierId());
|
||||
|
||||
Long orderSupplierId = existingSupplierMap.get(updatedSupplier.getSupplierId());
|
||||
orderSupplierDO.setOrderSupplierId(orderSupplierId);
|
||||
updatedSupplier.setOrderSupplierId(orderSupplierId);
|
||||
|
||||
suppliersToUpdate.add(orderSupplierDO);
|
||||
// 从现有映射中移除,剩下的就是需要删除的
|
||||
existingOrderSupplierMap.remove(updatedSupplier.getSupplierId());
|
||||
} else {
|
||||
// 新增供应商
|
||||
suppliersToInsert.add(orderSupplierDO);
|
||||
updatedSupplier.setOrderSupplierId(orderSupplierDO.getOrderSupplierId());
|
||||
}
|
||||
}
|
||||
|
||||
// 删除不再需要的供应商
|
||||
existingOrderSupplierMap.values().forEach(supplier -> supplier.deleteById());
|
||||
|
||||
// 执行更新操作
|
||||
suppliersToUpdate.forEach(orderSupplierMapper::updateById);
|
||||
|
||||
// 执行插入操作
|
||||
suppliersToInsert.forEach(orderSupplierMapper::insert);
|
||||
|
||||
// 第三步处理包材
|
||||
if (purchaseOrderStep2Cmd.getActive() == 4) {
|
||||
// 处理包材信息(对更新和新增的供应商)
|
||||
List<OrderSupplierDO> allAffectedSuppliers = new ArrayList<>();
|
||||
allAffectedSuppliers.addAll(suppliersToUpdate);
|
||||
allAffectedSuppliers.addAll(suppliersToInsert);
|
||||
|
||||
for (OrderSupplierDO supplierDO : allAffectedSuppliers) {
|
||||
// 查找对应的更新数据
|
||||
OrderSupplier updatedSupplier = updatedSuppliers.stream()
|
||||
.filter(s -> (s.getOrderSupplierId() != null && s.getOrderSupplierId().equals(supplierDO.getOrderSupplierId()))
|
||||
|| (s.getOrderSupplierId() == null && supplierDO.getOrderSupplierId() != null
|
||||
&& s.getSupplierId().equals(supplierDO.getSupplierId())))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (updatedSupplier != null && updatedSupplier.getOrderPackageList() != null && !updatedSupplier.getOrderPackageList().isEmpty()) {
|
||||
// 获取现有的包材信息
|
||||
LambdaQueryWrapper<OrderPackageDO> packageQueryWrapper = Wrappers.lambdaQuery(OrderPackageDO.class);
|
||||
packageQueryWrapper.eq(OrderPackageDO::getOrderSupplierId, supplierDO.getOrderSupplierId());
|
||||
List<OrderPackageDO> existingPackages = orderPackageMapper.selectList(packageQueryWrapper);
|
||||
|
||||
// 将现有包材映射到ID字典中便于查找
|
||||
Map<Long, OrderPackageDO> existingPackageMap = existingPackages.stream()
|
||||
.collect(Collectors.toMap(OrderPackageDO::getOrderPackageId, Function.identity()));
|
||||
|
||||
// 收集需要更新和新增的包材
|
||||
List<OrderPackageDO> packagesToInsert = new ArrayList<>();
|
||||
List<OrderPackageDO> packagesToUpdate = new ArrayList<>();
|
||||
|
||||
for (OrderPackage orderPackage : updatedSupplier.getOrderPackageList()) {
|
||||
orderPackage.setOrderSupplierId(supplierDO.getOrderSupplierId());
|
||||
OrderPackageDO orderPackageDO = orderPackageConvert.toOrderPackageDO(orderPackage);
|
||||
|
||||
if (orderPackage.getOrderPackageId() != null && existingPackageMap.containsKey(orderPackage.getOrderPackageId())) {
|
||||
// 更新已存在的包材
|
||||
orderPackageDO.setOrderPackageId(orderPackage.getOrderPackageId());
|
||||
packagesToUpdate.add(orderPackageDO);
|
||||
// 从现有映射中移除,剩下的就是需要删除的
|
||||
existingPackageMap.remove(orderPackage.getOrderPackageId());
|
||||
} else {
|
||||
// 新增包材
|
||||
packagesToInsert.add(orderPackageDO);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除不再需要的包材
|
||||
existingPackageMap.values().forEach(packageDO -> packageDO.deleteById());
|
||||
|
||||
// 执行更新操作
|
||||
packagesToUpdate.forEach(orderPackageMapper::updateById);
|
||||
|
||||
// 执行插入操作
|
||||
packagesToInsert.forEach(orderPackageMapper::insert);
|
||||
} else if (updatedSupplier != null) {
|
||||
// 如果更新的数据中包材列表为空,则删除所有包材信息
|
||||
LambdaQueryWrapper<OrderPackageDO> packageDeleteWrapper = Wrappers.lambdaQuery(OrderPackageDO.class);
|
||||
packageDeleteWrapper.eq(OrderPackageDO::getOrderSupplierId, supplierDO.getOrderSupplierId());
|
||||
orderPackageMapper.delete(packageDeleteWrapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void saveStep3(PurchaseOrderStep3Cmd purchaseOrderStep3Cmd) {
|
||||
Long orderId = purchaseOrderStep3Cmd.getOrderId();
|
||||
|
||||
// 否则更新现有订单
|
||||
LambdaQueryWrapper<PurchaseOrderDO> queryWrapper = Wrappers.lambdaQuery(PurchaseOrderDO.class);
|
||||
queryWrapper.eq(PurchaseOrderDO::getOrderId, orderId);
|
||||
queryWrapper.select(PurchaseOrderDO::getOrderId, PurchaseOrderDO::getActive);
|
||||
queryWrapper.last("limit 1");
|
||||
PurchaseOrderDO purchaseOrderDO = purchaseOrderMapper.selectOne(queryWrapper);
|
||||
purchaseOrderDO.setActive(purchaseOrderStep3Cmd.getActive());
|
||||
purchaseOrderMapper.updateById(purchaseOrderDO);
|
||||
|
||||
// 更新费用信息(精细化处理)
|
||||
// 获取现有的费用列表
|
||||
LambdaQueryWrapper<OrderCostDO> costQueryWrapper = Wrappers.lambdaQuery(OrderCostDO.class);
|
||||
costQueryWrapper.eq(OrderCostDO::getOrderId, orderId);
|
||||
List<OrderCostDO> existingCosts = orderCostMapper.selectList(costQueryWrapper);
|
||||
|
||||
// 获取更新的费用列表
|
||||
List<OrderCost> updatedCosts = purchaseOrderStep3Cmd.getOrderCostList();
|
||||
|
||||
// 将现有费用映射到ID字典中便于查找
|
||||
Map<Long, OrderCostDO> existingCostMap = existingCosts.stream()
|
||||
.collect(Collectors.toMap(OrderCostDO::getOrderCostId, Function.identity()));
|
||||
|
||||
// 收集需要更新和新增的费用
|
||||
List<OrderCostDO> costsToInsert = new ArrayList<>();
|
||||
List<OrderCostDO> costsToUpdate = new ArrayList<>();
|
||||
|
||||
for (OrderCost updatedCost : updatedCosts) {
|
||||
updatedCost.setOrderId(orderId);
|
||||
OrderCostDO costDO = orderCostConvert.toOrderCostDO(updatedCost);
|
||||
|
||||
if (updatedCost.getOrderCostId() != null && existingCostMap.containsKey(updatedCost.getOrderCostId())) {
|
||||
// 更新已存在的费用
|
||||
costDO.setOrderCostId(updatedCost.getOrderCostId());
|
||||
costsToUpdate.add(costDO);
|
||||
// 从现有映射中移除,剩下的就是需要删除的
|
||||
existingCostMap.remove(updatedCost.getOrderCostId());
|
||||
} else {
|
||||
// 新增费用
|
||||
costsToInsert.add(costDO);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除不再需要的费用
|
||||
existingCostMap.values().forEach(cost -> cost.deleteById());
|
||||
|
||||
// 执行更新操作
|
||||
costsToUpdate.forEach(orderCostMapper::updateById);
|
||||
|
||||
// 执行插入操作
|
||||
costsToInsert.forEach(orderCostMapper::insert);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.xunhong.erp.turbo.biz.infrastructure.gateway;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@ -16,9 +18,7 @@ import com.xunhong.erp.turbo.api.biz.dto.qry.ShipOrderShowQry;
|
||||
import com.xunhong.erp.turbo.biz.domain.entity.ShipOrder;
|
||||
import com.xunhong.erp.turbo.biz.domain.gateway.ShipOrderGateway;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.convert.ShipOrderConvert;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderDO;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderItemDO;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.entity.ShipOrderPackageDO;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.entity.*;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.mapper.ShipOrderItemMapper;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.mapper.ShipOrderMapper;
|
||||
import com.xunhong.erp.turbo.biz.infrastructure.mapper.ShipOrderPackageMapper;
|
||||
@ -51,6 +51,12 @@ public class ShipOrderGatewayImpl implements ShipOrderGateway {
|
||||
@Override
|
||||
public IPage<ShipOrder> page(ShipOrderPageQry shipOrderPageQry) {
|
||||
LambdaQueryWrapper<ShipOrderDO> queryWrapper = Wrappers.lambdaQuery(ShipOrderDO.class);
|
||||
queryWrapper.like(StrUtil.isNotBlank(shipOrderPageQry.getOrderSn()), ShipOrderDO::getOrderSn, shipOrderPageQry.getOrderSn());
|
||||
queryWrapper.eq(Objects.nonNull(shipOrderPageQry.getState()), ShipOrderDO::getState, shipOrderPageQry.getState());
|
||||
queryWrapper.eq(Objects.nonNull(shipOrderPageQry.getCreatedBy()), ShipOrderDO::getCreatedBy, shipOrderPageQry.getCreatedBy());
|
||||
queryWrapper.like(StrUtil.isNotBlank(shipOrderPageQry.getVehicleNo()), ShipOrderDO::getVehicleNo, shipOrderPageQry.getVehicleNo());
|
||||
queryWrapper.eq(Objects.nonNull(shipOrderPageQry.getDealerId()), ShipOrderDO::getDealerId, shipOrderPageQry.getDealerId());
|
||||
|
||||
queryWrapper.orderByDesc(ShipOrderDO::getCreatedAt);
|
||||
|
||||
IPage<ShipOrderDO> page = new Page<>(shipOrderPageQry.getPageIndex(), shipOrderPageQry.getPageSize());
|
||||
|
||||
@ -16,20 +16,10 @@
|
||||
<result property="strawMatCostFlag" column="straw_mat_cost_flag"/>
|
||||
<result property="includePackingFlag" column="include_packing_flag"/>
|
||||
<result property="documentTypes" column="document_types"/>
|
||||
<result property="accountId" column="account_id"/>
|
||||
<result property="companyName" column="company_name"/>
|
||||
<result property="taxNumber" column="tax_number"/>
|
||||
<result property="bankAccount" column="bank_account"/>
|
||||
<result property="companyAddress" column="company_address"/>
|
||||
<result property="phone" column="phone"/>
|
||||
<result property="openingBank" column="opening_bank"/>
|
||||
<result property="warehouseId" column="warehouse_id"/>
|
||||
<result property="warehouseName" column="warehouse_name"/>
|
||||
<result property="warehouseAddress" column="warehouse_address"/>
|
||||
<result property="contactPerson" column="contact_person"/>
|
||||
<result property="contactPhone" column="contact_phone"/>
|
||||
<result property="receiverName" column="receiver_name"/>
|
||||
<result property="receiverPhone" column="receiver_phone"/>
|
||||
<result property="taxSubsidy" column="tax_subsidy"/>
|
||||
<result property="taxProvision" column="tax_provision"/>
|
||||
<result property="costDifference" column="cost_difference"/>
|
||||
<result property="profitSharing" column="profit_sharing"/>
|
||||
<result property="createdAt" column="created_at"/>
|
||||
<result property="createdAt" column="created_at"/>
|
||||
<result property="updatedAt" column="updated_at"/>
|
||||
@ -37,4 +27,3 @@
|
||||
<result property="version" column="version"/>
|
||||
</resultMap>
|
||||
</mapper>
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
<result property="orderSupplierId" column="order_supplier_id"/>
|
||||
<result property="boxBrandId" column="box_brand_id"/>
|
||||
<result property="boxBrandName" column="box_brand_name"/>
|
||||
<result property="boxBrandImage" column="box_brand_image"/>
|
||||
<result property="boxCategoryId" column="box_category_id"/>
|
||||
<result property="boxProductId" column="box_product_id"/>
|
||||
<result property="boxProductName" column="box_product_name"/>
|
||||
@ -24,4 +25,3 @@
|
||||
<result property="version" column="version"/>
|
||||
</resultMap>
|
||||
</mapper>
|
||||
|
||||
|
||||
@ -12,6 +12,8 @@
|
||||
<result property="dealerName" column="dealer_name"/>
|
||||
<result property="warehouseId" column="warehouse_id"/>
|
||||
<result property="warehouseName" column="warehouse_name"/>
|
||||
<result property="companyId" column="company_id"/>
|
||||
<result property="companyName" column="company_name"/>
|
||||
<result property="vehicleNo" column="vehicle_no"/>
|
||||
<result property="shippingAddress" column="shipping_address"/>
|
||||
<result property="receivingAddress" column="receiving_address"/>
|
||||
@ -45,4 +47,3 @@
|
||||
<result property="version" column="version"/>
|
||||
</resultMap>
|
||||
</mapper>
|
||||
|
||||
|
||||
@ -13,6 +13,8 @@
|
||||
<result property="wechatQr" column="wechat_qr"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="status" column="status"/>
|
||||
<result property="createdBy" column="created_by"/>
|
||||
<result property="createdByName" column="created_by_name"/>
|
||||
<result property="createdAt" column="created_at"/>
|
||||
<result property="createdAt" column="created_at"/>
|
||||
<result property="updatedAt" column="updated_at"/>
|
||||
|
||||
@ -39,5 +39,9 @@ public interface PurchaseOrderServiceI {
|
||||
void rejectFinal(PurchaseOrderRejectFinalCmd purchaseOrderRejectFinalCmd);
|
||||
|
||||
Long countPurchaseOrderByState(PurchaseOrderCountQry purchaseOrderCountQry);
|
||||
}
|
||||
|
||||
// 分步提交方法
|
||||
PurchaseOrderVO saveStep1(PurchaseOrderStep1Cmd purchaseOrderStep1Cmd);
|
||||
void saveStep2(PurchaseOrderStep2Cmd purchaseOrderStep2Cmd);
|
||||
void saveStep3(PurchaseOrderStep3Cmd purchaseOrderStep3Cmd);
|
||||
}
|
||||
@ -18,6 +18,11 @@ import java.util.List;
|
||||
@Schema(title = "采购订单创建")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PurchaseOrderCreateCmd extends Command {
|
||||
/**
|
||||
* 订单ID(更新时使用)
|
||||
*/
|
||||
@Schema(title = "采购订单ID", type = "string")
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 步骤标识
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
package com.xunhong.erp.turbo.api.biz.dto.cmd;
|
||||
|
||||
import com.xunhong.erp.turbo.api.biz.dto.common.OrderDealer;
|
||||
import com.xunhong.erp.turbo.api.biz.dto.common.OrderVehicle;
|
||||
import com.xunhong.erp.turbo.base.dto.Command;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @author shenyifei
|
||||
*/
|
||||
@Data
|
||||
@Schema(title = "采购订单第一步:车辆信息和经销商信息保存")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PurchaseOrderStep1Cmd extends Command {
|
||||
|
||||
/**
|
||||
* 订单ID(更新时使用)
|
||||
*/
|
||||
@Schema(title = "采购订单ID", type = "string")
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 步骤标识
|
||||
*/
|
||||
@Schema(title = "步骤标识")
|
||||
private Integer active;
|
||||
|
||||
/**
|
||||
* 车辆信息
|
||||
*/
|
||||
@Schema(title = "车辆信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private OrderVehicle orderVehicle;
|
||||
|
||||
/**
|
||||
* 经销商信息
|
||||
*/
|
||||
@Schema(title = "经销商信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private OrderDealer orderDealer;
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
package com.xunhong.erp.turbo.api.biz.dto.cmd;
|
||||
|
||||
import com.xunhong.erp.turbo.api.biz.dto.common.OrderSupplier;
|
||||
import com.xunhong.erp.turbo.base.dto.Command;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author shenyifei
|
||||
*/
|
||||
@Data
|
||||
@Schema(title = "采购订单第二步:供应商信息保存")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PurchaseOrderStep2Cmd extends Command {
|
||||
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
@Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 步骤标识
|
||||
*/
|
||||
@Schema(title = "步骤标识")
|
||||
private Integer active;
|
||||
|
||||
/**
|
||||
* 供应商信息
|
||||
*/
|
||||
@Schema(title = "供应商信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<OrderSupplier> orderSupplierList;
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
package com.xunhong.erp.turbo.api.biz.dto.cmd;
|
||||
|
||||
import com.xunhong.erp.turbo.api.biz.dto.common.OrderCost;
|
||||
import com.xunhong.erp.turbo.base.dto.Command;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author shenyifei
|
||||
*/
|
||||
@Data
|
||||
@Schema(title = "采购订单第三步:人工和辅料等费用信息保存")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class PurchaseOrderStep3Cmd extends Command {
|
||||
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
@Schema(title = "采购订单ID", requiredMode = Schema.RequiredMode.REQUIRED, type = "string")
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 步骤标识
|
||||
*/
|
||||
@Schema(title = "步骤标识")
|
||||
private Integer active;
|
||||
|
||||
/**
|
||||
* 费用信息
|
||||
*/
|
||||
@Schema(title = "采购订单费用信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<OrderCost> orderCostList;
|
||||
}
|
||||
@ -136,6 +136,18 @@ public class ShipOrderCreateCmd extends Command {
|
||||
@Schema(title = "瓜农姓名逗号隔开")
|
||||
private String farmerInfo;
|
||||
|
||||
/**
|
||||
* 公司ID
|
||||
*/
|
||||
@Schema(title = "公司ID", type = "string")
|
||||
private Long companyId;
|
||||
|
||||
/**
|
||||
* 公司名称
|
||||
*/
|
||||
@Schema(title = "公司名称")
|
||||
private String companyName;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ -155,4 +167,3 @@ public class ShipOrderCreateCmd extends Command {
|
||||
private String createdByName;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -38,6 +38,18 @@ public class ShipOrderUpdateCmd extends Command {
|
||||
@Schema(title = "发货地址")
|
||||
private String shippingAddress;
|
||||
|
||||
/**
|
||||
* 公司ID
|
||||
*/
|
||||
@Schema(title = "公司ID", type = "string")
|
||||
private Long companyId;
|
||||
|
||||
/**
|
||||
* 公司名称
|
||||
*/
|
||||
@Schema(title = "公司名称")
|
||||
private String companyName;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ -68,4 +80,3 @@ public class ShipOrderUpdateCmd extends Command {
|
||||
@Schema(title = "成本单据")
|
||||
private String costDocument;
|
||||
}
|
||||
|
||||
|
||||
@ -83,89 +83,26 @@ public class OrderDealer extends Command {
|
||||
private String documentTypes;
|
||||
|
||||
/**
|
||||
* 账户ID
|
||||
* 税费补贴
|
||||
*/
|
||||
@Schema(title = "账户ID", type = "string")
|
||||
private Long accountId;
|
||||
@Schema(title = "税费补贴")
|
||||
private BigDecimal taxSubsidy;
|
||||
|
||||
/**
|
||||
* 公司名称
|
||||
* 计提税金
|
||||
*/
|
||||
@Schema(title = "公司名称")
|
||||
private String companyName;
|
||||
@Schema(title = "计提税金")
|
||||
private BigDecimal taxProvision;
|
||||
|
||||
/**
|
||||
* 税号
|
||||
* 成本差异
|
||||
*/
|
||||
@Schema(title = "税号")
|
||||
private String taxNumber;
|
||||
@Schema(title = "成本差异")
|
||||
private BigDecimal costDifference;
|
||||
|
||||
/**
|
||||
* 银行账号
|
||||
* 利润分成
|
||||
*/
|
||||
@Schema(title = "银行账号")
|
||||
private String bankAccount;
|
||||
|
||||
/**
|
||||
* 单位地址
|
||||
*/
|
||||
@Schema(title = "单位地址")
|
||||
private String companyAddress;
|
||||
|
||||
/**
|
||||
* 电话
|
||||
*/
|
||||
@Schema(title = "电话")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 开户行
|
||||
*/
|
||||
@Schema(title = "开户行")
|
||||
private String openingBank;
|
||||
|
||||
/**
|
||||
* 仓库ID
|
||||
*/
|
||||
@Schema(title = "仓库ID", type = "string")
|
||||
private Long warehouseId;
|
||||
|
||||
|
||||
/**
|
||||
* 仓库名称
|
||||
*/
|
||||
@Schema(title = "仓库名称")
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 仓库地址
|
||||
*/
|
||||
@Schema(title = "仓库地址")
|
||||
private String warehouseAddress;
|
||||
|
||||
/**
|
||||
* 联系人
|
||||
*/
|
||||
@Schema(title = "联系人")
|
||||
private String contactPerson;
|
||||
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
@Schema(title = "联系电话")
|
||||
private String contactPhone;
|
||||
|
||||
/**
|
||||
* 收货人姓名
|
||||
*/
|
||||
@Schema(title = "收货人姓名")
|
||||
private String receiverName;
|
||||
|
||||
/**
|
||||
* 收货人电话
|
||||
*/
|
||||
@Schema(title = "收货人电话")
|
||||
private String receiverPhone;
|
||||
|
||||
@Schema(title = "利润分成")
|
||||
private BigDecimal profitSharing;
|
||||
}
|
||||
|
||||
|
||||
@ -40,6 +40,12 @@ public class OrderPackage extends Command {
|
||||
@Schema(title = "箱子品牌名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String boxBrandName;
|
||||
|
||||
/**
|
||||
* 箱子品牌图片
|
||||
*/
|
||||
@Schema(title = "箱子品牌图片")
|
||||
private String boxBrandImage;
|
||||
|
||||
/**
|
||||
* 箱子分类ID
|
||||
*/
|
||||
@ -89,4 +95,3 @@ public class OrderPackage extends Command {
|
||||
private OrderPackageBoxTypeEnum boxType;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -15,25 +15,25 @@ public class OrderRebate extends DTO {
|
||||
/**
|
||||
* 记录ID
|
||||
*/
|
||||
@Schema(title = "记录ID")
|
||||
@Schema(title = "记录ID", type = "string")
|
||||
private Long orderRebateId;
|
||||
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
@Schema(title = "订单ID")
|
||||
@Schema(title = "订单ID", type = "string")
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 客户ID
|
||||
*/
|
||||
@Schema(title = "客户ID")
|
||||
@Schema(title = "客户ID", type = "string")
|
||||
private Long customerId;
|
||||
|
||||
/**
|
||||
* 经销商ID
|
||||
*/
|
||||
@Schema(title = "经销商ID")
|
||||
@Schema(title = "经销商ID", type = "string")
|
||||
private Long dealerId;
|
||||
|
||||
/**
|
||||
|
||||
@ -70,6 +70,12 @@ public class ShipOrderPackage extends DTO {
|
||||
@Schema(title = "总重(斤)")
|
||||
private BigDecimal totalWeight;
|
||||
|
||||
/**
|
||||
* 箱子品牌图片
|
||||
*/
|
||||
@Schema(title = "箱子品牌图片")
|
||||
private String boxBrandImage;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@ -77,4 +83,3 @@ public class ShipOrderPackage extends DTO {
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -8,12 +8,13 @@ import lombok.RequiredArgsConstructor;
|
||||
@RequiredArgsConstructor
|
||||
public enum OrderPackageBoxTypeEnum {
|
||||
/**
|
||||
* 箱子类型:1_本次使用;2_额外运输;3_已使用额外运输;4_车上剩余;
|
||||
* 箱子类型:1_本次使用;2_额外运输;3_已使用额外运输;4_车上剩余;5_瓜农纸箱;
|
||||
*/
|
||||
USED(1, "本次使用"),
|
||||
EXTRA(2, "额外运输"),
|
||||
EXTRA_USED(3, "已使用额外运输"),
|
||||
REMAIN(4, "车上剩余");
|
||||
REMAIN(4, "车上剩余"),
|
||||
OWN(5, "瓜农纸箱");
|
||||
|
||||
@EnumValue
|
||||
private final int type;
|
||||
|
||||
@ -10,7 +10,7 @@ public enum OrderRebateCalcMethodEnum {
|
||||
/**
|
||||
* 返点计算方式:1_按净重计算;2_固定金额;
|
||||
*/
|
||||
BY_WEIGHT(1, "按净重计算"),
|
||||
NET_WEIGHT(1, "按净重计算"),
|
||||
FIXED_AMOUNT(2, "固定金额");
|
||||
|
||||
@EnumValue
|
||||
|
||||
@ -32,16 +32,7 @@ public class PurchaseOrderPageQry extends PageQuery {
|
||||
@Schema(title = "供应商名称", type = "string")
|
||||
private String supplierName;
|
||||
|
||||
@Schema(title = "经销商付款账户ID", type = "string")
|
||||
private Long dealerPaymentAccountId;
|
||||
|
||||
@Schema(title = "经销商ID", type = "string")
|
||||
private Long dealerId;
|
||||
|
||||
/**
|
||||
* 创建人ID
|
||||
*/
|
||||
@Schema(title = "创建人ID", type = "string")
|
||||
private Long createdBy;
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.xunhong.erp.turbo.api.biz.dto.qry;
|
||||
|
||||
import com.xunhong.erp.turbo.api.biz.dto.enums.ShipOrderStateEnum;
|
||||
import com.xunhong.erp.turbo.base.dto.PageQuery;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
@ -15,5 +16,22 @@ public class ShipOrderPageQry extends PageQuery {
|
||||
|
||||
@Schema(title = "发货单ID", type = "string")
|
||||
private Long shipOrderId;
|
||||
|
||||
@Schema(title = "车辆编号", type = "string")
|
||||
private String vehicleNo;
|
||||
|
||||
@Schema(title = "采购订单编号", type = "string")
|
||||
private String orderSn;
|
||||
/**
|
||||
* 发货单状态:1_待回款;2_部分回款;3_已回款;4_拒收完结;5_已完结;
|
||||
*/
|
||||
@Schema(title = "发货单状态:1_待回款;2_部分回款;3_已回款;4_拒收完结;5_已完结;")
|
||||
private ShipOrderStateEnum state;
|
||||
|
||||
@Schema(title = "供应商名称", type = "string")
|
||||
private String supplierName;
|
||||
|
||||
@Schema(title = "经销商ID", type = "string")
|
||||
private Long dealerId;
|
||||
}
|
||||
|
||||
|
||||
@ -65,6 +65,18 @@ public class ShipOrderVO extends DTO {
|
||||
@Schema(title = "仓库名称")
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 公司ID
|
||||
*/
|
||||
@Schema(title = "公司ID", type = "string")
|
||||
private Long companyId;
|
||||
|
||||
/**
|
||||
* 公司名称
|
||||
*/
|
||||
@Schema(title = "公司名称")
|
||||
private String companyName;
|
||||
|
||||
/**
|
||||
* 车次号
|
||||
*/
|
||||
@ -240,4 +252,3 @@ public class ShipOrderVO extends DTO {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -63,6 +63,18 @@ public class SupplierVO extends DTO {
|
||||
@Schema(title = "状态:1_启用;0_禁用;", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Boolean status;
|
||||
|
||||
/**
|
||||
* 创建人ID
|
||||
*/
|
||||
@Schema(title = "创建人ID", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Long createdBy;
|
||||
|
||||
/**
|
||||
* 创建人姓名
|
||||
*/
|
||||
@Schema(title = "创建人姓名")
|
||||
private String createdByName;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@ -25,4 +25,16 @@ public class PageQuery extends com.alibaba.cola.dto.PageQuery {
|
||||
*/
|
||||
@Schema(title = "状态:1_启用;0_禁用;")
|
||||
private Boolean status;
|
||||
|
||||
/**
|
||||
* 创建人ID
|
||||
*/
|
||||
@Schema(title = "创建人ID", type = "string", hidden = true)
|
||||
private Long createdBy;
|
||||
|
||||
/**
|
||||
* 创建人名称
|
||||
*/
|
||||
@Schema(title = "创建人名称", type = "string", hidden = true)
|
||||
private String createdByName;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user