Commit bfe3dc95fe7c6b428c91012782adff5ae43a38c4
1 parent
46d26659
✨ ERP:增加供应商的实现
Showing
17 changed files
with
650 additions
and
11 deletions
yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java
| ... | ... | @@ -9,12 +9,16 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; |
| 9 | 9 | */ |
| 10 | 10 | public interface ErrorCodeConstants { |
| 11 | 11 | |
| 12 | - // ========== 销售订单(1-020-000-000) ========== | |
| 13 | - ErrorCode SALE_ORDER_NOT_EXISTS = new ErrorCode(1_020_000_000, "销售订单不存在"); | |
| 12 | + // ========== ERP 供应商(1-030-100-000) ========== | |
| 13 | + ErrorCode SUPPLIER_NOT_EXISTS = new ErrorCode(1_030_100_000, "供应商不存在"); | |
| 14 | + ErrorCode SUPPLIER_NOT_ENABLE = new ErrorCode(1_030_100_000, "供应商({})未启用"); | |
| 15 | + | |
| 16 | + // ========== 销售订单(1-030-200-000) ========== | |
| 17 | + ErrorCode SALE_ORDER_NOT_EXISTS = new ErrorCode(1_020_200_000, "销售订单不存在"); | |
| 14 | 18 | |
| 15 | 19 | // ========== ERP 仓库 1-030-400-000 ========== |
| 16 | 20 | ErrorCode WAREHOUSE_NOT_EXISTS = new ErrorCode(1_030_400_000, "仓库不存在"); |
| 17 | - ErrorCode WAREHOUSE_NOT_ENABLE = new ErrorCode(1_030_500_001, "仓库({})未启用"); | |
| 21 | + ErrorCode WAREHOUSE_NOT_ENABLE = new ErrorCode(1_030_400_001, "仓库({})未启用"); | |
| 18 | 22 | |
| 19 | 23 | // ========== ERP 其它入库单 1-030-401-000 ========== |
| 20 | 24 | ErrorCode STOCK_IN_NOT_EXISTS = new ErrorCode(1_030_401_000, "其它入库单不存在"); | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpSupplierController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.erp.controller.admin.purchase; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 5 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 6 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 7 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | |
| 8 | +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | |
| 9 | +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | |
| 10 | +import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierPageReqVO; | |
| 11 | +import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierRespVO; | |
| 12 | +import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierSaveReqVO; | |
| 13 | +import cn.iocoder.yudao.module.erp.dal.dataobject.supplier.ErpSupplierDO; | |
| 14 | +import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService; | |
| 15 | +import io.swagger.v3.oas.annotations.Operation; | |
| 16 | +import io.swagger.v3.oas.annotations.Parameter; | |
| 17 | +import io.swagger.v3.oas.annotations.tags.Tag; | |
| 18 | +import jakarta.annotation.Resource; | |
| 19 | +import jakarta.servlet.http.HttpServletResponse; | |
| 20 | +import jakarta.validation.Valid; | |
| 21 | +import org.springframework.security.access.prepost.PreAuthorize; | |
| 22 | +import org.springframework.validation.annotation.Validated; | |
| 23 | +import org.springframework.web.bind.annotation.*; | |
| 24 | + | |
| 25 | +import java.io.IOException; | |
| 26 | +import java.util.List; | |
| 27 | + | |
| 28 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 29 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | |
| 30 | +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; | |
| 31 | + | |
| 32 | +@Tag(name = "管理后台 - ERP 供应商") | |
| 33 | +@RestController | |
| 34 | +@RequestMapping("/erp/supplier") | |
| 35 | +@Validated | |
| 36 | +public class ErpSupplierController { | |
| 37 | + | |
| 38 | + @Resource | |
| 39 | + private ErpSupplierService supplierService; | |
| 40 | + | |
| 41 | + @PostMapping("/create") | |
| 42 | + @Operation(summary = "创建供应商") | |
| 43 | + @PreAuthorize("@ss.hasPermission('erp:supplier:create')") | |
| 44 | + public CommonResult<Long> createSupplier(@Valid @RequestBody ErpSupplierSaveReqVO createReqVO) { | |
| 45 | + return success(supplierService.createSupplier(createReqVO)); | |
| 46 | + } | |
| 47 | + | |
| 48 | + @PutMapping("/update") | |
| 49 | + @Operation(summary = "更新供应商") | |
| 50 | + @PreAuthorize("@ss.hasPermission('erp:supplier:update')") | |
| 51 | + public CommonResult<Boolean> updateSupplier(@Valid @RequestBody ErpSupplierSaveReqVO updateReqVO) { | |
| 52 | + supplierService.updateSupplier(updateReqVO); | |
| 53 | + return success(true); | |
| 54 | + } | |
| 55 | + | |
| 56 | + @DeleteMapping("/delete") | |
| 57 | + @Operation(summary = "删除供应商") | |
| 58 | + @Parameter(name = "id", description = "编号", required = true) | |
| 59 | + @PreAuthorize("@ss.hasPermission('erp:supplier:delete')") | |
| 60 | + public CommonResult<Boolean> deleteSupplier(@RequestParam("id") Long id) { | |
| 61 | + supplierService.deleteSupplier(id); | |
| 62 | + return success(true); | |
| 63 | + } | |
| 64 | + | |
| 65 | + @GetMapping("/get") | |
| 66 | + @Operation(summary = "获得供应商") | |
| 67 | + @Parameter(name = "id", description = "编号", required = true, example = "1024") | |
| 68 | + @PreAuthorize("@ss.hasPermission('erp:supplier:query')") | |
| 69 | + public CommonResult<ErpSupplierRespVO> getSupplier(@RequestParam("id") Long id) { | |
| 70 | + ErpSupplierDO supplier = supplierService.getSupplier(id); | |
| 71 | + return success(BeanUtils.toBean(supplier, ErpSupplierRespVO.class)); | |
| 72 | + } | |
| 73 | + | |
| 74 | + @GetMapping("/page") | |
| 75 | + @Operation(summary = "获得供应商分页") | |
| 76 | + @PreAuthorize("@ss.hasPermission('erp:supplier:query')") | |
| 77 | + public CommonResult<PageResult<ErpSupplierRespVO>> getSupplierPage(@Valid ErpSupplierPageReqVO pageReqVO) { | |
| 78 | + PageResult<ErpSupplierDO> pageResult = supplierService.getSupplierPage(pageReqVO); | |
| 79 | + return success(BeanUtils.toBean(pageResult, ErpSupplierRespVO.class)); | |
| 80 | + } | |
| 81 | + | |
| 82 | + @GetMapping("/simple-list") | |
| 83 | + @Operation(summary = "获得供应商精简列表", description = "只包含被开启的供应商,主要用于前端的下拉选项") | |
| 84 | + public CommonResult<List<ErpSupplierRespVO>> getSupplierSimpleList() { | |
| 85 | + List<ErpSupplierDO> list = supplierService.getSupplierListByStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 86 | + return success(convertList(list, supplier -> new ErpSupplierRespVO().setId(supplier.getId()).setName(supplier.getName()))); | |
| 87 | + } | |
| 88 | + | |
| 89 | + @GetMapping("/export-excel") | |
| 90 | + @Operation(summary = "导出供应商 Excel") | |
| 91 | + @PreAuthorize("@ss.hasPermission('erp:supplier:export')") | |
| 92 | + @OperateLog(type = EXPORT) | |
| 93 | + public void exportSupplierExcel(@Valid ErpSupplierPageReqVO pageReqVO, | |
| 94 | + HttpServletResponse response) throws IOException { | |
| 95 | + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); | |
| 96 | + List<ErpSupplierDO> list = supplierService.getSupplierPage(pageReqVO).getList(); | |
| 97 | + // 导出 Excel | |
| 98 | + ExcelUtils.write(response, "供应商.xls", "数据", ErpSupplierRespVO.class, | |
| 99 | + BeanUtils.toBean(list, ErpSupplierRespVO.class)); | |
| 100 | + } | |
| 101 | + | |
| 102 | +} | |
| 0 | 103 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/supplier/ErpSupplierPageReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageParam; | |
| 4 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 5 | +import lombok.Data; | |
| 6 | +import lombok.EqualsAndHashCode; | |
| 7 | +import lombok.ToString; | |
| 8 | + | |
| 9 | +@Schema(description = "管理后台 - ERP 供应商分页 Request VO") | |
| 10 | +@Data | |
| 11 | +@EqualsAndHashCode(callSuper = true) | |
| 12 | +@ToString(callSuper = true) | |
| 13 | +public class ErpSupplierPageReqVO extends PageParam { | |
| 14 | + | |
| 15 | + @Schema(description = "供应商名称", example = "芋道源码") | |
| 16 | + private String name; | |
| 17 | + | |
| 18 | + @Schema(description = "手机号码", example = "15601691300") | |
| 19 | + private String mobile; | |
| 20 | + | |
| 21 | + @Schema(description = "联系电话", example = "18818288888") | |
| 22 | + private String telephone; | |
| 23 | + | |
| 24 | +} | |
| 0 | 25 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/supplier/ErpSupplierRespVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; | |
| 4 | +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; | |
| 5 | +import cn.iocoder.yudao.module.system.enums.DictTypeConstants; | |
| 6 | +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | |
| 7 | +import com.alibaba.excel.annotation.ExcelProperty; | |
| 8 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 9 | +import lombok.Data; | |
| 10 | + | |
| 11 | +import java.math.BigDecimal; | |
| 12 | +import java.time.LocalDateTime; | |
| 13 | + | |
| 14 | +@Schema(description = "管理后台 - ERP 供应商 Response VO") | |
| 15 | +@Data | |
| 16 | +@ExcelIgnoreUnannotated | |
| 17 | +public class ErpSupplierRespVO { | |
| 18 | + | |
| 19 | + @Schema(description = "供应商编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "17791") | |
| 20 | + @ExcelProperty("供应商编号") | |
| 21 | + private Long id; | |
| 22 | + | |
| 23 | + @Schema(description = "供应商名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") | |
| 24 | + @ExcelProperty("供应商名称") | |
| 25 | + private String name; | |
| 26 | + | |
| 27 | + @Schema(description = "联系人", example = "芋艿") | |
| 28 | + @ExcelProperty("联系人") | |
| 29 | + private String contact; | |
| 30 | + | |
| 31 | + @Schema(description = "手机号码", example = "15601691300") | |
| 32 | + @ExcelProperty("手机号码") | |
| 33 | + private String mobile; | |
| 34 | + | |
| 35 | + @Schema(description = "联系电话", example = "18818288888") | |
| 36 | + @ExcelProperty("联系电话") | |
| 37 | + private String telephone; | |
| 38 | + | |
| 39 | + @Schema(description = "电子邮箱", example = "76853@qq.com") | |
| 40 | + @ExcelProperty("电子邮箱") | |
| 41 | + private String email; | |
| 42 | + | |
| 43 | + @Schema(description = "传真", example = "20 7123 4567") | |
| 44 | + @ExcelProperty("传真") | |
| 45 | + private String fax; | |
| 46 | + | |
| 47 | + @Schema(description = "备注", example = "你猜") | |
| 48 | + @ExcelProperty("备注") | |
| 49 | + private String remark; | |
| 50 | + | |
| 51 | + @Schema(description = "开启状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | |
| 52 | + @ExcelProperty(value = "开启状态", converter = DictConvert.class) | |
| 53 | + @DictFormat(DictTypeConstants.COMMON_STATUS) | |
| 54 | + private Integer status; | |
| 55 | + | |
| 56 | + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") | |
| 57 | + @ExcelProperty("排序") | |
| 58 | + private Integer sort; | |
| 59 | + | |
| 60 | + @Schema(description = "纳税人识别号", example = "91130803MA098BY05W") | |
| 61 | + @ExcelProperty("纳税人识别号") | |
| 62 | + private String taxNo; | |
| 63 | + | |
| 64 | + @Schema(description = "税率", example = "10") | |
| 65 | + @ExcelProperty("税率") | |
| 66 | + private BigDecimal taxPercent; | |
| 67 | + | |
| 68 | + @Schema(description = "开户行", example = "张三") | |
| 69 | + @ExcelProperty("开户行") | |
| 70 | + private String bankName; | |
| 71 | + | |
| 72 | + @Schema(description = "开户账号", example = "622908212277228617") | |
| 73 | + @ExcelProperty("开户账号") | |
| 74 | + private String bankAccount; | |
| 75 | + | |
| 76 | + @Schema(description = "开户地址", example = "兴业银行浦东支行") | |
| 77 | + @ExcelProperty("开户地址") | |
| 78 | + private String bankAddress; | |
| 79 | + | |
| 80 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 81 | + @ExcelProperty("创建时间") | |
| 82 | + private LocalDateTime createTime; | |
| 83 | + | |
| 84 | +} | |
| 0 | 85 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/supplier/ErpSupplierSaveReqVO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | |
| 4 | +import cn.iocoder.yudao.framework.common.validation.InEnum; | |
| 5 | +import cn.iocoder.yudao.framework.common.validation.Mobile; | |
| 6 | +import cn.iocoder.yudao.framework.common.validation.Telephone; | |
| 7 | +import io.swagger.v3.oas.annotations.media.Schema; | |
| 8 | +import jakarta.validation.constraints.Email; | |
| 9 | +import jakarta.validation.constraints.NotEmpty; | |
| 10 | +import jakarta.validation.constraints.NotNull; | |
| 11 | +import lombok.Data; | |
| 12 | + | |
| 13 | +import java.math.BigDecimal; | |
| 14 | + | |
| 15 | +@Schema(description = "管理后台 - ERP 供应商新增/修改 Request VO") | |
| 16 | +@Data | |
| 17 | +public class ErpSupplierSaveReqVO { | |
| 18 | + | |
| 19 | + @Schema(description = "供应商编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "17791") | |
| 20 | + private Long id; | |
| 21 | + | |
| 22 | + @Schema(description = "供应商名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") | |
| 23 | + @NotEmpty(message = "供应商名称不能为空") | |
| 24 | + private String name; | |
| 25 | + | |
| 26 | + @Schema(description = "联系人", example = "芋艿") | |
| 27 | + private String contact; | |
| 28 | + | |
| 29 | + @Schema(description = "手机号码", example = "15601691300") | |
| 30 | + @Mobile | |
| 31 | + private String mobile; | |
| 32 | + | |
| 33 | + @Schema(description = "联系电话", example = "18818288888") | |
| 34 | + @Telephone | |
| 35 | + private String telephone; | |
| 36 | + | |
| 37 | + @Schema(description = "电子邮箱", example = "76853@qq.com") | |
| 38 | ||
| 39 | + private String email; | |
| 40 | + | |
| 41 | + @Schema(description = "传真", example = "20 7123 4567") | |
| 42 | + private String fax; | |
| 43 | + | |
| 44 | + @Schema(description = "备注", example = "你猜") | |
| 45 | + private String remark; | |
| 46 | + | |
| 47 | + @Schema(description = "开启状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | |
| 48 | + @NotNull(message = "开启状态不能为空") | |
| 49 | + @InEnum(value = CommonStatusEnum.class) | |
| 50 | + private Integer status; | |
| 51 | + | |
| 52 | + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") | |
| 53 | + @NotNull(message = "排序不能为空") | |
| 54 | + private Integer sort; | |
| 55 | + | |
| 56 | + @Schema(description = "纳税人识别号", example = "91130803MA098BY05W") | |
| 57 | + private String taxNo; | |
| 58 | + | |
| 59 | + @Schema(description = "税率", example = "10") | |
| 60 | + private BigDecimal taxPercent; | |
| 61 | + | |
| 62 | + @Schema(description = "开户行", example = "张三") | |
| 63 | + private String bankName; | |
| 64 | + | |
| 65 | + @Schema(description = "开户账号", example = "622908212277228617") | |
| 66 | + private String bankAccount; | |
| 67 | + | |
| 68 | + @Schema(description = "开户地址", example = "兴业银行浦东支行") | |
| 69 | + private String bankAddress; | |
| 70 | + | |
| 71 | +} | |
| 0 | 72 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/ErpStockInController.java
| ... | ... | @@ -15,7 +15,9 @@ import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInSaveRe |
| 15 | 15 | import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO; |
| 16 | 16 | import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInDO; |
| 17 | 17 | import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInItemDO; |
| 18 | +import cn.iocoder.yudao.module.erp.dal.dataobject.supplier.ErpSupplierDO; | |
| 18 | 19 | import cn.iocoder.yudao.module.erp.service.product.ErpProductService; |
| 20 | +import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService; | |
| 19 | 21 | import cn.iocoder.yudao.module.erp.service.stock.ErpStockInService; |
| 20 | 22 | import cn.iocoder.yudao.module.erp.service.stock.ErpStockService; |
| 21 | 23 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| ... | ... | @@ -52,6 +54,8 @@ public class ErpStockInController { |
| 52 | 54 | private ErpStockService stockService; |
| 53 | 55 | @Resource |
| 54 | 56 | private ErpProductService productService; |
| 57 | + @Resource | |
| 58 | + private ErpSupplierService supplierService; | |
| 55 | 59 | |
| 56 | 60 | @Resource |
| 57 | 61 | private AdminUserApi adminUserApi; |
| ... | ... | @@ -90,7 +94,7 @@ public class ErpStockInController { |
| 90 | 94 | return success(null); |
| 91 | 95 | } |
| 92 | 96 | List<ErpStockInItemDO> stockInItems = stockInService.getStockInItemListByInId(id); |
| 93 | - | |
| 97 | + // TODO 芋艿:有个锤子; | |
| 94 | 98 | return success(BeanUtils.toBean(stockIn, ErpStockInRespVO.class, stockInVO -> |
| 95 | 99 | stockInVO.setItems(BeanUtils.toBean(stockInItems, ErpStockInRespVO.Item.class, item -> { |
| 96 | 100 | ErpStockDO stock = stockService.getStock(item.getProductId(), item.getWarehouseId()); |
| ... | ... | @@ -129,7 +133,10 @@ public class ErpStockInController { |
| 129 | 133 | // 1.2 商品信息 |
| 130 | 134 | Map<Long, ErpProductRespVO> productMap = productService.getProductVOMap( |
| 131 | 135 | convertSet(stockInItemList, ErpStockInItemDO::getProductId)); |
| 132 | - // 1.3 管理员信息 | |
| 136 | + // 1.3 供应商信息 | |
| 137 | + Map<Long, ErpSupplierDO> supplierMap = supplierService.getSupplierMap( | |
| 138 | + convertSet(pageResult.getList(), ErpStockInDO::getSupplierId)); | |
| 139 | + // 1.4 管理员信息 | |
| 133 | 140 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| 134 | 141 | convertSet(pageResult.getList(), erpStockRecordDO -> Long.parseLong(erpStockRecordDO.getCreator()))); |
| 135 | 142 | // 2. 开始拼接 |
| ... | ... | @@ -138,6 +145,7 @@ public class ErpStockInController { |
| 138 | 145 | item -> MapUtils.findAndThen(productMap, item.getProductId(), |
| 139 | 146 | product -> item.setProductName(product.getName()).setProductUnitName(product.getUnitName())))); |
| 140 | 147 | stockIn.setProductNames(CollUtil.join(stockIn.getItems(), ",", ErpStockInRespVO.Item::getProductName)); |
| 148 | + MapUtils.findAndThen(supplierMap, stockIn.getSupplierId(), supplier -> stockIn.setSupplierName(supplier.getName())); | |
| 141 | 149 | MapUtils.findAndThen(userMap, Long.parseLong(stockIn.getCreator()), user -> stockIn.setCreatorName(user.getNickname())); |
| 142 | 150 | }); |
| 143 | 151 | } | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInPageReqVO.java
| ... | ... | @@ -39,4 +39,10 @@ public class ErpStockInPageReqVO extends PageParam { |
| 39 | 39 | @Schema(description = "创建者") |
| 40 | 40 | private String creator; |
| 41 | 41 | |
| 42 | + @Schema(description = "产品编号", example = "1") | |
| 43 | + private Long productId; | |
| 44 | + | |
| 45 | + @Schema(description = "仓库编号", example = "1") | |
| 46 | + private Long warehouseId; | |
| 47 | + | |
| 42 | 48 | } |
| 43 | 49 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInRespVO.java
| ... | ... | @@ -27,8 +27,10 @@ public class ErpStockInRespVO { |
| 27 | 27 | private String no; |
| 28 | 28 | |
| 29 | 29 | @Schema(description = "供应商编号", example = "3113") |
| 30 | - @ExcelProperty("供应商编号") | |
| 31 | 30 | private Long supplierId; |
| 31 | + @Schema(description = "供应商名称", example = "芋道") | |
| 32 | + @ExcelProperty("供应商名称") | |
| 33 | + private String supplierName; | |
| 32 | 34 | |
| 33 | 35 | @Schema(description = "入库时间", requiredMode = Schema.RequiredMode.REQUIRED) |
| 34 | 36 | @ExcelProperty("入库时间") | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/supplier/ErpSupplierDO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.erp.dal.dataobject.supplier; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | |
| 4 | +import com.baomidou.mybatisplus.annotation.KeySequence; | |
| 5 | +import com.baomidou.mybatisplus.annotation.TableId; | |
| 6 | +import com.baomidou.mybatisplus.annotation.TableName; | |
| 7 | +import lombok.*; | |
| 8 | + | |
| 9 | +import java.math.BigDecimal; | |
| 10 | + | |
| 11 | +/** | |
| 12 | + * ERP 供应商 DO | |
| 13 | + * | |
| 14 | + * @author 芋道源码 | |
| 15 | + */ | |
| 16 | +@TableName("erp_supplier") | |
| 17 | +@KeySequence("erp_supplier_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | |
| 18 | +@Data | |
| 19 | +@EqualsAndHashCode(callSuper = true) | |
| 20 | +@ToString(callSuper = true) | |
| 21 | +@Builder | |
| 22 | +@NoArgsConstructor | |
| 23 | +@AllArgsConstructor | |
| 24 | +public class ErpSupplierDO extends BaseDO { | |
| 25 | + | |
| 26 | + /** | |
| 27 | + * 供应商编号 | |
| 28 | + */ | |
| 29 | + @TableId | |
| 30 | + private Long id; | |
| 31 | + /** | |
| 32 | + * 供应商名称 | |
| 33 | + */ | |
| 34 | + private String name; | |
| 35 | + /** | |
| 36 | + * 联系人 | |
| 37 | + */ | |
| 38 | + private String contact; | |
| 39 | + /** | |
| 40 | + * 手机号码 | |
| 41 | + */ | |
| 42 | + private String mobile; | |
| 43 | + /** | |
| 44 | + * 联系电话 | |
| 45 | + */ | |
| 46 | + private String telephone; | |
| 47 | + /** | |
| 48 | + * 电子邮箱 | |
| 49 | + */ | |
| 50 | + private String email; | |
| 51 | + /** | |
| 52 | + * 传真 | |
| 53 | + */ | |
| 54 | + private String fax; | |
| 55 | + /** | |
| 56 | + * 备注 | |
| 57 | + */ | |
| 58 | + private String remark; | |
| 59 | + /** | |
| 60 | + * 开启状态 | |
| 61 | + * | |
| 62 | + * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum} | |
| 63 | + */ | |
| 64 | + private Integer status; | |
| 65 | + /** | |
| 66 | + * 排序 | |
| 67 | + */ | |
| 68 | + private Integer sort; | |
| 69 | + /** | |
| 70 | + * 纳税人识别号 | |
| 71 | + */ | |
| 72 | + private String taxNo; | |
| 73 | + /** | |
| 74 | + * 税率 | |
| 75 | + */ | |
| 76 | + private BigDecimal taxPercent; | |
| 77 | + /** | |
| 78 | + * 开户行 | |
| 79 | + */ | |
| 80 | + private String bankName; | |
| 81 | + /** | |
| 82 | + * 开户账号 | |
| 83 | + */ | |
| 84 | + private String bankAccount; | |
| 85 | + /** | |
| 86 | + * 开户地址 | |
| 87 | + */ | |
| 88 | + private String bankAddress; | |
| 89 | + | |
| 90 | +} | |
| 0 | 91 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpSupplierMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.erp.dal.mysql.purchase; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | |
| 6 | +import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierPageReqVO; | |
| 7 | +import cn.iocoder.yudao.module.erp.dal.dataobject.supplier.ErpSupplierDO; | |
| 8 | +import org.apache.ibatis.annotations.Mapper; | |
| 9 | + | |
| 10 | +import java.util.List; | |
| 11 | + | |
| 12 | +/** | |
| 13 | + * ERP 供应商 Mapper | |
| 14 | + * | |
| 15 | + * @author 芋道源码 | |
| 16 | + */ | |
| 17 | +@Mapper | |
| 18 | +public interface ErpSupplierMapper extends BaseMapperX<ErpSupplierDO> { | |
| 19 | + | |
| 20 | + default PageResult<ErpSupplierDO> selectPage(ErpSupplierPageReqVO reqVO) { | |
| 21 | + return selectPage(reqVO, new LambdaQueryWrapperX<ErpSupplierDO>() | |
| 22 | + .likeIfPresent(ErpSupplierDO::getName, reqVO.getName()) | |
| 23 | + .likeIfPresent(ErpSupplierDO::getMobile, reqVO.getMobile()) | |
| 24 | + .likeIfPresent(ErpSupplierDO::getTelephone, reqVO.getTelephone()) | |
| 25 | + .orderByDesc(ErpSupplierDO::getId)); | |
| 26 | + } | |
| 27 | + | |
| 28 | + default List<ErpSupplierDO> selectListByStatus(Integer status) { | |
| 29 | + return selectList(ErpSupplierDO::getStatus, status); | |
| 30 | + } | |
| 31 | + | |
| 32 | +} | |
| 0 | 33 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockInMapper.java
| ... | ... | @@ -2,9 +2,10 @@ package cn.iocoder.yudao.module.erp.dal.mysql.stock; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; | |
| 6 | 6 | import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.in.ErpStockInPageReqVO; |
| 7 | 7 | import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInDO; |
| 8 | +import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockInItemDO; | |
| 8 | 9 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 10 | |
| 10 | 11 | /** |
| ... | ... | @@ -16,14 +17,21 @@ import org.apache.ibatis.annotations.Mapper; |
| 16 | 17 | public interface ErpStockInMapper extends BaseMapperX<ErpStockInDO> { |
| 17 | 18 | |
| 18 | 19 | default PageResult<ErpStockInDO> selectPage(ErpStockInPageReqVO reqVO) { |
| 19 | - return selectPage(reqVO, new LambdaQueryWrapperX<ErpStockInDO>() | |
| 20 | + MPJLambdaWrapperX<ErpStockInDO> query = new MPJLambdaWrapperX<ErpStockInDO>() | |
| 20 | 21 | .eqIfPresent(ErpStockInDO::getNo, reqVO.getNo()) |
| 21 | 22 | .eqIfPresent(ErpStockInDO::getSupplierId, reqVO.getSupplierId()) |
| 22 | 23 | .betweenIfPresent(ErpStockInDO::getInTime, reqVO.getInTime()) |
| 23 | 24 | .eqIfPresent(ErpStockInDO::getStatus, reqVO.getStatus()) |
| 24 | 25 | .likeIfPresent(ErpStockInDO::getRemark, reqVO.getRemark()) |
| 25 | 26 | .eqIfPresent(ErpStockInDO::getCreator, reqVO.getCreator()) |
| 26 | - .orderByDesc(ErpStockInDO::getId)); | |
| 27 | + .orderByDesc(ErpStockInDO::getId); | |
| 28 | + if (reqVO.getWarehouseId() != null || reqVO.getProductId() != null) { | |
| 29 | + query.leftJoin(ErpStockInItemDO.class, ErpStockInItemDO::getInId, ErpStockInDO::getId) | |
| 30 | + .eq(reqVO.getWarehouseId() != null, ErpStockInItemDO::getWarehouseId, reqVO.getWarehouseId()) | |
| 31 | + .eq(reqVO.getProductId() != null, ErpStockInItemDO::getProductId, reqVO.getProductId()) | |
| 32 | + .groupBy(ErpStockInDO::getId); // 避免 1 对多查询,产生相同的 1 | |
| 33 | + } | |
| 34 | + return selectJoinPage(reqVO, ErpStockInDO.class, query); | |
| 27 | 35 | } |
| 28 | 36 | |
| 29 | 37 | } |
| 30 | 38 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java
| ... | ... | @@ -41,6 +41,7 @@ public class ErpProductServiceImpl implements ErpProductService { |
| 41 | 41 | |
| 42 | 42 | @Override |
| 43 | 43 | public Long createProduct(ProductSaveReqVO createReqVO) { |
| 44 | + // TODO 芋艿:校验分类 | |
| 44 | 45 | // 插入 |
| 45 | 46 | ErpProductDO product = BeanUtils.toBean(createReqVO, ErpProductDO.class); |
| 46 | 47 | productMapper.insert(product); |
| ... | ... | @@ -50,6 +51,7 @@ public class ErpProductServiceImpl implements ErpProductService { |
| 50 | 51 | |
| 51 | 52 | @Override |
| 52 | 53 | public void updateProduct(ProductSaveReqVO updateReqVO) { |
| 54 | + // TODO 芋艿:校验分类 | |
| 53 | 55 | // 校验存在 |
| 54 | 56 | validateProductExists(updateReqVO.getId()); |
| 55 | 57 | // 更新 | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpSupplierService.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.erp.service.purchase; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 4 | +import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierPageReqVO; | |
| 5 | +import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierSaveReqVO; | |
| 6 | +import cn.iocoder.yudao.module.erp.dal.dataobject.supplier.ErpSupplierDO; | |
| 7 | +import jakarta.validation.Valid; | |
| 8 | + | |
| 9 | +import java.util.Collection; | |
| 10 | +import java.util.List; | |
| 11 | +import java.util.Map; | |
| 12 | + | |
| 13 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; | |
| 14 | + | |
| 15 | +/** | |
| 16 | + * ERP 供应商 Service 接口 | |
| 17 | + * | |
| 18 | + * @author 芋道源码 | |
| 19 | + */ | |
| 20 | +public interface ErpSupplierService { | |
| 21 | + | |
| 22 | + /** | |
| 23 | + * 创建供应商 | |
| 24 | + * | |
| 25 | + * @param createReqVO 创建信息 | |
| 26 | + * @return 编号 | |
| 27 | + */ | |
| 28 | + Long createSupplier(@Valid ErpSupplierSaveReqVO createReqVO); | |
| 29 | + | |
| 30 | + /** | |
| 31 | + * 更新供应商 | |
| 32 | + * | |
| 33 | + * @param updateReqVO 更新信息 | |
| 34 | + */ | |
| 35 | + void updateSupplier(@Valid ErpSupplierSaveReqVO updateReqVO); | |
| 36 | + | |
| 37 | + /** | |
| 38 | + * 删除供应商 | |
| 39 | + * | |
| 40 | + * @param id 编号 | |
| 41 | + */ | |
| 42 | + void deleteSupplier(Long id); | |
| 43 | + | |
| 44 | + /** | |
| 45 | + * 获得供应商 | |
| 46 | + * | |
| 47 | + * @param id 编号 | |
| 48 | + * @return 供应商 | |
| 49 | + */ | |
| 50 | + ErpSupplierDO getSupplier(Long id); | |
| 51 | + | |
| 52 | + /** | |
| 53 | + * 校验供应商 | |
| 54 | + * | |
| 55 | + * @param id 编号 | |
| 56 | + * @return 供应商 | |
| 57 | + */ | |
| 58 | + ErpSupplierDO validateSupplier(Long id); | |
| 59 | + | |
| 60 | + /** | |
| 61 | + * 获得供应商列表 | |
| 62 | + * | |
| 63 | + * @param ids 编号列表 | |
| 64 | + * @return 供应商列表 | |
| 65 | + */ | |
| 66 | + List<ErpSupplierDO> getSupplierList(Collection<Long> ids); | |
| 67 | + | |
| 68 | + /** | |
| 69 | + * 获得供应商 Map | |
| 70 | + * | |
| 71 | + * @param ids 编号列表 | |
| 72 | + * @return 供应商 Map | |
| 73 | + */ | |
| 74 | + default Map<Long, ErpSupplierDO> getSupplierMap(Collection<Long> ids) { | |
| 75 | + return convertMap(getSupplierList(ids), ErpSupplierDO::getId); | |
| 76 | + } | |
| 77 | + | |
| 78 | + /** | |
| 79 | + * 获得供应商分页 | |
| 80 | + * | |
| 81 | + * @param pageReqVO 分页查询 | |
| 82 | + * @return 供应商分页 | |
| 83 | + */ | |
| 84 | + PageResult<ErpSupplierDO> getSupplierPage(ErpSupplierPageReqVO pageReqVO); | |
| 85 | + | |
| 86 | + /** | |
| 87 | + * 获得指定状态的供应商列表 | |
| 88 | + * | |
| 89 | + * @param status 状态 | |
| 90 | + * @return 供应商列表 | |
| 91 | + */ | |
| 92 | + List<ErpSupplierDO> getSupplierListByStatus(Integer status); | |
| 93 | + | |
| 94 | +} | |
| 0 | 95 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpSupplierServiceImpl.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.erp.service.purchase; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | |
| 6 | +import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierPageReqVO; | |
| 7 | +import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierSaveReqVO; | |
| 8 | +import cn.iocoder.yudao.module.erp.dal.dataobject.supplier.ErpSupplierDO; | |
| 9 | +import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpSupplierMapper; | |
| 10 | +import jakarta.annotation.Resource; | |
| 11 | +import org.springframework.stereotype.Service; | |
| 12 | +import org.springframework.validation.annotation.Validated; | |
| 13 | + | |
| 14 | +import java.util.Collection; | |
| 15 | +import java.util.List; | |
| 16 | + | |
| 17 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | |
| 18 | +import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*; | |
| 19 | + | |
| 20 | +/** | |
| 21 | + * ERP 供应商 Service 实现类 | |
| 22 | + * | |
| 23 | + * @author 芋道源码 | |
| 24 | + */ | |
| 25 | +@Service | |
| 26 | +@Validated | |
| 27 | +public class ErpSupplierServiceImpl implements ErpSupplierService { | |
| 28 | + | |
| 29 | + @Resource | |
| 30 | + private ErpSupplierMapper supplierMapper; | |
| 31 | + | |
| 32 | + @Override | |
| 33 | + public Long createSupplier(ErpSupplierSaveReqVO createReqVO) { | |
| 34 | + ErpSupplierDO supplier = BeanUtils.toBean(createReqVO, ErpSupplierDO.class); | |
| 35 | + supplierMapper.insert(supplier); | |
| 36 | + return supplier.getId(); | |
| 37 | + } | |
| 38 | + | |
| 39 | + @Override | |
| 40 | + public void updateSupplier(ErpSupplierSaveReqVO updateReqVO) { | |
| 41 | + // 校验存在 | |
| 42 | + validateSupplierExists(updateReqVO.getId()); | |
| 43 | + // 更新 | |
| 44 | + ErpSupplierDO updateObj = BeanUtils.toBean(updateReqVO, ErpSupplierDO.class); | |
| 45 | + supplierMapper.updateById(updateObj); | |
| 46 | + } | |
| 47 | + | |
| 48 | + @Override | |
| 49 | + public void deleteSupplier(Long id) { | |
| 50 | + // 校验存在 | |
| 51 | + validateSupplierExists(id); | |
| 52 | + // 删除 | |
| 53 | + supplierMapper.deleteById(id); | |
| 54 | + } | |
| 55 | + | |
| 56 | + private void validateSupplierExists(Long id) { | |
| 57 | + if (supplierMapper.selectById(id) == null) { | |
| 58 | + throw exception(SUPPLIER_NOT_EXISTS); | |
| 59 | + } | |
| 60 | + } | |
| 61 | + | |
| 62 | + @Override | |
| 63 | + public ErpSupplierDO getSupplier(Long id) { | |
| 64 | + return supplierMapper.selectById(id); | |
| 65 | + } | |
| 66 | + | |
| 67 | + @Override | |
| 68 | + public ErpSupplierDO validateSupplier(Long id) { | |
| 69 | + ErpSupplierDO supplier = supplierMapper.selectById(id); | |
| 70 | + if (supplier == null) { | |
| 71 | + throw exception(WAREHOUSE_NOT_EXISTS); | |
| 72 | + } | |
| 73 | + if (CommonStatusEnum.isDisable(supplier.getStatus())) { | |
| 74 | + throw exception(WAREHOUSE_NOT_ENABLE, supplier.getName()); | |
| 75 | + } | |
| 76 | + return supplier; | |
| 77 | + } | |
| 78 | + | |
| 79 | + @Override | |
| 80 | + public List<ErpSupplierDO> getSupplierList(Collection<Long> ids) { | |
| 81 | + return supplierMapper.selectBatchIds(ids); | |
| 82 | + } | |
| 83 | + | |
| 84 | + @Override | |
| 85 | + public PageResult<ErpSupplierDO> getSupplierPage(ErpSupplierPageReqVO pageReqVO) { | |
| 86 | + return supplierMapper.selectPage(pageReqVO); | |
| 87 | + } | |
| 88 | + | |
| 89 | + @Override | |
| 90 | + public List<ErpSupplierDO> getSupplierListByStatus(Integer status) { | |
| 91 | + return supplierMapper.selectListByStatus(status); | |
| 92 | + } | |
| 93 | + | |
| 94 | +} | |
| 0 | 95 | \ No newline at end of file | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java
| ... | ... | @@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockInItemMapper; |
| 12 | 12 | import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockInMapper; |
| 13 | 13 | import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus; |
| 14 | 14 | import cn.iocoder.yudao.module.erp.service.product.ErpProductService; |
| 15 | +import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService; | |
| 15 | 16 | import jakarta.annotation.Resource; |
| 16 | 17 | import org.springframework.stereotype.Service; |
| 17 | 18 | import org.springframework.transaction.annotation.Transactional; |
| ... | ... | @@ -46,13 +47,16 @@ public class ErpStockInServiceImpl implements ErpStockInService { |
| 46 | 47 | private ErpProductService productService; |
| 47 | 48 | @Resource |
| 48 | 49 | private ErpWarehouseService warehouseService; |
| 50 | + @Resource | |
| 51 | + private ErpSupplierService supplierService; | |
| 49 | 52 | |
| 50 | 53 | @Override |
| 51 | 54 | @Transactional(rollbackFor = Exception.class) |
| 52 | 55 | public Long createStockIn(ErpStockInSaveReqVO createReqVO) { |
| 53 | 56 | // 1.1 校验入库项的有效性 |
| 54 | 57 | List<ErpStockInItemDO> stockInItems = validateStockInItems(createReqVO.getItems()); |
| 55 | - // 1.2 TODO 芋艿:校验供应商 | |
| 58 | + // 1.2 校验供应商 | |
| 59 | + supplierService.validateSupplier(createReqVO.getSupplierId()); | |
| 56 | 60 | |
| 57 | 61 | // 2.1 插入入库单 |
| 58 | 62 | ErpStockInDO stockIn = BeanUtils.toBean(createReqVO, ErpStockInDO.class, in -> in |
| ... | ... | @@ -71,7 +75,8 @@ public class ErpStockInServiceImpl implements ErpStockInService { |
| 71 | 75 | public void updateStockIn(ErpStockInSaveReqVO updateReqVO) { |
| 72 | 76 | // 1.1 校验存在 |
| 73 | 77 | validateStockInExists(updateReqVO.getId()); |
| 74 | - // 1.2 TODO 芋艿:校验供应商 | |
| 78 | + // 1.2 校验供应商 | |
| 79 | + supplierService.validateSupplier(updateReqVO.getSupplierId()); | |
| 75 | 80 | // 1.3 校验入库项的有效性 |
| 76 | 81 | List<ErpStockInItemDO> stockInItems = validateStockInItems(updateReqVO.getItems()); |
| 77 | 82 | ... | ... |
yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/supplier/ErpSupplierMapper.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |
| 3 | +<mapper namespace="cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpSupplierMapper"> | |
| 4 | + | |
| 5 | + <!-- | |
| 6 | + 一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。 | |
| 7 | + 无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。 | |
| 8 | + 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 | |
| 9 | + 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ | |
| 10 | + --> | |
| 11 | + | |
| 12 | +</mapper> | |
| 0 | 13 | \ No newline at end of file | ... | ... |
yudao-server/src/main/resources/application-local.yaml
| ... | ... | @@ -188,6 +188,7 @@ logging: |
| 188 | 188 | cn.iocoder.yudao.module.promotion.dal.mysql: debug |
| 189 | 189 | cn.iocoder.yudao.module.statistics.dal.mysql: debug |
| 190 | 190 | cn.iocoder.yudao.module.crm.dal.mysql: debug |
| 191 | + cn.iocoder.yudao.module.erp.dal.mysql: debug | |
| 191 | 192 | org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 |
| 192 | 193 | |
| 193 | 194 | debug: false | ... | ... |