zhouhui.jiang

订单、出库 ,发票

Showing 53 changed files with 2848 additions and 93 deletions
This diff is collapsed. Click to expand it.
package com.apple.erp.controller;
import com.apple.erp.dto.DeliveryAddReq;
import com.apple.erp.dto.DeliveryQueryReq;
import com.apple.erp.dto.DeliveryRes;
import com.apple.erp.dto.DeliveryUpdateReq;
import com.apple.erp.service.DeliveryMainService;
import com.apple.erp.dto.response.ApiRes;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* 出库管理Controller
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Tag(name = "出库管理", description = "出库管理相关接口")
@RestController
@RequestMapping("/api/delivery")
@Validated
public class DeliveryMainController {
@Autowired
private DeliveryMainService deliveryMainService;
@Operation(summary = "分页查询出库列表", description = "根据查询条件分页获取出库列表")
@GetMapping("/list")
@PreAuthorize("hasAuthority('delivery:list')")
public ApiRes<Page<DeliveryRes>> getDeliveryList(@Valid DeliveryQueryReq queryReq) {
Page<DeliveryRes> page = deliveryMainService.getDeliveryList(queryReq);
return ApiRes.success(page);
}
@Operation(summary = "获取出库详情", description = "根据出库单ID获取出库详细信息,包含出库明细")
@GetMapping("/{deliveryId}")
@PreAuthorize("hasAuthority('delivery:detail')")
public ApiRes<DeliveryRes> getDeliveryDetail(
@Parameter(description = "出库单ID", required = true) @PathVariable Long deliveryId) {
DeliveryRes deliveryRes = deliveryMainService.getDeliveryDetail(deliveryId);
if (deliveryRes != null) {
return ApiRes.success(deliveryRes);
}
return ApiRes.error("出库单不存在或已删除");
}
@Operation(summary = "新增出库", description = "新增一个出库单,包含出库主表和明细")
@PostMapping
@PreAuthorize("hasAuthority('delivery:add')")
public ApiRes<Void> addDelivery(@Valid @RequestBody DeliveryAddReq addReq) {
try {
boolean result = deliveryMainService.addDelivery(addReq);
if (result) {
return ApiRes.success("新增出库单成功", null);
} else {
return ApiRes.error("新增出库单失败");
}
} catch (Exception e) {
return ApiRes.error("新增出库单失败: " + e.getMessage());
}
}
@Operation(summary = "修改出库", description = "修改现有出库单信息,包含出库主表和明细")
@PostMapping("/update")
@PreAuthorize("hasAuthority('delivery:edit')")
public ApiRes<Void> updateDelivery(@Valid @RequestBody DeliveryUpdateReq updateReq) {
try {
boolean result = deliveryMainService.updateDelivery(updateReq);
if (result) {
return ApiRes.success("修改出库单成功", null);
} else {
return ApiRes.error("修改出库单失败");
}
} catch (Exception e) {
return ApiRes.error("修改出库单失败: " + e.getMessage());
}
}
@Operation(summary = "删除出库", description = "根据出库单ID逻辑删除出库单")
@DeleteMapping("/{deliveryId}")
@PreAuthorize("hasAuthority('delivery:delete')")
public ApiRes<Void> deleteDelivery(
@Parameter(description = "出库单ID", required = true) @PathVariable Long deliveryId) {
try {
boolean result = deliveryMainService.deleteDelivery(deliveryId);
if (result) {
return ApiRes.success("删除出库单成功", null);
} else {
return ApiRes.error("删除出库单失败");
}
} catch (Exception e) {
return ApiRes.error("删除出库单失败: " + e.getMessage());
}
}
@Operation(summary = "批量删除出库", description = "根据出库单ID列表批量逻辑删除出库单")
@PostMapping("/batchDelete")
@PreAuthorize("hasAuthority('delivery:delete')")
public ApiRes<Void> batchDeleteDeliveries(
@Parameter(description = "出库单ID列表", required = true) @RequestBody List<Long> deliveryIds) {
try {
if (deliveryIds == null || deliveryIds.isEmpty()) {
return ApiRes.error("出库单ID列表不能为空");
}
boolean result = deliveryMainService.batchDeleteDeliveries(deliveryIds);
if (result) {
return ApiRes.success("批量删除出库单成功", null);
} else {
return ApiRes.error("批量删除出库单失败");
}
} catch (Exception e) {
return ApiRes.error("批量删除出库单失败: " + e.getMessage());
}
}
@Operation(summary = "修改出库状态", description = "修改指定出库单的出库状态")
@PostMapping("/{deliveryId}/deliveryStatus")
@PreAuthorize("hasAuthority('delivery:edit')")
public ApiRes<Void> updateDeliveryStatus(
@Parameter(description = "出库单ID", required = true) @PathVariable Long deliveryId,
@Parameter(description = "出库状态", required = true) @RequestParam Integer deliveryStatus) {
try {
boolean result = deliveryMainService.updateDeliveryStatus(deliveryId, deliveryStatus);
if (result) {
return ApiRes.success("修改出库状态成功", null);
} else {
return ApiRes.error("修改出库状态失败");
}
} catch (Exception e) {
return ApiRes.error("修改出库状态失败: " + e.getMessage());
}
}
}
package com.apple.erp.controller;
import com.apple.erp.dto.InvoiceAddReq;
import com.apple.erp.dto.InvoiceQueryReq;
import com.apple.erp.dto.InvoiceRes;
import com.apple.erp.dto.InvoiceUpdateReq;
import com.apple.erp.service.InvoiceMainService;
import com.apple.erp.dto.response.ApiRes;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* 发票管理Controller
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Tag(name = "发票管理", description = "发票管理相关接口")
@RestController
@RequestMapping("/api/invoice")
@Validated
public class InvoiceMainController {
@Autowired
private InvoiceMainService invoiceMainService;
@Operation(summary = "分页查询发票列表", description = "根据查询条件分页获取发票列表")
@GetMapping("/list")
@PreAuthorize("hasAuthority('invoice:list')")
public ApiRes<Page<InvoiceRes>> getInvoiceList(@Valid InvoiceQueryReq queryReq) {
Page<InvoiceRes> page = invoiceMainService.getInvoiceList(queryReq);
return ApiRes.success(page);
}
@Operation(summary = "获取发票详情", description = "根据发票ID获取发票详细信息,包含发票明细")
@GetMapping("/{invoiceId}")
@PreAuthorize("hasAuthority('invoice:detail')")
public ApiRes<InvoiceRes> getInvoiceDetail(
@Parameter(description = "发票ID", required = true) @PathVariable Long invoiceId) {
InvoiceRes invoiceRes = invoiceMainService.getInvoiceDetail(invoiceId);
if (invoiceRes != null) {
return ApiRes.success(invoiceRes);
}
return ApiRes.error("发票不存在或已删除");
}
@Operation(summary = "新增发票", description = "新增一个发票,包含发票主表和明细")
@PostMapping
@PreAuthorize("hasAuthority('invoice:add')")
public ApiRes<Void> addInvoice(@Valid @RequestBody InvoiceAddReq addReq) {
try {
boolean result = invoiceMainService.addInvoice(addReq);
if (result) {
return ApiRes.success("新增发票成功", null);
} else {
return ApiRes.error("新增发票失败");
}
} catch (Exception e) {
return ApiRes.error("新增发票失败: " + e.getMessage());
}
}
@Operation(summary = "修改发票", description = "修改现有发票信息,包含发票主表和明细")
@PostMapping("/update")
@PreAuthorize("hasAuthority('invoice:edit')")
public ApiRes<Void> updateInvoice(@Valid @RequestBody InvoiceUpdateReq updateReq) {
try {
boolean result = invoiceMainService.updateInvoice(updateReq);
if (result) {
return ApiRes.success("修改发票成功", null);
} else {
return ApiRes.error("修改发票失败");
}
} catch (Exception e) {
return ApiRes.error("修改发票失败: " + e.getMessage());
}
}
@Operation(summary = "删除发票", description = "根据发票ID逻辑删除发票")
@DeleteMapping("/{invoiceId}")
@PreAuthorize("hasAuthority('invoice:delete')")
public ApiRes<Void> deleteInvoice(
@Parameter(description = "发票ID", required = true) @PathVariable Long invoiceId) {
try {
boolean result = invoiceMainService.deleteInvoice(invoiceId);
if (result) {
return ApiRes.success("删除发票成功", null);
} else {
return ApiRes.error("删除发票失败");
}
} catch (Exception e) {
return ApiRes.error("删除发票失败: " + e.getMessage());
}
}
@Operation(summary = "批量删除发票", description = "根据发票ID列表批量逻辑删除发票")
@PostMapping("/batchDelete")
@PreAuthorize("hasAuthority('invoice:delete')")
public ApiRes<Void> batchDeleteInvoices(
@Parameter(description = "发票ID列表", required = true) @RequestBody List<Long> invoiceIds) {
try {
if (invoiceIds == null || invoiceIds.isEmpty()) {
return ApiRes.error("发票ID列表不能为空");
}
boolean result = invoiceMainService.batchDeleteInvoices(invoiceIds);
if (result) {
return ApiRes.success("批量删除发票成功", null);
} else {
return ApiRes.error("批量删除发票失败");
}
} catch (Exception e) {
return ApiRes.error("批量删除发票失败: " + e.getMessage());
}
}
@Operation(summary = "修改发票状态", description = "修改指定发票的发票状态")
@PostMapping("/{invoiceId}/invoiceStatus")
@PreAuthorize("hasAuthority('invoice:edit')")
public ApiRes<Void> updateInvoiceStatus(
@Parameter(description = "发票ID", required = true) @PathVariable Long invoiceId,
@Parameter(description = "发票状态", required = true) @RequestParam Integer invoiceStatus) {
try {
boolean result = invoiceMainService.updateInvoiceStatus(invoiceId, invoiceStatus);
if (result) {
return ApiRes.success("修改发票状态成功", null);
} else {
return ApiRes.error("修改发票状态失败");
}
} catch (Exception e) {
return ApiRes.error("修改发票状态失败: " + e.getMessage());
}
}
}
package com.apple.erp.controller;
import com.apple.erp.dto.OrderAddReq;
import com.apple.erp.dto.OrderQueryReq;
import com.apple.erp.dto.OrderRes;
import com.apple.erp.dto.OrderUpdateReq;
import com.apple.erp.service.OrderMainService;
import com.apple.erp.dto.response.ApiRes;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* 订单管理Controller
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Tag(name = "订单管理", description = "订单管理相关接口")
@RestController
@RequestMapping("/order")
@Validated
public class OrderMainController {
@Autowired
private OrderMainService orderMainService;
@Operation(summary = "分页查询订单列表", description = "根据条件分页查询订单列表")
@GetMapping("/list")
@PreAuthorize("hasAuthority('order:list')")
public ApiRes<Page<OrderRes>> getOrderList(@Valid OrderQueryReq queryReq) {
try {
Page<OrderRes> result = orderMainService.getOrderList(queryReq);
return ApiRes.success(result);
} catch (Exception e) {
return ApiRes.error("查询订单列表失败: " + e.getMessage());
}
}
@Operation(summary = "获取订单详情", description = "根据订单ID获取订单详情")
@GetMapping("/{orderId}")
@PreAuthorize("hasAuthority('order:detail')")
public ApiRes<OrderRes> getOrderDetail(
@Parameter(description = "订单ID", required = true) @PathVariable Long orderId) {
try {
OrderRes result = orderMainService.getOrderDetail(orderId);
if (result == null) {
return ApiRes.error("订单不存在");
}
return ApiRes.success(result);
} catch (Exception e) {
return ApiRes.error("获取订单详情失败: " + e.getMessage());
}
}
@Operation(summary = "新增订单", description = "新增订单信息")
@PostMapping
@PreAuthorize("hasAuthority('order:add')")
public ApiRes<Void> addOrder(@Valid @RequestBody OrderAddReq addReq) {
try {
boolean result = orderMainService.addOrder(addReq);
if (result) {
return ApiRes.success("新增订单成功", null);
} else {
return ApiRes.error("新增订单失败");
}
} catch (Exception e) {
return ApiRes.error("新增订单失败: " + e.getMessage());
}
}
@Operation(summary = "修改订单", description = "修改订单信息")
@PostMapping("/update")
@PreAuthorize("hasAuthority('order:edit')")
public ApiRes<Void> updateOrder(@Valid @RequestBody OrderUpdateReq updateReq) {
try {
boolean result = orderMainService.updateOrder(updateReq);
if (result) {
return ApiRes.success("修改订单成功", null);
} else {
return ApiRes.error("修改订单失败");
}
} catch (Exception e) {
return ApiRes.error("修改订单失败: " + e.getMessage());
}
}
@Operation(summary = "删除订单", description = "根据订单ID删除订单")
@DeleteMapping("/{orderId}")
@PreAuthorize("hasAuthority('order:delete')")
public ApiRes<Void> deleteOrder(
@Parameter(description = "订单ID", required = true) @PathVariable Long orderId) {
try {
boolean result = orderMainService.deleteOrder(orderId);
if (result) {
return ApiRes.success("删除订单成功", null);
} else {
return ApiRes.error("删除订单失败");
}
} catch (Exception e) {
return ApiRes.error("删除订单失败: " + e.getMessage());
}
}
@Operation(summary = "批量删除订单", description = "批量删除订单")
@PostMapping("/batchDelete")
@PreAuthorize("hasAuthority('order:delete')")
public ApiRes<Void> batchDeleteOrders(@RequestBody List<Long> orderIds) {
try {
if (orderIds == null || orderIds.isEmpty()) {
return ApiRes.error("订单ID列表不能为空");
}
boolean result = orderMainService.batchDeleteOrders(orderIds);
if (result) {
return ApiRes.success("批量删除订单成功", null);
} else {
return ApiRes.error("批量删除订单失败");
}
} catch (Exception e) {
return ApiRes.error("批量删除订单失败: " + e.getMessage());
}
}
@Operation(summary = "修改订单出库状态", description = "修改订单出库状态")
@PostMapping("/{orderId}/deliveryStatus")
@PreAuthorize("hasAuthority('order:edit')")
public ApiRes<Void> updateDeliveryStatus(
@Parameter(description = "订单ID", required = true) @PathVariable Long orderId,
@Parameter(description = "出库状态", required = true) @RequestParam Integer deliveryStatus) {
try {
boolean result = orderMainService.updateDeliveryStatus(orderId, deliveryStatus);
if (result) {
return ApiRes.success("修改出库状态成功", null);
} else {
return ApiRes.error("修改出库状态失败");
}
} catch (Exception e) {
return ApiRes.error("修改出库状态失败: " + e.getMessage());
}
}
@Operation(summary = "修改订单开票状态", description = "修改订单开票状态")
@PostMapping("/{orderId}/invoiceStatus")
@PreAuthorize("hasAuthority('order:edit')")
public ApiRes<Void> updateInvoiceStatus(
@Parameter(description = "订单ID", required = true) @PathVariable Long orderId,
@Parameter(description = "开票状态", required = true) @RequestParam Integer invoiceStatus) {
try {
boolean result = orderMainService.updateInvoiceStatus(orderId, invoiceStatus);
if (result) {
return ApiRes.success("修改开票状态成功", null);
} else {
return ApiRes.error("修改开票状态失败");
}
} catch (Exception e) {
return ApiRes.error("修改开票状态失败: " + e.getMessage());
}
}
@Operation(summary = "修改订单返利计算状态", description = "修改订单返利计算状态")
@PostMapping("/{orderId}/rebateCalcFlag")
@PreAuthorize("hasAuthority('order:edit')")
public ApiRes<Void> updateRebateCalcFlag(
@Parameter(description = "订单ID", required = true) @PathVariable Long orderId,
@Parameter(description = "返利计算状态", required = true) @RequestParam Integer rebateCalcFlag) {
try {
boolean result = orderMainService.updateRebateCalcFlag(orderId, rebateCalcFlag);
if (result) {
return ApiRes.success("修改返利计算状态成功", null);
} else {
return ApiRes.error("修改返利计算状态失败");
}
} catch (Exception e) {
return ApiRes.error("修改返利计算状态失败: " + e.getMessage());
}
}
}
package com.apple.erp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.List;
/**
* 出库新增请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "出库新增请求DTO")
public class DeliveryAddReq {
@NotBlank(message = "出库单编号不能为空")
@Schema(description = "出库单编号", required = true)
private String deliveryNo;
@NotBlank(message = "经销商编码不能为空")
@Schema(description = "经销商编码", required = true)
private String dealerCode;
@NotBlank(message = "经销商名称不能为空")
@Schema(description = "经销商名称", required = true)
private String dealerName;
@NotBlank(message = "关联订单编号不能为空")
@Schema(description = "关联订单编号", required = true)
private String orderNo;
@NotNull(message = "出库日期不能为空")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "出库日期", required = true)
private LocalDateTime deliveryDate;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus;
@Schema(description = "出库仓库编码")
private String warehouseCode;
@Schema(description = "数据来源")
private String dataSource;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "数据上传时间")
private LocalDateTime uploadTime;
@Valid
@Size(min = 1, message = "出库明细不能为空")
@Schema(description = "出库明细列表", required = true)
private List<DeliveryItemAddReq> deliveryItems;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 出库明细新增请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "出库明细新增请求DTO")
public class DeliveryItemAddReq {
@NotBlank(message = "产品编码不能为空")
@Schema(description = "产品编码", required = true)
private String productCode;
@NotBlank(message = "产品名称不能为空")
@Schema(description = "产品名称", required = true)
private String productName;
@NotNull(message = "出库数量不能为空")
@Schema(description = "出库数量", required = true)
private Integer deliveryQty;
@NotNull(message = "出库单价不能为空")
@Schema(description = "出库单价", required = true)
private BigDecimal deliveryPrice;
@Schema(description = "出库金额")
private BigDecimal deliveryAmount;
}
package com.apple.erp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 出库明细响应DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "出库明细响应DTO")
public class DeliveryItemRes {
@Schema(description = "出库明细ID")
private Long deliveryItemId;
@Schema(description = "关联出库单ID")
private Long deliveryId;
@Schema(description = "出库单编号")
private String deliveryNo;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "产品编码")
private String productCode;
@Schema(description = "产品名称")
private String productName;
@Schema(description = "出库数量")
private Integer deliveryQty;
@Schema(description = "出库单价")
private BigDecimal deliveryPrice;
@Schema(description = "出库金额")
private BigDecimal deliveryAmount;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 出库明细修改请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "出库明细修改请求DTO")
public class DeliveryItemUpdateReq {
@Schema(description = "出库明细ID")
private Long deliveryItemId; // 修改时可能需要,新增时不需要
@NotBlank(message = "产品编码不能为空")
@Schema(description = "产品编码", required = true)
private String productCode;
@NotBlank(message = "产品名称不能为空")
@Schema(description = "产品名称", required = true)
private String productName;
@NotNull(message = "出库数量不能为空")
@Schema(description = "出库数量", required = true)
private Integer deliveryQty;
@NotNull(message = "出库单价不能为空")
@Schema(description = "出库单价", required = true)
private BigDecimal deliveryPrice;
@Schema(description = "出库金额")
private BigDecimal deliveryAmount;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 出库查询请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "出库查询请求DTO")
public class DeliveryQueryReq {
@Schema(description = "出库单编号")
private String deliveryNo;
@Schema(description = "经销商编码")
private String dealerCode;
@Schema(description = "经销商名称")
private String dealerName;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus;
@Schema(description = "出库仓库编码")
private String warehouseCode;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "出库开始日期")
private String deliveryStartDate;
@Schema(description = "出库结束日期")
private String deliveryEndDate;
@Schema(description = "页码")
private Integer pageNum = 1;
@Schema(description = "每页大小")
private Integer pageSize = 10;
}
package com.apple.erp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* 出库响应DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "出库响应DTO")
public class DeliveryRes {
@Schema(description = "出库单ID")
private Long deliveryId;
@Schema(description = "出库单编号")
private String deliveryNo;
@Schema(description = "经销商编码")
private String dealerCode;
@Schema(description = "经销商名称")
private String dealerName;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "出库日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime deliveryDate;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus;
@Schema(description = "出库仓库编码")
private String warehouseCode;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "数据上传时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime uploadTime;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
@Schema(description = "出库明细列表")
private List<DeliveryItemRes> deliveryItems;
}
package com.apple.erp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.List;
/**
* 出库修改请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "出库修改请求DTO")
public class DeliveryUpdateReq {
@NotNull(message = "出库单ID不能为空")
@Schema(description = "出库单ID", required = true)
private Long deliveryId;
@NotBlank(message = "出库单编号不能为空")
@Schema(description = "出库单编号", required = true)
private String deliveryNo;
@NotBlank(message = "经销商编码不能为空")
@Schema(description = "经销商编码", required = true)
private String dealerCode;
@NotBlank(message = "经销商名称不能为空")
@Schema(description = "经销商名称", required = true)
private String dealerName;
@NotBlank(message = "关联订单编号不能为空")
@Schema(description = "关联订单编号", required = true)
private String orderNo;
@NotNull(message = "出库日期不能为空")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "出库日期", required = true)
private LocalDateTime deliveryDate;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus;
@Schema(description = "出库仓库编码")
private String warehouseCode;
@Schema(description = "数据来源")
private String dataSource;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "数据上传时间")
private LocalDateTime uploadTime;
@Valid
@Size(min = 1, message = "出库明细不能为空")
@Schema(description = "出库明细列表", required = true)
private List<DeliveryItemUpdateReq> deliveryItems;
}
package com.apple.erp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* 发票新增请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "发票新增请求DTO")
public class InvoiceAddReq {
@NotBlank(message = "发票编号不能为空")
@Schema(description = "发票编号", required = true)
private String invoiceNo;
@NotBlank(message = "关联订单编号不能为空")
@Schema(description = "关联订单编号", required = true)
private String orderNo;
@Schema(description = "关联出库单编号")
private String deliveryNo;
@NotBlank(message = "经销商编码不能为空")
@Schema(description = "经销商编码", required = true)
private String dealerCode;
@NotBlank(message = "经销商名称不能为空")
@Schema(description = "经销商名称", required = true)
private String dealerName;
@NotNull(message = "发票总金额不能为空")
@Schema(description = "发票总金额(含税)", required = true)
private BigDecimal totalAmount;
@NotNull(message = "开票日期不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
@Schema(description = "开票日期", required = true)
private LocalDate invoiceDate;
@Schema(description = "发票状态(0-未开票/1-已开票)")
private Integer invoiceStatus;
@Schema(description = "税率")
private BigDecimal taxRate;
@Schema(description = "数据来源")
private String dataSource;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "数据上传时间")
private LocalDateTime uploadTime;
@Valid
@Size(min = 1, message = "发票明细不能为空")
@Schema(description = "发票明细列表", required = true)
private List<InvoiceItemAddReq> invoiceItems;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 发票明细新增请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "发票明细新增请求DTO")
public class InvoiceItemAddReq {
@NotBlank(message = "产品编码不能为空")
@Schema(description = "产品编码", required = true)
private String productCode;
@NotBlank(message = "产品名称不能为空")
@Schema(description = "产品名称", required = true)
private String productName;
@NotNull(message = "开票数量不能为空")
@Schema(description = "开票数量", required = true)
private Integer invoiceQty;
@NotNull(message = "不含税单价不能为空")
@Schema(description = "不含税单价", required = true)
private BigDecimal unitPriceNoTax;
@NotNull(message = "不含税明细金额不能为空")
@Schema(description = "不含税明细金额", required = true)
private BigDecimal amountNoTax;
@NotNull(message = "税额不能为空")
@Schema(description = "税额", required = true)
private BigDecimal taxAmount;
}
package com.apple.erp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 发票明细响应DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "发票明细响应DTO")
public class InvoiceItemRes {
@Schema(description = "发票明细ID")
private Long invoiceItemId;
@Schema(description = "关联发票ID")
private Long invoiceId;
@Schema(description = "发票编号")
private String invoiceNo;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "产品编码")
private String productCode;
@Schema(description = "产品名称")
private String productName;
@Schema(description = "开票数量")
private Integer invoiceQty;
@Schema(description = "不含税单价")
private BigDecimal unitPriceNoTax;
@Schema(description = "不含税明细金额")
private BigDecimal amountNoTax;
@Schema(description = "税额")
private BigDecimal taxAmount;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 发票明细修改请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "发票明细修改请求DTO")
public class InvoiceItemUpdateReq {
@Schema(description = "发票明细ID")
private Long invoiceItemId; // 修改时可能需要,新增时不需要
@NotBlank(message = "产品编码不能为空")
@Schema(description = "产品编码", required = true)
private String productCode;
@NotBlank(message = "产品名称不能为空")
@Schema(description = "产品名称", required = true)
private String productName;
@NotNull(message = "开票数量不能为空")
@Schema(description = "开票数量", required = true)
private Integer invoiceQty;
@NotNull(message = "不含税单价不能为空")
@Schema(description = "不含税单价", required = true)
private BigDecimal unitPriceNoTax;
@NotNull(message = "不含税明细金额不能为空")
@Schema(description = "不含税明细金额", required = true)
private BigDecimal amountNoTax;
@NotNull(message = "税额不能为空")
@Schema(description = "税额", required = true)
private BigDecimal taxAmount;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
/**
* 发票查询请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "发票查询请求DTO")
public class InvoiceQueryReq {
@Schema(description = "发票编号")
private String invoiceNo;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "关联出库单编号")
private String deliveryNo;
@Schema(description = "经销商编码")
private String dealerCode;
@Schema(description = "经销商名称")
private String dealerName;
@Schema(description = "发票状态(0-未开票/1-已开票)")
private Integer invoiceStatus;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "开票开始日期")
private String invoiceStartDate;
@Schema(description = "开票结束日期")
private String invoiceEndDate;
@Schema(description = "金额最小值")
private BigDecimal minAmount;
@Schema(description = "金额最大值")
private BigDecimal maxAmount;
@Schema(description = "页码")
private Integer pageNum = 1;
@Schema(description = "每页大小")
private Integer pageSize = 10;
}
package com.apple.erp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* 发票响应DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "发票响应DTO")
public class InvoiceRes {
@Schema(description = "发票ID")
private Long invoiceId;
@Schema(description = "发票编号")
private String invoiceNo;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "关联出库单编号")
private String deliveryNo;
@Schema(description = "经销商编码")
private String dealerCode;
@Schema(description = "经销商名称")
private String dealerName;
@Schema(description = "发票总金额(含税)")
private BigDecimal totalAmount;
@Schema(description = "开票日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate invoiceDate;
@Schema(description = "发票状态(0-未开票/1-已开票)")
private Integer invoiceStatus;
@Schema(description = "税率")
private BigDecimal taxRate;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "数据上传时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime uploadTime;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
@Schema(description = "发票明细列表")
private List<InvoiceItemRes> invoiceItems;
}
package com.apple.erp.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* 发票修改请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "发票修改请求DTO")
public class InvoiceUpdateReq {
@NotNull(message = "发票ID不能为空")
@Schema(description = "发票ID", required = true)
private Long invoiceId;
@NotBlank(message = "发票编号不能为空")
@Schema(description = "发票编号", required = true)
private String invoiceNo;
@NotBlank(message = "关联订单编号不能为空")
@Schema(description = "关联订单编号", required = true)
private String orderNo;
@Schema(description = "关联出库单编号")
private String deliveryNo;
@NotBlank(message = "经销商编码不能为空")
@Schema(description = "经销商编码", required = true)
private String dealerCode;
@NotBlank(message = "经销商名称不能为空")
@Schema(description = "经销商名称", required = true)
private String dealerName;
@NotNull(message = "发票总金额不能为空")
@Schema(description = "发票总金额(含税)", required = true)
private BigDecimal totalAmount;
@NotNull(message = "开票日期不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
@Schema(description = "开票日期", required = true)
private LocalDate invoiceDate;
@Schema(description = "发票状态(0-未开票/1-已开票)")
private Integer invoiceStatus;
@Schema(description = "税率")
private BigDecimal taxRate;
@Schema(description = "数据来源")
private String dataSource;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "数据上传时间")
private LocalDateTime uploadTime;
@Valid
@Size(min = 1, message = "发票明细不能为空")
@Schema(description = "发票明细列表", required = true)
private List<InvoiceItemUpdateReq> invoiceItems;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单新增请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "订单新增请求DTO")
public class OrderAddReq {
@NotBlank(message = "订单编号不能为空")
@Schema(description = "订单编号", required = true)
private String orderNo;
@NotBlank(message = "经销商编码不能为空")
@Schema(description = "经销商编码", required = true)
private String dealerCode;
@NotBlank(message = "经销商名称不能为空")
@Schema(description = "经销商名称", required = true)
private String dealerName;
@NotNull(message = "订单日期不能为空")
@Schema(description = "订单创建日期", required = true)
private LocalDateTime orderDate;
@NotNull(message = "订单总金额不能为空")
@Schema(description = "订单总金额", required = true)
private BigDecimal totalAmount;
@Schema(description = "订单返利金额")
private BigDecimal rebateAmount;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus = 0;
@Schema(description = "开票状态(0-未开票/1-已开票)")
private Integer invoiceStatus = 0;
@Schema(description = "返利计算状态(0-未计算/1-已计算)")
private Integer rebateCalcFlag = 0;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "数据验证状态(0-待验证/1-验证通过/2-验证失败)")
private Integer verifyStatus = 0;
@Schema(description = "数据上传时间")
private LocalDateTime uploadTime;
@NotEmpty(message = "订单明细不能为空")
@Valid
@Schema(description = "订单明细列表", required = true)
private List<OrderItemAddReq> orderItems;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import java.math.BigDecimal;
/**
* 订单明细新增请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "订单明细新增请求DTO")
public class OrderItemAddReq {
@NotBlank(message = "产品编码不能为空")
@Schema(description = "产品编码", required = true)
private String productCode;
@NotBlank(message = "产品名称不能为空")
@Schema(description = "产品名称", required = true)
private String productName;
@NotNull(message = "产品单价不能为空")
@Schema(description = "产品单价", required = true)
private BigDecimal unitPrice;
@NotNull(message = "商品数量不能为空")
@Positive(message = "商品数量必须大于0")
@Schema(description = "商品数量", required = true)
private Integer productQty;
@Schema(description = "商品明细金额")
private BigDecimal itemAmount;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 订单明细响应DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "订单明细响应DTO")
public class OrderItemRes {
@Schema(description = "明细ID")
private Long itemId;
@Schema(description = "订单ID")
private Long orderId;
@Schema(description = "订单编号")
private String orderNo;
@Schema(description = "产品编码")
private String productCode;
@Schema(description = "产品名称")
private String productName;
@Schema(description = "产品单价")
private BigDecimal unitPrice;
@Schema(description = "商品数量")
private Integer productQty;
@Schema(description = "商品明细金额")
private BigDecimal itemAmount;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import java.math.BigDecimal;
/**
* 订单明细修改请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "订单明细修改请求DTO")
public class OrderItemUpdateReq {
@Schema(description = "明细ID(新增时为空,修改时必填)")
private Long itemId;
@NotBlank(message = "产品编码不能为空")
@Schema(description = "产品编码", required = true)
private String productCode;
@NotBlank(message = "产品名称不能为空")
@Schema(description = "产品名称", required = true)
private String productName;
@NotNull(message = "产品单价不能为空")
@Schema(description = "产品单价", required = true)
private BigDecimal unitPrice;
@NotNull(message = "商品数量不能为空")
@Positive(message = "商品数量必须大于0")
@Schema(description = "商品数量", required = true)
private Integer productQty;
@Schema(description = "商品明细金额")
private BigDecimal itemAmount;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 订单查询请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "订单查询请求DTO")
public class OrderQueryReq {
@Schema(description = "订单编号")
private String orderNo;
@Schema(description = "经销商编码")
private String dealerCode;
@Schema(description = "经销商名称")
private String dealerName;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus;
@Schema(description = "开票状态(0-未开票/1-已开票)")
private Integer invoiceStatus;
@Schema(description = "返利计算状态(0-未计算/1-已计算)")
private Integer rebateCalcFlag;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "数据验证状态(0-待验证/1-验证通过/2-验证失败)")
private Integer verifyStatus;
@Schema(description = "订单开始日期")
private LocalDateTime orderStartDate;
@Schema(description = "订单结束日期")
private LocalDateTime orderEndDate;
@Schema(description = "金额最小值")
private java.math.BigDecimal minAmount;
@Schema(description = "金额最大值")
private java.math.BigDecimal maxAmount;
@Schema(description = "页码")
private Integer pageNum = 1;
@Schema(description = "每页大小")
private Integer pageSize = 10;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单响应DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "订单响应DTO")
public class OrderRes {
@Schema(description = "订单ID")
private Long orderId;
@Schema(description = "订单编号")
private String orderNo;
@Schema(description = "经销商编码")
private String dealerCode;
@Schema(description = "经销商名称")
private String dealerName;
@Schema(description = "订单创建日期")
private LocalDateTime orderDate;
@Schema(description = "订单总金额")
private BigDecimal totalAmount;
@Schema(description = "订单返利金额")
private BigDecimal rebateAmount;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus;
@Schema(description = "开票状态(0-未开票/1-已开票)")
private Integer invoiceStatus;
@Schema(description = "返利计算状态(0-未计算/1-已计算)")
private Integer rebateCalcFlag;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "数据验证状态(0-待验证/1-验证通过/2-验证失败)")
private Integer verifyStatus;
@Schema(description = "数据上传时间")
private LocalDateTime uploadTime;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
@Schema(description = "订单明细列表")
private List<OrderItemRes> orderItems;
}
package com.apple.erp.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 订单修改请求DTO
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@Schema(description = "订单修改请求DTO")
public class OrderUpdateReq {
@NotNull(message = "订单ID不能为空")
@Schema(description = "订单ID", required = true)
private Long orderId;
@NotBlank(message = "订单编号不能为空")
@Schema(description = "订单编号", required = true)
private String orderNo;
@NotBlank(message = "经销商编码不能为空")
@Schema(description = "经销商编码", required = true)
private String dealerCode;
@NotBlank(message = "经销商名称不能为空")
@Schema(description = "经销商名称", required = true)
private String dealerName;
@NotNull(message = "订单日期不能为空")
@Schema(description = "订单创建日期", required = true)
private LocalDateTime orderDate;
@NotNull(message = "订单总金额不能为空")
@Schema(description = "订单总金额", required = true)
private BigDecimal totalAmount;
@Schema(description = "订单返利金额")
private BigDecimal rebateAmount;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus;
@Schema(description = "开票状态(0-未开票/1-已开票)")
private Integer invoiceStatus;
@Schema(description = "返利计算状态(0-未计算/1-已计算)")
private Integer rebateCalcFlag;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "数据验证状态(0-待验证/1-验证通过/2-验证失败)")
private Integer verifyStatus;
@Schema(description = "数据上传时间")
private LocalDateTime uploadTime;
@NotEmpty(message = "订单明细不能为空")
@Valid
@Schema(description = "订单明细列表", required = true)
private List<OrderItemUpdateReq> orderItems;
}
package com.apple.erp.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 出库商品明细表实体类
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_delivery_item")
@Schema(description = "出库商品明细表")
public class DeliveryItem {
@TableId(value = "delivery_item_id", type = IdType.AUTO)
@Schema(description = "出库商品明细ID")
private Long deliveryItemId;
@Schema(description = "关联出库单ID")
private Long deliveryId;
@Schema(description = "出库单编号")
private String deliveryNo;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "产品编码")
private String productCode;
@Schema(description = "产品名称")
private String productName;
@Schema(description = "出库数量")
private Integer deliveryQty;
@Schema(description = "出库单价")
private BigDecimal deliveryPrice;
@Schema(description = "出库金额")
private BigDecimal deliveryAmount;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
@Schema(description = "删除标志(0代表存在 2代表删除)")
private String delFlag;
}
package com.apple.erp.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 出库主表实体类
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_delivery_main")
@Schema(description = "出库主表")
public class DeliveryMain {
@TableId(value = "delivery_id", type = IdType.AUTO)
@Schema(description = "出库单ID")
private Long deliveryId;
@Schema(description = "出库单编号")
private String deliveryNo;
@Schema(description = "经销商编码")
private String dealerCode;
@Schema(description = "经销商名称")
private String dealerName;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "出库日期")
private LocalDateTime deliveryDate;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus;
@Schema(description = "出库总金额")
private BigDecimal totalAmount;
@Schema(description = "仓库编码")
private String warehouseCode;
@Schema(description = "仓库名称")
private String warehouseName;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "上传时间")
private LocalDateTime uploadTime;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
@Schema(description = "删除标志(0代表存在 2代表删除)")
private String delFlag;
}
package com.apple.erp.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 发票商品明细表实体类
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_invoice_item")
@Schema(description = "发票商品明细表")
public class InvoiceItem {
@TableId(value = "invoice_item_id", type = IdType.AUTO)
@Schema(description = "发票商品明细ID")
private Long invoiceItemId;
@Schema(description = "关联发票ID")
private Long invoiceId;
@Schema(description = "发票编号")
private String invoiceNo;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "产品编码")
private String productCode;
@Schema(description = "产品名称")
private String productName;
@Schema(description = "开票数量")
private Integer invoiceQty;
@Schema(description = "不含税单价")
private BigDecimal unitPriceNoTax;
@Schema(description = "不含税明细金额")
private BigDecimal amountNoTax;
@Schema(description = "税额")
private BigDecimal taxAmount;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
@Schema(description = "删除标志(0代表存在 2代表删除)")
private String delFlag;
}
package com.apple.erp.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 发票主表实体类
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_invoice_main")
@Schema(description = "发票主表")
public class InvoiceMain {
@TableId(value = "invoice_id", type = IdType.AUTO)
@Schema(description = "发票ID")
private Long invoiceId;
@Schema(description = "发票编号")
private String invoiceNo;
@Schema(description = "关联订单编号")
private String orderNo;
@Schema(description = "关联出库单编号")
private String deliveryNo;
@Schema(description = "经销商编码")
private String dealerCode;
@Schema(description = "经销商名称")
private String dealerName;
@Schema(description = "发票总金额(含税)")
private BigDecimal totalAmount;
@Schema(description = "开票日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate invoiceDate;
@Schema(description = "发票状态(0-未开票/1-已开票)")
private Integer invoiceStatus;
@Schema(description = "税率")
private BigDecimal taxRate;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "数据上传时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime uploadTime;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
@Schema(description = "删除标志(0代表存在 2代表删除)")
private String delFlag;
}
package com.apple.erp.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 订单商品明细表实体类
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_order_item")
@Schema(description = "订单商品明细表")
public class OrderItem {
@TableId(value = "item_id", type = IdType.AUTO)
@Schema(description = "明细ID")
private Long itemId;
@Schema(description = "订单ID")
private Long orderId;
@Schema(description = "订单编号")
private String orderNo;
@Schema(description = "产品编码")
private String productCode;
@Schema(description = "产品名称")
private String productName;
@Schema(description = "产品单价")
private BigDecimal unitPrice;
@Schema(description = "商品数量")
private Integer productQty;
@Schema(description = "商品明细金额")
private BigDecimal itemAmount;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
@Schema(description = "删除标志(0代表存在 2代表删除)")
private String delFlag;
}
package com.apple.erp.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 订单主表实体类
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_order_main")
@Schema(description = "订单主表")
public class OrderMain {
@TableId(value = "order_id", type = IdType.AUTO)
@Schema(description = "订单ID")
private Long orderId;
@Schema(description = "订单编号")
private String orderNo;
@Schema(description = "经销商编码")
private String dealerCode;
@Schema(description = "经销商名称")
private String dealerName;
@Schema(description = "订单创建日期")
private LocalDateTime orderDate;
@Schema(description = "订单总金额")
private BigDecimal totalAmount;
@Schema(description = "订单返利金额")
private BigDecimal rebateAmount;
@Schema(description = "出库状态(0-未出库/1-已出库)")
private Integer deliveryStatus;
@Schema(description = "开票状态(0-未开票/1-已开票)")
private Integer invoiceStatus;
@Schema(description = "返利计算状态(0-未计算/1-已计算)")
private Integer rebateCalcFlag;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "数据验证状态(0-待验证/1-验证通过/2-验证失败)")
private Integer verifyStatus;
@Schema(description = "数据上传时间")
private LocalDateTime uploadTime;
@Schema(description = "创建者")
private String createBy;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "更新者")
private String updateBy;
@Schema(description = "更新时间")
private LocalDateTime updateTime;
@Schema(description = "删除标志(0代表存在 2代表删除)")
private String delFlag;
}
package com.apple.erp.mapper;
import com.apple.erp.entity.DeliveryItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 出库明细表Mapper接口
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Mapper
public interface DeliveryItemMapper extends BaseMapper<DeliveryItem> {
}
package com.apple.erp.mapper;
import com.apple.erp.entity.DeliveryMain;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 出库主表Mapper接口
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Mapper
public interface DeliveryMainMapper extends BaseMapper<DeliveryMain> {
}
package com.apple.erp.mapper;
import com.apple.erp.entity.InvoiceItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 发票明细表Mapper接口
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Mapper
public interface InvoiceItemMapper extends BaseMapper<InvoiceItem> {
}
package com.apple.erp.mapper;
import com.apple.erp.entity.InvoiceMain;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 发票主表Mapper接口
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Mapper
public interface InvoiceMainMapper extends BaseMapper<InvoiceMain> {
}
package com.apple.erp.mapper;
import com.apple.erp.entity.OrderItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 订单明细表Mapper接口
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Mapper
public interface OrderItemMapper extends BaseMapper<OrderItem> {
}
package com.apple.erp.mapper;
import com.apple.erp.entity.OrderMain;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 订单主表Mapper接口
*
* @author Apple ERP System
* @since 2025-01-01
*/
@Mapper
public interface OrderMainMapper extends BaseMapper<OrderMain> {
}
package com.apple.erp.service;
import com.apple.erp.dto.DeliveryAddReq;
import com.apple.erp.dto.DeliveryQueryReq;
import com.apple.erp.dto.DeliveryRes;
import com.apple.erp.dto.DeliveryUpdateReq;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.apple.erp.entity.DeliveryMain;
import java.util.List;
/**
* 出库主表Service接口
*
* @author Apple ERP System
* @since 2025-01-01
*/
public interface DeliveryMainService extends IService<DeliveryMain> {
/**
* 分页查询出库列表
* @param queryReq 查询条件
* @return 出库列表(带分页信息)
*/
Page<DeliveryRes> getDeliveryList(DeliveryQueryReq queryReq);
/**
* 获取出库详情
* @param deliveryId 出库单ID
* @return 出库详情(包含明细)
*/
DeliveryRes getDeliveryDetail(Long deliveryId);
/**
* 新增出库
* @param addReq 出库新增请求
* @return 是否成功
*/
boolean addDelivery(DeliveryAddReq addReq);
/**
* 修改出库
* @param updateReq 出库修改请求
* @return 是否成功
*/
boolean updateDelivery(DeliveryUpdateReq updateReq);
/**
* 删除出库(逻辑删除)
* @param deliveryId 出库单ID
* @return 是否成功
*/
boolean deleteDelivery(Long deliveryId);
/**
* 批量删除出库(逻辑删除)
* @param deliveryIds 出库单ID列表
* @return 是否成功
*/
boolean batchDeleteDeliveries(List<Long> deliveryIds);
/**
* 修改出库状态
* @param deliveryId 出库单ID
* @param deliveryStatus 出库状态
* @return 是否成功
*/
boolean updateDeliveryStatus(Long deliveryId, Integer deliveryStatus);
}
package com.apple.erp.service;
import com.apple.erp.dto.InvoiceAddReq;
import com.apple.erp.dto.InvoiceQueryReq;
import com.apple.erp.dto.InvoiceRes;
import com.apple.erp.dto.InvoiceUpdateReq;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.apple.erp.entity.InvoiceMain;
import java.util.List;
/**
* 发票主表Service接口
*
* @author Apple ERP System
* @since 2025-01-01
*/
public interface InvoiceMainService extends IService<InvoiceMain> {
/**
* 分页查询发票列表
* @param queryReq 查询条件
* @return 发票列表(带分页信息)
*/
Page<InvoiceRes> getInvoiceList(InvoiceQueryReq queryReq);
/**
* 获取发票详情
* @param invoiceId 发票ID
* @return 发票详情(包含明细)
*/
InvoiceRes getInvoiceDetail(Long invoiceId);
/**
* 新增发票
* @param addReq 发票新增请求
* @return 是否成功
*/
boolean addInvoice(InvoiceAddReq addReq);
/**
* 修改发票
* @param updateReq 发票修改请求
* @return 是否成功
*/
boolean updateInvoice(InvoiceUpdateReq updateReq);
/**
* 删除发票(逻辑删除)
* @param invoiceId 发票ID
* @return 是否成功
*/
boolean deleteInvoice(Long invoiceId);
/**
* 批量删除发票(逻辑删除)
* @param invoiceIds 发票ID列表
* @return 是否成功
*/
boolean batchDeleteInvoices(List<Long> invoiceIds);
/**
* 修改发票状态
* @param invoiceId 发票ID
* @param invoiceStatus 发票状态
* @return 是否成功
*/
boolean updateInvoiceStatus(Long invoiceId, Integer invoiceStatus);
}
package com.apple.erp.service;
import com.apple.erp.dto.OrderAddReq;
import com.apple.erp.dto.OrderQueryReq;
import com.apple.erp.dto.OrderRes;
import com.apple.erp.dto.OrderUpdateReq;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.apple.erp.entity.OrderMain;
import java.util.List;
/**
* 订单主表Service接口
*
* @author Apple ERP System
* @since 2025-01-01
*/
public interface OrderMainService extends IService<OrderMain> {
/**
* 分页查询订单列表
*
* @param queryReq 查询条件
* @return 订单分页数据
*/
Page<OrderRes> getOrderList(OrderQueryReq queryReq);
/**
* 获取订单详情
*
* @param orderId 订单ID
* @return 订单详情
*/
OrderRes getOrderDetail(Long orderId);
/**
* 新增订单
*
* @param addReq 新增请求
* @return 是否成功
*/
boolean addOrder(OrderAddReq addReq);
/**
* 修改订单
*
* @param updateReq 修改请求
* @return 是否成功
*/
boolean updateOrder(OrderUpdateReq updateReq);
/**
* 删除订单
*
* @param orderId 订单ID
* @return 是否成功
*/
boolean deleteOrder(Long orderId);
/**
* 批量删除订单
*
* @param orderIds 订单ID列表
* @return 是否成功
*/
boolean batchDeleteOrders(List<Long> orderIds);
/**
* 修改订单出库状态
*
* @param orderId 订单ID
* @param deliveryStatus 出库状态
* @return 是否成功
*/
boolean updateDeliveryStatus(Long orderId, Integer deliveryStatus);
/**
* 修改订单开票状态
*
* @param orderId 订单ID
* @param invoiceStatus 开票状态
* @return 是否成功
*/
boolean updateInvoiceStatus(Long orderId, Integer invoiceStatus);
/**
* 修改订单返利计算状态
*
* @param orderId 订单ID
* @param rebateCalcFlag 返利计算状态
* @return 是否成功
*/
boolean updateRebateCalcFlag(Long orderId, Integer rebateCalcFlag);
}
-- Apple经销商ERP系统 - 订单管理、出库查询、发票管理按钮权限配置脚本
-- 创建时间: 2025-01-27
-- 版本: v1.0
-- 设置数据库和字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- 使用数据库
USE apple_erp;
-- =========================================
-- 1. 插入订单管理相关按钮权限
-- =========================================
-- 订单管理按钮权限 (parent_id = 2)
INSERT INTO t_sys_menu (menu_id, parent_id, menu_name, menu_type, path, icon, sort, status, perms, create_by, create_time, update_by, update_time, del_flag)
VALUES
(201, 2, '订单查询', '2', '', '', 1, '1', 'order:list', 'admin', NOW(), 'admin', NOW(), '0'),
(202, 2, '订单新增', '2', '', '', 2, '1', 'order:add', 'admin', NOW(), 'admin', NOW(), '0'),
(203, 2, '订单修改', '2', '', '', 3, '1', 'order:edit', 'admin', NOW(), 'admin', NOW(), '0'),
(204, 2, '订单删除', '2', '', '', 4, '1', 'order:delete', 'admin', NOW(), 'admin', NOW(), '0'),
(205, 2, '订单详情', '2', '', '', 5, '1', 'order:detail', 'admin', NOW(), 'admin', NOW(), '0'),
(206, 2, '订单导出', '2', '', '', 6, '1', 'order:export', 'admin', NOW(), 'admin', NOW(), '0'),
(207, 2, '订单导入', '2', '', '', 7, '1', 'order:import', 'admin', NOW(), 'admin', NOW(), '0'),
(208, 2, '订单审核', '2', '', '', 8, '1', 'order:audit', 'admin', NOW(), 'admin', NOW(), '0'),
(209, 2, '订单取消', '2', '', '', 9, '1', 'order:cancel', 'admin', NOW(), 'admin', NOW(), '0'),
(210, 2, '订单完成', '2', '', '', 10, '1', 'order:complete', 'admin', NOW(), 'admin', NOW(), '0');
-- =========================================
-- 2. 插入出库查询相关按钮权限
-- =========================================
-- 出库查询按钮权限 (parent_id = 3)
INSERT INTO t_sys_menu (menu_id, parent_id, menu_name, menu_type, path, icon, sort, status, perms, create_by, create_time, update_by, update_time, del_flag)
VALUES
(301, 3, '出库查询', '2', '', '', 1, '1', 'delivery:list', 'admin', NOW(), 'admin', NOW(), '0'),
(302, 3, '出库详情', '2', '', '', 2, '1', 'delivery:query', 'admin', NOW(), 'admin', NOW(), '0'),
(303, 3, '出库导出', '2', '', '', 3, '1', 'delivery:export', 'admin', NOW(), 'admin', NOW(), '0'),
(304, 3, '出库统计', '2', '', '', 4, '1', 'delivery:statistics', 'admin', NOW(), 'admin', NOW(), '0'),
(305, 3, '出库打印', '2', '', '', 5, '1', 'delivery:print', 'admin', NOW(), 'admin', NOW(), '0'),
(306, 3, '出库确认', '2', '', '', 6, '1', 'delivery:confirm', 'admin', NOW(), 'admin', NOW(), '0'),
(307, 3, '出库撤销', '2', '', '', 7, '1', 'delivery:cancel', 'admin', NOW(), 'admin', NOW(), '0');
-- =========================================
-- 3. 插入发票管理相关按钮权限
-- =========================================
-- 发票管理按钮权限 (parent_id = 4)
INSERT INTO t_sys_menu (menu_id, parent_id, menu_name, menu_type, path, icon, sort, status, perms, create_by, create_time, update_by, update_time, del_flag)
VALUES
(401, 4, '发票查询', '2', '', '', 1, '1', 'invoice:list', 'admin', NOW(), 'admin', NOW(), '0'),
(402, 4, '发票新增', '2', '', '', 2, '1', 'invoice:add', 'admin', NOW(), 'admin', NOW(), '0'),
(403, 4, '发票修改', '2', '', '', 3, '1', 'invoice:edit', 'admin', NOW(), 'admin', NOW(), '0'),
(404, 4, '发票删除', '2', '', '', 4, '1', 'invoice:remove', 'admin', NOW(), 'admin', NOW(), '0'),
(405, 4, '发票详情', '2', '', '', 5, '1', 'invoice:query', 'admin', NOW(), 'admin', NOW(), '0'),
(406, 4, '发票导出', '2', '', '', 6, '1', 'invoice:export', 'admin', NOW(), 'admin', NOW(), '0'),
(407, 4, '发票打印', '2', '', '', 7, '1', 'invoice:print', 'admin', NOW(), 'admin', NOW(), '0'),
(408, 4, '发票审核', '2', '', '', 8, '1', 'invoice:audit', 'admin', NOW(), 'admin', NOW(), '0'),
(409, 4, '发票作废', '2', '', '', 9, '1', 'invoice:void', 'admin', NOW(), 'admin', NOW(), '0'),
(410, 4, '发票红冲', '2', '', '', 10, '1', 'invoice:reverse', 'admin', NOW(), 'admin', NOW(), '0');
-- =========================================
-- 4. 为ADMIN角色分配新权限
-- =========================================
-- 获取ADMIN角色ID
SET @admin_role_id = (SELECT role_id FROM t_sys_role WHERE role_code = 'ADMIN' AND del_flag = '0' LIMIT 1);
-- 为ADMIN角色分配订单管理按钮权限
INSERT INTO t_sys_role_menu (role_id, menu_id, create_by, create_time, update_by, update_time, del_flag)
SELECT @admin_role_id, menu_id, 'admin', NOW(), 'admin', NOW(), '0'
FROM t_sys_menu
WHERE menu_id IN (201, 202, 203, 204, 205, 206, 207, 208, 209, 210)
AND del_flag = '0';
-- 为ADMIN角色分配出库查询按钮权限
INSERT INTO t_sys_role_menu (role_id, menu_id, create_by, create_time, update_by, update_time, del_flag)
SELECT @admin_role_id, menu_id, 'admin', NOW(), 'admin', NOW(), '0'
FROM t_sys_menu
WHERE menu_id IN (301, 302, 303, 304, 305, 306, 307)
AND del_flag = '0';
-- 为ADMIN角色分配发票管理按钮权限
INSERT INTO t_sys_role_menu (role_id, menu_id, create_by, create_time, update_by, update_time, del_flag)
SELECT @admin_role_id, menu_id, 'admin', NOW(), 'admin', NOW(), '0'
FROM t_sys_menu
WHERE menu_id IN (401, 402, 403, 404, 405, 406, 407, 408, 409, 410)
AND del_flag = '0';
-- =========================================
-- 5. 为OPERATOR角色分配权限
-- =========================================
-- 获取OPERATOR角色ID
SET @operator_role_id = (SELECT role_id FROM t_sys_role WHERE role_code = 'OPERATOR' AND del_flag = '0' LIMIT 1);
-- 为OPERATOR角色分配订单管理按钮权限(除删除外)
INSERT INTO t_sys_role_menu (role_id, menu_id, create_by, create_time, update_by, update_time, del_flag)
SELECT @operator_role_id, menu_id, 'admin', NOW(), 'admin', NOW(), '0'
FROM t_sys_menu
WHERE menu_id IN (201, 202, 203, 205, 206, 207, 208, 209, 210)
AND del_flag = '0';
-- 为OPERATOR角色分配出库查询按钮权限
INSERT INTO t_sys_role_menu (role_id, menu_id, create_by, create_time, update_by, update_time, del_flag)
SELECT @operator_role_id, menu_id, 'admin', NOW(), 'admin', NOW(), '0'
FROM t_sys_menu
WHERE menu_id IN (301, 302, 303, 304, 305, 306, 307)
AND del_flag = '0';
-- 为OPERATOR角色分配发票管理按钮权限(除删除外)
INSERT INTO t_sys_role_menu (role_id, menu_id, create_by, create_time, update_by, update_time, del_flag)
SELECT @operator_role_id, menu_id, 'admin', NOW(), 'admin', NOW(), '0'
FROM t_sys_menu
WHERE menu_id IN (401, 402, 403, 405, 406, 407, 408, 409, 410)
AND del_flag = '0';
-- =========================================
-- 6. 为DEALER_MANAGER角色分配权限
-- =========================================
-- 获取DEALER_MANAGER角色ID
SET @dealer_manager_role_id = (SELECT role_id FROM t_sys_role WHERE role_code = 'DEALER_MANAGER' AND del_flag = '0' LIMIT 1);
-- 为DEALER_MANAGER角色分配订单管理按钮权限(只读权限)
INSERT INTO t_sys_role_menu (role_id, menu_id, create_by, create_time, update_by, update_time, del_flag)
SELECT @dealer_manager_role_id, menu_id, 'admin', NOW(), 'admin', NOW(), '0'
FROM t_sys_menu
WHERE menu_id IN (201, 205, 206)
AND del_flag = '0';
-- 为DEALER_MANAGER角色分配出库查询按钮权限
INSERT INTO t_sys_role_menu (role_id, menu_id, create_by, create_time, update_by, update_time, del_flag)
SELECT @dealer_manager_role_id, menu_id, 'admin', NOW(), 'admin', NOW(), '0'
FROM t_sys_menu
WHERE menu_id IN (301, 302, 303, 304, 305)
AND del_flag = '0';
-- 为DEALER_MANAGER角色分配发票管理按钮权限(只读权限)
INSERT INTO t_sys_role_menu (role_id, menu_id, create_by, create_time, update_by, update_time, del_flag)
SELECT @dealer_manager_role_id, menu_id, 'admin', NOW(), 'admin', NOW(), '0'
FROM t_sys_menu
WHERE menu_id IN (401, 405, 406, 407)
AND del_flag = '0';
-- 重置外键检查
SET FOREIGN_KEY_CHECKS = 1;
-- 输出完成信息
SELECT '订单管理、出库查询、发票管理按钮权限配置完成!' AS message;
......@@ -5,77 +5,5 @@
// Generated by unplugin-auto-import
export {}
declare global {
const EffectScope: typeof import('vue')['EffectScope']
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
const computed: typeof import('vue')['computed']
const createApp: typeof import('vue')['createApp']
const createPinia: typeof import('pinia')['createPinia']
const customRef: typeof import('vue')['customRef']
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
const defineComponent: typeof import('vue')['defineComponent']
const defineStore: typeof import('pinia')['defineStore']
const effectScope: typeof import('vue')['effectScope']
const getActivePinia: typeof import('pinia')['getActivePinia']
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
const getCurrentScope: typeof import('vue')['getCurrentScope']
const h: typeof import('vue')['h']
const inject: typeof import('vue')['inject']
const isProxy: typeof import('vue')['isProxy']
const isReactive: typeof import('vue')['isReactive']
const isReadonly: typeof import('vue')['isReadonly']
const isRef: typeof import('vue')['isRef']
const mapActions: typeof import('pinia')['mapActions']
const mapGetters: typeof import('pinia')['mapGetters']
const mapState: typeof import('pinia')['mapState']
const mapStores: typeof import('pinia')['mapStores']
const mapWritableState: typeof import('pinia')['mapWritableState']
const markRaw: typeof import('vue')['markRaw']
const nextTick: typeof import('vue')['nextTick']
const onActivated: typeof import('vue')['onActivated']
const onBeforeMount: typeof import('vue')['onBeforeMount']
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
const onDeactivated: typeof import('vue')['onDeactivated']
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
const onMounted: typeof import('vue')['onMounted']
const onRenderTracked: typeof import('vue')['onRenderTracked']
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
const onScopeDispose: typeof import('vue')['onScopeDispose']
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
const onUnmounted: typeof import('vue')['onUnmounted']
const onUpdated: typeof import('vue')['onUpdated']
const onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
const provide: typeof import('vue')['provide']
const reactive: typeof import('vue')['reactive']
const readonly: typeof import('vue')['readonly']
const ref: typeof import('vue')['ref']
const resolveComponent: typeof import('vue')['resolveComponent']
const setActivePinia: typeof import('pinia')['setActivePinia']
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
const shallowReactive: typeof import('vue')['shallowReactive']
const shallowReadonly: typeof import('vue')['shallowReadonly']
const shallowRef: typeof import('vue')['shallowRef']
const storeToRefs: typeof import('pinia')['storeToRefs']
const toRaw: typeof import('vue')['toRaw']
const toRef: typeof import('vue')['toRef']
const toRefs: typeof import('vue')['toRefs']
const toValue: typeof import('vue')['toValue']
const triggerRef: typeof import('vue')['triggerRef']
const unref: typeof import('vue')['unref']
const useAttrs: typeof import('vue')['useAttrs']
const useCssModule: typeof import('vue')['useCssModule']
const useCssVars: typeof import('vue')['useCssVars']
const useId: typeof import('vue')['useId']
const useLink: typeof import('vue-router')['useLink']
const useModel: typeof import('vue')['useModel']
const useRoute: typeof import('vue-router')['useRoute']
const useRouter: typeof import('vue-router')['useRouter']
const useSlots: typeof import('vue')['useSlots']
const useTemplateRef: typeof import('vue')['useTemplateRef']
const watch: typeof import('vue')['watch']
const watchEffect: typeof import('vue')['watchEffect']
const watchPostEffect: typeof import('vue')['watchPostEffect']
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
}
......
import { request } from '../utils/request'
// 订单相关类型定义
export interface OrderInfo {
orderId: number
orderNo: string
dealerCode: string
dealerName: string
orderDate: string
totalAmount: number
rebateAmount?: number
deliveryStatus: number
invoiceStatus: number
rebateCalcFlag: number
dataSource?: string
verifyStatus: number
uploadTime?: string
createBy?: string
createTime?: string
updateBy?: string
updateTime?: string
orderItems?: OrderItemInfo[]
}
export interface OrderItemInfo {
itemId?: number
orderId?: number
productCode: string
productName: string
productQty: number
unitPrice: number
itemAmount: number
}
export interface OrderQueryReq {
orderNo?: string
dealerCode?: string
dealerName?: string
deliveryStatus?: number
invoiceStatus?: number
rebateCalcFlag?: number
dataSource?: string
verifyStatus?: number
orderStartDate?: string
orderEndDate?: string
minAmount?: number
maxAmount?: number
pageNum?: number
pageSize?: number
}
export interface OrderAddReq {
orderNo: string
dealerCode: string
dealerName: string
orderDate: string
totalAmount: number
rebateAmount?: number
deliveryStatus?: number
invoiceStatus?: number
rebateCalcFlag?: number
dataSource?: string
verifyStatus?: number
uploadTime?: string
orderItems: OrderItemAddReq[]
}
export interface OrderItemAddReq {
productCode: string
productName: string
productQty: number
unitPrice: number
itemAmount: number
}
export interface OrderUpdateReq {
orderId: number
orderNo: string
dealerCode: string
dealerName: string
orderDate: string
totalAmount: number
rebateAmount?: number
deliveryStatus?: number
invoiceStatus?: number
rebateCalcFlag?: number
dataSource?: string
verifyStatus?: number
uploadTime?: string
orderItems: OrderItemUpdateReq[]
}
export interface OrderItemUpdateReq {
itemId?: number
productCode: string
productName: string
productQty: number
unitPrice: number
itemAmount: number
}
// 订单API接口
export const orderApi = {
// 分页查询订单列表
getOrderList: (params: OrderQueryReq) => {
return request.get('/order/list', { params })
},
// 获取订单详情
getOrderDetail: (orderId: number) => {
return request.get(`/order/${orderId}`)
},
// 新增订单
addOrder: (data: OrderAddReq) => {
return request.post('/order', data)
},
// 修改订单
updateOrder: (data: OrderUpdateReq) => {
return request.post('/order/update', data)
},
// 删除订单
deleteOrder: (orderId: number) => {
return request.delete(`/order/${orderId}`)
},
// 批量删除订单
batchDeleteOrders: (orderIds: number[]) => {
return request.post('/order/batchDelete', orderIds)
},
// 修改订单出库状态
updateDeliveryStatus: (orderId: number, deliveryStatus: number) => {
return request.post(`/order/${orderId}/deliveryStatus`, null, {
params: { deliveryStatus }
})
},
// 修改订单开票状态
updateInvoiceStatus: (orderId: number, invoiceStatus: number) => {
return request.post(`/order/${orderId}/invoiceStatus`, null, {
params: { invoiceStatus }
})
},
// 修改订单返利计算状态
updateRebateCalcFlag: (orderId: number, rebateCalcFlag: number) => {
return request.post(`/order/${orderId}/rebateCalcFlag`, null, {
params: { rebateCalcFlag }
})
}
}
......@@ -141,6 +141,9 @@ const tabContainer = ref<HTMLElement>()
// 菜单项配置
const menuItems = ref([
{ name: '首页', path: '/main/dashboard', icon: '🏠' },
{ name: '订单管理', path: '/main/order', icon: '📋' },
{ name: '出库查询', path: '/main/delivery', icon: '📦' },
{ name: '发票管理', path: '/main/invoice', icon: '🧾' },
{ name: '产品管理', path: '/main/product', icon: '📦' },
{ name: '经销商管理', path: '/main/dealer', icon: '🏢' },
{
......
......@@ -135,6 +135,33 @@ const staticRoutes: RouteRecordRaw[] = [
}
},
{
path: 'order',
name: 'Order',
component: () => import('@/views/order/index.vue'),
meta: {
title: '订单管理',
requiresAuth: true
}
},
{
path: 'delivery',
name: 'Delivery',
component: () => import('@/views/delivery/index.vue'),
meta: {
title: '出库查询',
requiresAuth: true
}
},
{
path: 'invoice',
name: 'Invoice',
component: () => import('@/views/invoice/index.vue'),
meta: {
title: '发票管理',
requiresAuth: true
}
},
{
path: 'settings',
name: 'Settings',
component: () => import('@/views/settings/index.vue'),
......
......@@ -3,16 +3,19 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import { useUserStore } from '@/stores/modules/user'
import router from '@/router'
// API基础配置
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8083'
// 创建axios实例
const service: AxiosInstance = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL,
baseURL: API_BASE_URL,
timeout: 10000,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
})
console.log('Axios实例创建,baseURL:', import.meta.env.VITE_API_BASE_URL)
console.log('Request工具实例创建,baseURL:', API_BASE_URL)
// 请求拦截器
service.interceptors.request.use(
......@@ -25,12 +28,11 @@ service.interceptors.request.use(
headers: config.headers
})
const userStore = useUserStore()
// 添加token到请求头
if (userStore.token) {
const token = localStorage.getItem('token')
if (token) {
config.headers = config.headers || {}
config.headers['Authorization'] = `Bearer ${userStore.token}`
config.headers['Authorization'] = `Bearer ${token}`
}
return config
......
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
......@@ -1026,8 +1026,9 @@ onMounted(() => {
.dialog-content {
background: white;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
width: 600px;
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
max-width: 600px;
width: 90%;
max-height: 80vh;
overflow-y: auto;
}
......@@ -1095,10 +1096,9 @@ onMounted(() => {
.form-input, .form-select, .form-textarea {
padding: 8px 12px;
border: 1px solid #d9d9d9;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 14px;
transition: border-color 0.2s;
}
.form-input:focus, .form-select:focus, .form-textarea:focus {
......@@ -1122,25 +1122,20 @@ onMounted(() => {
}
.cancel-btn, .submit-btn {
padding: 8px 16px;
padding: 10px 20px;
border: none;
border-radius: 4px;
font-size: 14px;
cursor: pointer;
transition: all 0.2s;
font-weight: 500;
}
.cancel-btn {
background: #f5f5f5;
color: #666;
}
.cancel-btn:hover {
background: #e6e6e6;
background: #6c757d;
color: white;
}
.submit-btn {
background: #1890ff;
background: #007bff;
color: white;
}
......