提交基础采购
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package com.klp.erp.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseOrderItemBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseOrderItemVo;
|
||||
import com.klp.erp.service.IErpPurchaseOrderItemService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/erp/purchaseOrderItem")
|
||||
public class ErpPurchaseOrderItemController extends BaseController {
|
||||
|
||||
private final IErpPurchaseOrderItemService orderItemService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<ErpPurchaseOrderItemVo> list(ErpPurchaseOrderItemBo bo, PageQuery pageQuery) {
|
||||
return orderItemService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "采购订单明细", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(ErpPurchaseOrderItemBo bo, HttpServletResponse response) {
|
||||
List<ErpPurchaseOrderItemVo> list = orderItemService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "采购订单明细", ErpPurchaseOrderItemVo.class, response);
|
||||
}
|
||||
|
||||
@GetMapping("/{itemId}")
|
||||
public R<ErpPurchaseOrderItemVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long itemId) {
|
||||
return R.ok(orderItemService.queryById(itemId));
|
||||
}
|
||||
|
||||
@Log(title = "采购订单明细", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit
|
||||
@PostMapping
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpPurchaseOrderItemBo bo) {
|
||||
return toAjax(orderItemService.insertByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "采购订单明细", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpPurchaseOrderItemBo bo) {
|
||||
return toAjax(orderItemService.updateByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "采购订单明细", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{itemIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] itemIds) {
|
||||
return toAjax(orderItemService.deleteWithValidByIds(Arrays.asList(itemIds), true));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.klp.erp.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseReceiptBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReceiptVo;
|
||||
import com.klp.erp.service.IErpPurchaseReceiptService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/erp/purchaseReceipt")
|
||||
public class ErpPurchaseReceiptController extends BaseController {
|
||||
|
||||
private final IErpPurchaseReceiptService receiptService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<ErpPurchaseReceiptVo> list(ErpPurchaseReceiptBo bo, PageQuery pageQuery) {
|
||||
return receiptService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "采购收货记录", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(ErpPurchaseReceiptBo bo, HttpServletResponse response) {
|
||||
List<ErpPurchaseReceiptVo> list = receiptService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "采购收货记录", ErpPurchaseReceiptVo.class, response);
|
||||
}
|
||||
|
||||
@GetMapping("/{receiptId}")
|
||||
public R<ErpPurchaseReceiptVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long receiptId) {
|
||||
return R.ok(receiptService.queryById(receiptId));
|
||||
}
|
||||
|
||||
@Log(title = "采购收货记录", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit
|
||||
@PostMapping
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpPurchaseReceiptBo bo) {
|
||||
return toAjax(receiptService.insertByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "采购收货记录", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpPurchaseReceiptBo bo) {
|
||||
return toAjax(receiptService.updateByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "采购收货记录", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{receiptIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] receiptIds) {
|
||||
return toAjax(receiptService.deleteWithValidByIds(Arrays.asList(receiptIds), true));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.klp.erp.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.erp.mapper.ErpPurchaseReportMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/erp/purchaseReport")
|
||||
public class ErpPurchaseReportController extends BaseController {
|
||||
|
||||
private final ErpPurchaseReportMapper reportMapper;
|
||||
|
||||
@Log(title = "采购汇总报表", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/summary")
|
||||
public R<Map<String, Object>> summary(@RequestParam(required = false) String beginTime,
|
||||
@RequestParam(required = false) String endTime) {
|
||||
BigDecimal totalAmount = reportMapper.sumTotalAmount(beginTime, endTime);
|
||||
List<Map<String, Object>> bySupplier = reportMapper.sumAmountBySupplier(beginTime, endTime);
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("totalAmount", totalAmount);
|
||||
result.put("bySupplier", bySupplier);
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
@Log(title = "采购价格趋势", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/trend")
|
||||
public R<List<Map<String, Object>>> priceTrend(@RequestParam(required = false) String beginTime,
|
||||
@RequestParam(required = false) String endTime) {
|
||||
return R.ok(reportMapper.selectPriceTrend(beginTime, endTime));
|
||||
}
|
||||
|
||||
@Log(title = "供应商绩效", businessType = BusinessType.OTHER)
|
||||
@GetMapping("/supplierQuality")
|
||||
public R<List<Map<String, Object>>> supplierQuality(@RequestParam(required = false) String beginTime,
|
||||
@RequestParam(required = false) String endTime) {
|
||||
return R.ok(reportMapper.selectSupplierQuality(beginTime, endTime));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.klp.erp.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.erp.domain.bo.PurchaseRequirementAnalyzeBo;
|
||||
import com.klp.erp.domain.vo.PurchaseRequirementVo;
|
||||
import com.klp.erp.service.IErpPurchaseRequirementService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/erp/purchaseRequirement")
|
||||
public class ErpPurchaseRequirementController extends BaseController {
|
||||
|
||||
private final IErpPurchaseRequirementService purchaseRequirementService;
|
||||
|
||||
@Log(title = "采购需求分析", businessType = BusinessType.OTHER)
|
||||
@PostMapping("/analyze")
|
||||
public R<List<PurchaseRequirementVo>> analyze(@Validated @RequestBody PurchaseRequirementAnalyzeBo bo) {
|
||||
return R.ok(purchaseRequirementService.analyze(bo));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.klp.erp.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseReturnBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReturnVo;
|
||||
import com.klp.erp.service.IErpPurchaseReturnService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/erp/purchaseReturn")
|
||||
public class ErpPurchaseReturnController extends BaseController {
|
||||
|
||||
private final IErpPurchaseReturnService returnService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<ErpPurchaseReturnVo> list(ErpPurchaseReturnBo bo, PageQuery pageQuery) {
|
||||
return returnService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "采购退货", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(ErpPurchaseReturnBo bo, HttpServletResponse response) {
|
||||
List<ErpPurchaseReturnVo> list = returnService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "采购退货", ErpPurchaseReturnVo.class, response);
|
||||
}
|
||||
|
||||
@GetMapping("/{returnId}")
|
||||
public R<ErpPurchaseReturnVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long returnId) {
|
||||
return R.ok(returnService.queryById(returnId));
|
||||
}
|
||||
|
||||
@Log(title = "采购退货", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit
|
||||
@PostMapping
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpPurchaseReturnBo bo) {
|
||||
return toAjax(returnService.insertByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "采购退货", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpPurchaseReturnBo bo) {
|
||||
return toAjax(returnService.updateByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "采购退货", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{returnIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] returnIds) {
|
||||
return toAjax(returnService.deleteWithValidByIds(Arrays.asList(returnIds), true));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.klp.erp.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseReturnItemBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReturnItemVo;
|
||||
import com.klp.erp.service.IErpPurchaseReturnItemService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/erp/purchaseReturnItem")
|
||||
public class ErpPurchaseReturnItemController extends BaseController {
|
||||
|
||||
private final IErpPurchaseReturnItemService returnItemService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<ErpPurchaseReturnItemVo> list(ErpPurchaseReturnItemBo bo, PageQuery pageQuery) {
|
||||
return returnItemService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "采购退货明细", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(ErpPurchaseReturnItemBo bo, HttpServletResponse response) {
|
||||
List<ErpPurchaseReturnItemVo> list = returnItemService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "采购退货明细", ErpPurchaseReturnItemVo.class, response);
|
||||
}
|
||||
|
||||
@GetMapping("/{returnItemId}")
|
||||
public R<ErpPurchaseReturnItemVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long returnItemId) {
|
||||
return R.ok(returnItemService.queryById(returnItemId));
|
||||
}
|
||||
|
||||
@Log(title = "采购退货明细", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit
|
||||
@PostMapping
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpPurchaseReturnItemBo bo) {
|
||||
return toAjax(returnItemService.insertByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "采购退货明细", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpPurchaseReturnItemBo bo) {
|
||||
return toAjax(returnItemService.updateByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "采购退货明细", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{returnItemIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] returnItemIds) {
|
||||
return toAjax(returnItemService.deleteWithValidByIds(Arrays.asList(returnItemIds), true));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package com.klp.erp.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.erp.domain.bo.ErpSupplierBo;
|
||||
import com.klp.erp.domain.vo.ErpSupplierVo;
|
||||
import com.klp.erp.service.IErpSupplierService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/erp/supplier")
|
||||
public class ErpSupplierController extends BaseController {
|
||||
|
||||
private final IErpSupplierService supplierService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<ErpSupplierVo> list(ErpSupplierBo bo, PageQuery pageQuery) {
|
||||
return supplierService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "供应商档案", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(ErpSupplierBo bo, HttpServletResponse response) {
|
||||
List<ErpSupplierVo> list = supplierService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "供应商档案", ErpSupplierVo.class, response);
|
||||
}
|
||||
|
||||
@GetMapping("/{supplierId}")
|
||||
public R<ErpSupplierVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long supplierId) {
|
||||
return R.ok(supplierService.queryById(supplierId));
|
||||
}
|
||||
|
||||
@Log(title = "供应商档案", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit
|
||||
@PostMapping
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpSupplierBo bo) {
|
||||
return toAjax(supplierService.insertByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "供应商档案", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpSupplierBo bo) {
|
||||
return toAjax(supplierService.updateByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "供应商档案", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{supplierIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] supplierIds) {
|
||||
return toAjax(supplierService.deleteWithValidByIds(Arrays.asList(supplierIds), true));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
package com.klp.erp.controller;
|
||||
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.erp.domain.bo.ErpSupplierPriceBo;
|
||||
import com.klp.erp.domain.bo.MaterialTypeQueryBo;
|
||||
import com.klp.erp.domain.vo.ErpSupplierPriceVo;
|
||||
import com.klp.erp.domain.vo.MaterialTypeOptionVo;
|
||||
import com.klp.erp.service.IErpSupplierPriceService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/erp/supplierPrice")
|
||||
public class ErpSupplierPriceController extends BaseController {
|
||||
|
||||
private final IErpSupplierPriceService supplierPriceService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<ErpSupplierPriceVo> list(ErpSupplierPriceBo bo, PageQuery pageQuery) {
|
||||
return supplierPriceService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
@Log(title = "供应商价格", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(ErpSupplierPriceBo bo, HttpServletResponse response) {
|
||||
List<ErpSupplierPriceVo> list = supplierPriceService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "供应商价格", ErpSupplierPriceVo.class, response);
|
||||
}
|
||||
|
||||
@GetMapping("/{priceId}")
|
||||
public R<ErpSupplierPriceVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long priceId) {
|
||||
return R.ok(supplierPriceService.queryById(priceId));
|
||||
}
|
||||
|
||||
@Log(title = "供应商价格", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit
|
||||
@PostMapping
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpSupplierPriceBo bo) {
|
||||
return toAjax(supplierPriceService.insertByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "供应商价格", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpSupplierPriceBo bo) {
|
||||
return toAjax(supplierPriceService.updateByBo(bo));
|
||||
}
|
||||
|
||||
@Log(title = "供应商价格", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{priceIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] priceIds) {
|
||||
return toAjax(supplierPriceService.deleteWithValidByIds(Arrays.asList(priceIds), true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 物料类型下拉
|
||||
*/
|
||||
@GetMapping("/material-types")
|
||||
public R<List<MaterialTypeOptionVo>> materialTypes(MaterialTypeQueryBo bo) {
|
||||
return R.ok(supplierPriceService.queryMaterialTypeOptions(bo));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购订单明细对象 erp_purchase_order_item
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_purchase_order_item")
|
||||
public class ErpPurchaseOrderItem extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "item_id")
|
||||
private Long itemId;
|
||||
|
||||
private Long orderId;
|
||||
|
||||
private String materialTypeCode;
|
||||
|
||||
private String specification;
|
||||
|
||||
private BigDecimal quantity;
|
||||
|
||||
private BigDecimal unitPrice;
|
||||
|
||||
private BigDecimal amount;
|
||||
|
||||
private BigDecimal currentStock;
|
||||
|
||||
private BigDecimal onTheWay;
|
||||
|
||||
private BigDecimal salesDemand;
|
||||
|
||||
private BigDecimal suggestPurchase;
|
||||
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 采购收货记录表 erp_purchase_receipt
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_purchase_receipt")
|
||||
public class ErpPurchaseReceipt extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "receipt_id")
|
||||
private Long receiptId;
|
||||
|
||||
private Long orderId;
|
||||
|
||||
private Long itemId;
|
||||
|
||||
private BigDecimal receivedQty;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date receiptTime;
|
||||
|
||||
private String qualityResult;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_purchase_requirement")
|
||||
public class ErpPurchaseRequirement extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "req_id")
|
||||
private Long reqId;
|
||||
|
||||
private String materialTypeCode;
|
||||
|
||||
private String specification;
|
||||
|
||||
private BigDecimal salesDemand;
|
||||
|
||||
private BigDecimal productStock;
|
||||
|
||||
private BigDecimal rawStock;
|
||||
|
||||
private BigDecimal rawStockConv;
|
||||
|
||||
private BigDecimal onTheWay;
|
||||
|
||||
private BigDecimal onTheWayConv;
|
||||
|
||||
private BigDecimal suggestPurchaseQty;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 采购退货主表 erp_purchase_return
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_purchase_return")
|
||||
public class ErpPurchaseReturn extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "return_id")
|
||||
private Long returnId;
|
||||
|
||||
private Long orderId;
|
||||
|
||||
private String returnType;
|
||||
|
||||
private String reason;
|
||||
|
||||
private Integer status;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购退货明细表 erp_purchase_return_item
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_purchase_return_item")
|
||||
public class ErpPurchaseReturnItem extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "return_item_id")
|
||||
private Long returnItemId;
|
||||
|
||||
private Long returnId;
|
||||
|
||||
private Long itemId;
|
||||
|
||||
private BigDecimal returnQty;
|
||||
|
||||
private String photos;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
|
||||
44
klp-erp/src/main/java/com/klp/erp/domain/ErpSupplier.java
Normal file
44
klp-erp/src/main/java/com/klp/erp/domain/ErpSupplier.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 供应商档案对象 erp_supplier
|
||||
*
|
||||
* @author klp
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_supplier")
|
||||
public class ErpSupplier extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "supplier_id")
|
||||
private Long supplierId;
|
||||
|
||||
private String supplierCode;
|
||||
|
||||
private String name;
|
||||
|
||||
private String type;
|
||||
|
||||
private String creditRating;
|
||||
|
||||
private String contactPerson;
|
||||
|
||||
private String contactPhone;
|
||||
|
||||
private String address;
|
||||
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.klp.erp.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 供应商价格对象 erp_supplier_price
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("erp_supplier_price")
|
||||
public class ErpSupplierPrice extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "price_id")
|
||||
private Long priceId;
|
||||
|
||||
private Long supplierId;
|
||||
|
||||
private String materialTypeCode;
|
||||
|
||||
private String specification;
|
||||
|
||||
private BigDecimal price;
|
||||
|
||||
private Date validFrom;
|
||||
|
||||
private Date validTo;
|
||||
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购订单明细业务对象
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ErpPurchaseOrderItemBo extends BaseEntity {
|
||||
|
||||
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
|
||||
private Long itemId;
|
||||
|
||||
@NotNull(message = "订单ID不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private Long orderId;
|
||||
|
||||
@NotBlank(message = "物料类型编码不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private String materialTypeCode;
|
||||
|
||||
private String specification;
|
||||
|
||||
@NotNull(message = "采购数量不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private BigDecimal quantity;
|
||||
|
||||
private BigDecimal unitPrice;
|
||||
|
||||
private BigDecimal amount;
|
||||
|
||||
private BigDecimal currentStock;
|
||||
|
||||
private BigDecimal onTheWay;
|
||||
|
||||
private BigDecimal salesDemand;
|
||||
|
||||
private BigDecimal suggestPurchase;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ErpPurchaseReceiptBo extends BaseEntity {
|
||||
|
||||
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
|
||||
private Long receiptId;
|
||||
|
||||
@NotNull(message = "订单ID不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private Long orderId;
|
||||
|
||||
@NotNull(message = "订单明细ID不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private Long itemId;
|
||||
|
||||
@NotNull(message = "收货数量不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private BigDecimal receivedQty;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date receiptTime;
|
||||
|
||||
private String qualityResult;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ErpPurchaseReturnBo extends BaseEntity {
|
||||
|
||||
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
|
||||
private Long returnId;
|
||||
|
||||
@NotNull(message = "订单ID不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private Long orderId;
|
||||
|
||||
private String returnType;
|
||||
|
||||
private String reason;
|
||||
|
||||
private Integer status;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ErpPurchaseReturnItemBo extends BaseEntity {
|
||||
|
||||
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
|
||||
private Long returnItemId;
|
||||
|
||||
@NotNull(message = "退货单ID不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private Long returnId;
|
||||
|
||||
@NotNull(message = "订单明细ID不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private Long itemId;
|
||||
|
||||
@NotNull(message = "退货数量不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private BigDecimal returnQty;
|
||||
|
||||
private String photos;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 供应商档案业务对象
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ErpSupplierBo extends BaseEntity {
|
||||
|
||||
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
|
||||
private Long supplierId;
|
||||
|
||||
@NotBlank(message = "供应商编码不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private String supplierCode;
|
||||
|
||||
@NotBlank(message = "供应商名称不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private String name;
|
||||
|
||||
private String type;
|
||||
|
||||
private String creditRating;
|
||||
|
||||
private String contactPerson;
|
||||
|
||||
private String contactPhone;
|
||||
|
||||
private String address;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 供应商价格业务对象
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ErpSupplierPriceBo extends BaseEntity {
|
||||
|
||||
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
|
||||
private Long priceId;
|
||||
|
||||
@NotNull(message = "供应商不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private Long supplierId;
|
||||
|
||||
@NotBlank(message = "物料类型不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private String materialTypeCode;
|
||||
|
||||
private String specification;
|
||||
|
||||
@NotNull(message = "价格不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private BigDecimal price;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date validFrom;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date validTo;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 物料类型查询条件
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class MaterialTypeQueryBo extends BaseEntity {
|
||||
|
||||
private String materialTypeCode;
|
||||
|
||||
private String specification;
|
||||
|
||||
private Long supplierId;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class PurchaseRequirementAnalyzeBo {
|
||||
|
||||
/**
|
||||
* 产品与原料转换关系
|
||||
*/
|
||||
@NotEmpty(message = "转换映射关系不能为空")
|
||||
@Valid
|
||||
private List<PurchaseRequirementMappingBo> mappings;
|
||||
|
||||
/**
|
||||
* 是否持久化分析结果
|
||||
*/
|
||||
private Boolean persistResult = Boolean.FALSE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.klp.erp.domain.bo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class PurchaseRequirementMappingBo {
|
||||
|
||||
@NotNull(message = "产品ID不能为空")
|
||||
private Long productId;
|
||||
|
||||
private String productCode;
|
||||
|
||||
@NotNull(message = "原料ID不能为空")
|
||||
private Long rawMaterialId;
|
||||
|
||||
private String rawMaterialCode;
|
||||
|
||||
/**
|
||||
* 原料转成品的转换率(0.95 表示 1 吨原料 ≈ 0.95 吨成品)
|
||||
*/
|
||||
@NotNull(message = "转换率不能为空")
|
||||
private BigDecimal conversionRate;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.klp.erp.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class ProductDemandDTO {
|
||||
private Long productId;
|
||||
private BigDecimal demandQuantity;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.klp.erp.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class ProductStockDTO {
|
||||
private Long productId;
|
||||
private Long coilCount;
|
||||
private BigDecimal totalWeight;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.klp.erp.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RawStockDTO {
|
||||
private Long rawMaterialId;
|
||||
private Long coilCount;
|
||||
private BigDecimal totalWeight;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.klp.erp.domain.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RawTransitDTO {
|
||||
private Long rawMaterialId;
|
||||
private BigDecimal quantity;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 采购订单明细视图对象
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpPurchaseOrderItemVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty("明细ID")
|
||||
private Long itemId;
|
||||
|
||||
@ExcelProperty("订单ID")
|
||||
private Long orderId;
|
||||
|
||||
@ExcelProperty("物料类型编码")
|
||||
private String materialTypeCode;
|
||||
|
||||
@ExcelProperty("规格")
|
||||
private String specification;
|
||||
|
||||
@ExcelProperty("采购数量")
|
||||
private BigDecimal quantity;
|
||||
|
||||
@ExcelProperty("单价")
|
||||
private BigDecimal unitPrice;
|
||||
|
||||
@ExcelProperty("金额")
|
||||
private BigDecimal amount;
|
||||
|
||||
@ExcelProperty("当前库存")
|
||||
private BigDecimal currentStock;
|
||||
|
||||
@ExcelProperty("在途数量")
|
||||
private BigDecimal onTheWay;
|
||||
|
||||
@ExcelProperty("销售需求")
|
||||
private BigDecimal salesDemand;
|
||||
|
||||
@ExcelProperty("建议采购数量")
|
||||
private BigDecimal suggestPurchase;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpPurchaseReceiptVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty("收货记录ID")
|
||||
private Long receiptId;
|
||||
|
||||
@ExcelProperty("订单ID")
|
||||
private Long orderId;
|
||||
|
||||
@ExcelProperty("订单明细ID")
|
||||
private Long itemId;
|
||||
|
||||
@ExcelProperty("收货数量")
|
||||
private BigDecimal receivedQty;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@ExcelProperty("收货时间")
|
||||
private Date receiptTime;
|
||||
|
||||
@ExcelProperty("质检结果")
|
||||
private String qualityResult;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpPurchaseReturnItemVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty("退货明细ID")
|
||||
private Long returnItemId;
|
||||
|
||||
@ExcelProperty("退货单ID")
|
||||
private Long returnId;
|
||||
|
||||
@ExcelProperty("订单明细ID")
|
||||
private Long itemId;
|
||||
|
||||
@ExcelProperty("退货数量")
|
||||
private BigDecimal returnQty;
|
||||
|
||||
@ExcelProperty("问题照片")
|
||||
private String photos;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpPurchaseReturnVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty("退货单ID")
|
||||
private Long returnId;
|
||||
|
||||
@ExcelProperty("订单ID")
|
||||
private Long orderId;
|
||||
|
||||
@ExcelProperty("退货类型")
|
||||
private String returnType;
|
||||
|
||||
@ExcelProperty("退货原因")
|
||||
private String reason;
|
||||
|
||||
@ExcelProperty("退货状态")
|
||||
private Integer status;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 供应商价格视图对象
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpSupplierPriceVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty("价格ID")
|
||||
private Long priceId;
|
||||
|
||||
@ExcelProperty("供应商ID")
|
||||
private Long supplierId;
|
||||
|
||||
@ExcelProperty("物料类型编码")
|
||||
private String materialTypeCode;
|
||||
|
||||
@ExcelProperty("规格")
|
||||
private String specification;
|
||||
|
||||
@ExcelProperty("价格")
|
||||
private BigDecimal price;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@ExcelProperty("生效日期")
|
||||
private Date validFrom;
|
||||
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@ExcelProperty("失效日期")
|
||||
private Date validTo;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 供应商档案视图对象
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ErpSupplierVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ExcelProperty("供应商ID")
|
||||
private Long supplierId;
|
||||
|
||||
@ExcelProperty("供应商编码")
|
||||
private String supplierCode;
|
||||
|
||||
@ExcelProperty("供应商名称")
|
||||
private String name;
|
||||
|
||||
@ExcelProperty("供应商类型")
|
||||
private String type;
|
||||
|
||||
@ExcelProperty("信用等级")
|
||||
private String creditRating;
|
||||
|
||||
@ExcelProperty("联系人")
|
||||
private String contactPerson;
|
||||
|
||||
@ExcelProperty("联系电话")
|
||||
private String contactPhone;
|
||||
|
||||
@ExcelProperty("地址")
|
||||
private String address;
|
||||
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 物料类型下拉视图
|
||||
*/
|
||||
@Data
|
||||
public class MaterialTypeOptionVo {
|
||||
|
||||
private String materialTypeCode;
|
||||
|
||||
private String specification;
|
||||
|
||||
private Long supplierId;
|
||||
|
||||
private String supplierName;
|
||||
|
||||
private java.math.BigDecimal latestPrice;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class PurchaseRequirementRawDetailVo {
|
||||
private Long rawMaterialId;
|
||||
private String rawMaterialCode;
|
||||
private String rawMaterialName;
|
||||
private BigDecimal conversionRate;
|
||||
private BigDecimal stockWeight;
|
||||
private Long stockCoilCount;
|
||||
private BigDecimal inTransitWeight;
|
||||
private BigDecimal pendingWeight;
|
||||
private BigDecimal convertedStock;
|
||||
private BigDecimal convertedInTransit;
|
||||
private BigDecimal convertedPending;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.klp.erp.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class PurchaseRequirementVo {
|
||||
private Long productId;
|
||||
private String productCode;
|
||||
private String productName;
|
||||
private String specification;
|
||||
|
||||
private BigDecimal salesDemand = BigDecimal.ZERO;
|
||||
|
||||
private BigDecimal productStockWeight = BigDecimal.ZERO;
|
||||
private Long productStockCoilCount = 0L;
|
||||
|
||||
private BigDecimal rawStockWeight = BigDecimal.ZERO;
|
||||
private Long rawStockCoilCount = 0L;
|
||||
private BigDecimal rawStockConverted = BigDecimal.ZERO;
|
||||
|
||||
private BigDecimal inTransitWeight = BigDecimal.ZERO;
|
||||
private BigDecimal inTransitConverted = BigDecimal.ZERO;
|
||||
|
||||
private BigDecimal pendingWeight = BigDecimal.ZERO;
|
||||
private BigDecimal pendingConverted = BigDecimal.ZERO;
|
||||
|
||||
private BigDecimal suggestedPurchase = BigDecimal.ZERO;
|
||||
|
||||
private List<PurchaseRequirementRawDetailVo> rawDetails = new ArrayList<>();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.klp.erp.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 采购订单状态枚举
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum PurchaseOrderStatus {
|
||||
|
||||
DRAFT(0),
|
||||
EXECUTING(1),
|
||||
PARTIAL_ARRIVAL(2),
|
||||
COMPLETED(3),
|
||||
CANCELLED(4);
|
||||
|
||||
private final int code;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchaseOrderItem;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseOrderItemVo;
|
||||
|
||||
/**
|
||||
* 采购订单明细Mapper接口
|
||||
*/
|
||||
public interface ErpPurchaseOrderItemMapper extends BaseMapperPlus<ErpPurchaseOrderItemMapper, ErpPurchaseOrderItem, ErpPurchaseOrderItemVo> {
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchaseReceipt;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReceiptVo;
|
||||
|
||||
public interface ErpPurchaseReceiptMapper extends BaseMapperPlus<ErpPurchaseReceiptMapper, ErpPurchaseReceipt, ErpPurchaseReceiptVo> {
|
||||
|
||||
java.math.BigDecimal sumQualifiedQtyByItem(Long itemId);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface ErpPurchaseReportMapper {
|
||||
|
||||
BigDecimal sumTotalAmount(@Param("beginTime") String beginTime,
|
||||
@Param("endTime") String endTime);
|
||||
|
||||
List<Map<String, Object>> sumAmountBySupplier(@Param("beginTime") String beginTime,
|
||||
@Param("endTime") String endTime);
|
||||
|
||||
List<Map<String, Object>> selectPriceTrend(@Param("beginTime") String beginTime,
|
||||
@Param("endTime") String endTime);
|
||||
|
||||
List<Map<String, Object>> selectSupplierQuality(@Param("beginTime") String beginTime,
|
||||
@Param("endTime") String endTime);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchaseRequirement;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
|
||||
public interface ErpPurchaseRequirementMapper extends BaseMapperPlus<ErpPurchaseRequirementMapper, ErpPurchaseRequirement, ErpPurchaseRequirement> {
|
||||
|
||||
@Delete("DELETE FROM erp_purchase_requirement")
|
||||
void deleteAll();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchaseReturnItem;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReturnItemVo;
|
||||
|
||||
public interface ErpPurchaseReturnItemMapper extends BaseMapperPlus<ErpPurchaseReturnItemMapper, ErpPurchaseReturnItem, ErpPurchaseReturnItemVo> {
|
||||
|
||||
java.math.BigDecimal sumAllReturnQtyByItem(Long itemId);
|
||||
|
||||
java.math.BigDecimal sumCompletedReturnQtyByItem(Long itemId);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpPurchaseReturn;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReturnVo;
|
||||
|
||||
public interface ErpPurchaseReturnMapper extends BaseMapperPlus<ErpPurchaseReturnMapper, ErpPurchaseReturn, ErpPurchaseReturnVo> {
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpSupplier;
|
||||
import com.klp.erp.domain.vo.ErpSupplierVo;
|
||||
|
||||
/**
|
||||
* 供应商档案Mapper接口
|
||||
*/
|
||||
public interface ErpSupplierMapper extends BaseMapperPlus<ErpSupplierMapper, ErpSupplier, ErpSupplierVo> {
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import com.klp.erp.domain.ErpSupplierPrice;
|
||||
import com.klp.erp.domain.bo.MaterialTypeQueryBo;
|
||||
import com.klp.erp.domain.vo.ErpSupplierPriceVo;
|
||||
import com.klp.erp.domain.vo.MaterialTypeOptionVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 供应商价格Mapper接口
|
||||
*/
|
||||
public interface ErpSupplierPriceMapper extends BaseMapperPlus<ErpSupplierPriceMapper, ErpSupplierPrice, ErpSupplierPriceVo> {
|
||||
|
||||
List<MaterialTypeOptionVo> selectMaterialTypeOptions(MaterialTypeQueryBo bo);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.klp.erp.mapper;
|
||||
|
||||
import com.klp.erp.domain.dto.ProductDemandDTO;
|
||||
import com.klp.erp.domain.dto.ProductStockDTO;
|
||||
import com.klp.erp.domain.dto.RawStockDTO;
|
||||
import com.klp.erp.domain.dto.RawTransitDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface PurchaseRequirementCalcMapper {
|
||||
|
||||
List<ProductDemandDTO> selectProductDemand();
|
||||
|
||||
List<ProductStockDTO> selectProductStock();
|
||||
|
||||
List<RawStockDTO> selectRawStock();
|
||||
|
||||
List<RawTransitDTO> selectRawInTransit();
|
||||
|
||||
List<RawTransitDTO> selectRawPending();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.klp.erp.service;
|
||||
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseOrderItemBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseOrderItemVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 采购订单明细Service接口
|
||||
*/
|
||||
public interface IErpPurchaseOrderItemService {
|
||||
|
||||
ErpPurchaseOrderItemVo queryById(Long itemId);
|
||||
|
||||
TableDataInfo<ErpPurchaseOrderItemVo> queryPageList(ErpPurchaseOrderItemBo bo, PageQuery pageQuery);
|
||||
|
||||
List<ErpPurchaseOrderItemVo> queryList(ErpPurchaseOrderItemBo bo);
|
||||
|
||||
Boolean insertByBo(ErpPurchaseOrderItemBo bo);
|
||||
|
||||
Boolean updateByBo(ErpPurchaseOrderItemBo bo);
|
||||
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.klp.erp.service;
|
||||
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseReceiptBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReceiptVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public interface IErpPurchaseReceiptService {
|
||||
|
||||
ErpPurchaseReceiptVo queryById(Long receiptId);
|
||||
|
||||
TableDataInfo<ErpPurchaseReceiptVo> queryPageList(ErpPurchaseReceiptBo bo, PageQuery pageQuery);
|
||||
|
||||
List<ErpPurchaseReceiptVo> queryList(ErpPurchaseReceiptBo bo);
|
||||
|
||||
Boolean insertByBo(ErpPurchaseReceiptBo bo);
|
||||
|
||||
Boolean updateByBo(ErpPurchaseReceiptBo bo);
|
||||
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.klp.erp.service;
|
||||
|
||||
import com.klp.erp.domain.bo.PurchaseRequirementAnalyzeBo;
|
||||
import com.klp.erp.domain.vo.PurchaseRequirementVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IErpPurchaseRequirementService {
|
||||
|
||||
List<PurchaseRequirementVo> analyze(PurchaseRequirementAnalyzeBo bo);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.klp.erp.service;
|
||||
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseReturnItemBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReturnItemVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public interface IErpPurchaseReturnItemService {
|
||||
|
||||
ErpPurchaseReturnItemVo queryById(Long returnItemId);
|
||||
|
||||
TableDataInfo<ErpPurchaseReturnItemVo> queryPageList(ErpPurchaseReturnItemBo bo, PageQuery pageQuery);
|
||||
|
||||
List<ErpPurchaseReturnItemVo> queryList(ErpPurchaseReturnItemBo bo);
|
||||
|
||||
Boolean insertByBo(ErpPurchaseReturnItemBo bo);
|
||||
|
||||
Boolean updateByBo(ErpPurchaseReturnItemBo bo);
|
||||
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.klp.erp.service;
|
||||
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseReturnBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReturnVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public interface IErpPurchaseReturnService {
|
||||
|
||||
ErpPurchaseReturnVo queryById(Long returnId);
|
||||
|
||||
TableDataInfo<ErpPurchaseReturnVo> queryPageList(ErpPurchaseReturnBo bo, PageQuery pageQuery);
|
||||
|
||||
List<ErpPurchaseReturnVo> queryList(ErpPurchaseReturnBo bo);
|
||||
|
||||
Boolean insertByBo(ErpPurchaseReturnBo bo);
|
||||
|
||||
Boolean updateByBo(ErpPurchaseReturnBo bo);
|
||||
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.klp.erp.service;
|
||||
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.erp.domain.bo.ErpSupplierPriceBo;
|
||||
import com.klp.erp.domain.bo.MaterialTypeQueryBo;
|
||||
import com.klp.erp.domain.vo.ErpSupplierPriceVo;
|
||||
import com.klp.erp.domain.vo.MaterialTypeOptionVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 供应商价格Service接口
|
||||
*/
|
||||
public interface IErpSupplierPriceService {
|
||||
|
||||
ErpSupplierPriceVo queryById(Long priceId);
|
||||
|
||||
TableDataInfo<ErpSupplierPriceVo> queryPageList(ErpSupplierPriceBo bo, PageQuery pageQuery);
|
||||
|
||||
List<ErpSupplierPriceVo> queryList(ErpSupplierPriceBo bo);
|
||||
|
||||
Boolean insertByBo(ErpSupplierPriceBo bo);
|
||||
|
||||
Boolean updateByBo(ErpSupplierPriceBo bo);
|
||||
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
List<MaterialTypeOptionVo> queryMaterialTypeOptions(MaterialTypeQueryBo bo);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.klp.erp.service;
|
||||
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.erp.domain.bo.ErpSupplierBo;
|
||||
import com.klp.erp.domain.vo.ErpSupplierVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 供应商档案Service接口
|
||||
*/
|
||||
public interface IErpSupplierService {
|
||||
|
||||
ErpSupplierVo queryById(Long supplierId);
|
||||
|
||||
TableDataInfo<ErpSupplierVo> queryPageList(ErpSupplierBo bo, PageQuery pageQuery);
|
||||
|
||||
List<ErpSupplierVo> queryList(ErpSupplierBo bo);
|
||||
|
||||
Boolean insertByBo(ErpSupplierBo bo);
|
||||
|
||||
Boolean updateByBo(ErpSupplierBo bo);
|
||||
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
package com.klp.erp.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.erp.domain.ErpPurchaseOrderItem;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseOrderItemBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseOrderItemVo;
|
||||
import com.klp.erp.mapper.ErpPurchaseOrderItemMapper;
|
||||
import com.klp.erp.service.IErpPurchaseOrderItemService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class ErpPurchaseOrderItemServiceImpl implements IErpPurchaseOrderItemService {
|
||||
|
||||
private final ErpPurchaseOrderItemMapper baseMapper;
|
||||
|
||||
@Override
|
||||
public ErpPurchaseOrderItemVo queryById(Long itemId) {
|
||||
return baseMapper.selectVoById(itemId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<ErpPurchaseOrderItemVo> queryPageList(ErpPurchaseOrderItemBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<ErpPurchaseOrderItem> lqw = buildQueryWrapper(bo);
|
||||
Page<ErpPurchaseOrderItemVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpPurchaseOrderItemVo> queryList(ErpPurchaseOrderItemBo bo) {
|
||||
LambdaQueryWrapper<ErpPurchaseOrderItem> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<ErpPurchaseOrderItem> buildQueryWrapper(ErpPurchaseOrderItemBo bo) {
|
||||
LambdaQueryWrapper<ErpPurchaseOrderItem> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getOrderId() != null, ErpPurchaseOrderItem::getOrderId, bo.getOrderId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getMaterialTypeCode()), ErpPurchaseOrderItem::getMaterialTypeCode, bo.getMaterialTypeCode());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getSpecification()), ErpPurchaseOrderItem::getSpecification, bo.getSpecification());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean insertByBo(ErpPurchaseOrderItemBo bo) {
|
||||
ErpPurchaseOrderItem add = BeanUtil.toBean(bo, ErpPurchaseOrderItem.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setItemId(add.getItemId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByBo(ErpPurchaseOrderItemBo bo) {
|
||||
ErpPurchaseOrderItem update = BeanUtil.toBean(bo, ErpPurchaseOrderItem.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
private void validEntityBeforeSave(ErpPurchaseOrderItem entity) {
|
||||
// TODO: 数量/金额校验
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if (isValid) {
|
||||
// TODO: 删除校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
package com.klp.erp.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.exception.ServiceException;
|
||||
import com.klp.erp.domain.ErpPurchaseOrderItem;
|
||||
import com.klp.erp.domain.ErpPurchaseReceipt;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseReceiptBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReceiptVo;
|
||||
import com.klp.erp.mapper.ErpPurchaseOrderItemMapper;
|
||||
import com.klp.erp.mapper.ErpPurchaseReceiptMapper;
|
||||
import com.klp.erp.service.IErpPurchaseOrderService;
|
||||
import com.klp.erp.service.IErpPurchaseReceiptService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ErpPurchaseReceiptServiceImpl implements IErpPurchaseReceiptService {
|
||||
|
||||
private final ErpPurchaseReceiptMapper baseMapper;
|
||||
private final ErpPurchaseOrderItemMapper orderItemMapper;
|
||||
private final IErpPurchaseOrderService orderService;
|
||||
|
||||
@Override
|
||||
public ErpPurchaseReceiptVo queryById(Long receiptId) {
|
||||
return baseMapper.selectVoById(receiptId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<ErpPurchaseReceiptVo> queryPageList(ErpPurchaseReceiptBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<ErpPurchaseReceipt> lqw = buildQueryWrapper(bo);
|
||||
Page<ErpPurchaseReceiptVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpPurchaseReceiptVo> queryList(ErpPurchaseReceiptBo bo) {
|
||||
LambdaQueryWrapper<ErpPurchaseReceipt> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<ErpPurchaseReceipt> buildQueryWrapper(ErpPurchaseReceiptBo bo) {
|
||||
LambdaQueryWrapper<ErpPurchaseReceipt> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getOrderId() != null, ErpPurchaseReceipt::getOrderId, bo.getOrderId());
|
||||
lqw.eq(bo.getItemId() != null, ErpPurchaseReceipt::getItemId, bo.getItemId());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean insertByBo(ErpPurchaseReceiptBo bo) {
|
||||
ErpPurchaseReceipt add = BeanUtil.toBean(bo, ErpPurchaseReceipt.class);
|
||||
validateReceiptQuantity(null, bo);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setReceiptId(add.getReceiptId());
|
||||
if (isQualified(bo.getQualityResult())) {
|
||||
orderService.refreshOrderStatus(bo.getOrderId());
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByBo(ErpPurchaseReceiptBo bo) {
|
||||
ErpPurchaseReceipt origin = baseMapper.selectById(bo.getReceiptId());
|
||||
if (origin == null) {
|
||||
throw new ServiceException("收货记录不存在");
|
||||
}
|
||||
ErpPurchaseReceipt update = BeanUtil.toBean(bo, ErpPurchaseReceipt.class);
|
||||
validateReceiptQuantity(origin, bo);
|
||||
boolean flag = baseMapper.updateById(update) > 0;
|
||||
if (flag) {
|
||||
orderService.refreshOrderStatus(origin.getOrderId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
private void validateReceiptQuantity(ErpPurchaseReceipt origin, ErpPurchaseReceiptBo bo) {
|
||||
ErpPurchaseOrderItem item = orderItemMapper.selectById(bo.getItemId());
|
||||
if (item == null) {
|
||||
throw new ServiceException("订单明细不存在");
|
||||
}
|
||||
if (!item.getOrderId().equals(bo.getOrderId())) {
|
||||
throw new ServiceException("订单与明细不匹配");
|
||||
}
|
||||
BigDecimal ordered = safe(item.getQuantity());
|
||||
BigDecimal existingQualified = safe(baseMapper.sumQualifiedQtyByItem(bo.getItemId()));
|
||||
BigDecimal originQualified = origin != null && isQualified(origin.getQualityResult())
|
||||
? safe(origin.getReceivedQty()) : BigDecimal.ZERO;
|
||||
BigDecimal newQualified = isQualified(bo.getQualityResult()) ? safe(bo.getReceivedQty()) : BigDecimal.ZERO;
|
||||
BigDecimal effective = existingQualified.subtract(originQualified).add(newQualified);
|
||||
if (effective.compareTo(ordered) > 0) {
|
||||
throw new ServiceException("收货数量不能超过订单明细数量");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
List<ErpPurchaseReceipt> receipts = baseMapper.selectBatchIds(ids);
|
||||
boolean flag = baseMapper.deleteBatchIds(ids) > 0;
|
||||
if (flag && receipts != null && !receipts.isEmpty()) {
|
||||
Set<Long> orderIds = new HashSet<>();
|
||||
for (ErpPurchaseReceipt receipt : receipts) {
|
||||
orderIds.add(receipt.getOrderId());
|
||||
}
|
||||
orderIds.forEach(orderService::refreshOrderStatus);
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
private boolean isQualified(String qualityResult) {
|
||||
if (qualityResult == null) {
|
||||
return true;
|
||||
}
|
||||
String upper = qualityResult.trim().toUpperCase();
|
||||
return !"NG".equals(upper) && !"不合格".equals(qualityResult.trim());
|
||||
}
|
||||
|
||||
private BigDecimal safe(BigDecimal value) {
|
||||
return value == null ? BigDecimal.ZERO : value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,235 @@
|
||||
package com.klp.erp.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.klp.domain.WmsProduct;
|
||||
import com.klp.domain.WmsRawMaterial;
|
||||
import com.klp.erp.domain.ErpPurchaseRequirement;
|
||||
import com.klp.erp.domain.bo.PurchaseRequirementAnalyzeBo;
|
||||
import com.klp.erp.domain.bo.PurchaseRequirementMappingBo;
|
||||
import com.klp.erp.domain.dto.ProductDemandDTO;
|
||||
import com.klp.erp.domain.dto.ProductStockDTO;
|
||||
import com.klp.erp.domain.dto.RawStockDTO;
|
||||
import com.klp.erp.domain.dto.RawTransitDTO;
|
||||
import com.klp.erp.domain.vo.PurchaseRequirementRawDetailVo;
|
||||
import com.klp.erp.domain.vo.PurchaseRequirementVo;
|
||||
import com.klp.erp.mapper.ErpPurchaseRequirementMapper;
|
||||
import com.klp.erp.mapper.PurchaseRequirementCalcMapper;
|
||||
import com.klp.erp.service.IErpPurchaseRequirementService;
|
||||
import com.klp.mapper.WmsProductMapper;
|
||||
import com.klp.mapper.WmsRawMaterialMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ErpPurchaseRequirementServiceImpl implements IErpPurchaseRequirementService {
|
||||
|
||||
private static final BigDecimal ZERO = BigDecimal.ZERO;
|
||||
|
||||
private final PurchaseRequirementCalcMapper calcMapper;
|
||||
private final ErpPurchaseRequirementMapper requirementMapper;
|
||||
private final WmsProductMapper productMapper;
|
||||
private final WmsRawMaterialMapper rawMaterialMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public List<PurchaseRequirementVo> analyze(PurchaseRequirementAnalyzeBo bo) {
|
||||
Map<Long, List<PurchaseRequirementMappingBo>> mappingByProduct = bo.getMappings()
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(PurchaseRequirementMappingBo::getProductId));
|
||||
|
||||
Set<Long> productIds = new HashSet<>(mappingByProduct.keySet());
|
||||
Set<Long> rawIds = bo.getMappings().stream().map(PurchaseRequirementMappingBo::getRawMaterialId).collect(Collectors.toSet());
|
||||
|
||||
Map<Long, BigDecimal> demandMap = toBigDecimalMap(streamOf(calcMapper.selectProductDemand()),
|
||||
ProductDemandDTO::getProductId, ProductDemandDTO::getDemandQuantity);
|
||||
|
||||
productIds.addAll(demandMap.keySet());
|
||||
|
||||
Map<Long, ProductStockDTO> productStockMap = streamOf(calcMapper.selectProductStock())
|
||||
.collect(Collectors.toMap(ProductStockDTO::getProductId, Function.identity(), (a, b) -> a));
|
||||
|
||||
Map<Long, RawStockDTO> rawStockMap = streamOf(calcMapper.selectRawStock())
|
||||
.collect(Collectors.toMap(RawStockDTO::getRawMaterialId, Function.identity(), (a, b) -> a));
|
||||
|
||||
Map<Long, BigDecimal> rawInTransitMap = toBigDecimalMap(streamOf(calcMapper.selectRawInTransit()),
|
||||
RawTransitDTO::getRawMaterialId, RawTransitDTO::getQuantity);
|
||||
Map<Long, BigDecimal> rawPendingMap = toBigDecimalMap(streamOf(calcMapper.selectRawPending()),
|
||||
RawTransitDTO::getRawMaterialId, RawTransitDTO::getQuantity);
|
||||
|
||||
Map<Long, WmsProduct> productInfoMap = loadProducts(productIds);
|
||||
Map<Long, WmsRawMaterial> rawInfoMap = loadRawMaterials(rawIds);
|
||||
|
||||
List<PurchaseRequirementVo> result = productIds.stream()
|
||||
.sorted()
|
||||
.map(productId -> buildRequirement(productId,
|
||||
mappingByProduct.getOrDefault(productId, Collections.emptyList()),
|
||||
demandMap,
|
||||
productStockMap,
|
||||
rawStockMap,
|
||||
rawInTransitMap,
|
||||
rawPendingMap,
|
||||
productInfoMap,
|
||||
rawInfoMap))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (Boolean.TRUE.equals(bo.getPersistResult())) {
|
||||
persistRequirements(result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private PurchaseRequirementVo buildRequirement(Long productId,
|
||||
List<PurchaseRequirementMappingBo> mappings,
|
||||
Map<Long, BigDecimal> demandMap,
|
||||
Map<Long, ProductStockDTO> productStockMap,
|
||||
Map<Long, RawStockDTO> rawStockMap,
|
||||
Map<Long, BigDecimal> rawInTransitMap,
|
||||
Map<Long, BigDecimal> rawPendingMap,
|
||||
Map<Long, WmsProduct> productInfoMap,
|
||||
Map<Long, WmsRawMaterial> rawInfoMap) {
|
||||
PurchaseRequirementVo vo = new PurchaseRequirementVo();
|
||||
vo.setProductId(productId);
|
||||
WmsProduct product = productInfoMap.get(productId);
|
||||
if (product != null) {
|
||||
vo.setProductCode(product.getProductCode());
|
||||
vo.setProductName(product.getProductName());
|
||||
vo.setSpecification(product.getSpecification());
|
||||
}
|
||||
vo.setSalesDemand(safeNumber(demandMap.get(productId)));
|
||||
|
||||
ProductStockDTO stockDTO = productStockMap.get(productId);
|
||||
if (stockDTO != null) {
|
||||
vo.setProductStockWeight(safeNumber(stockDTO.getTotalWeight()));
|
||||
vo.setProductStockCoilCount(Optional.ofNullable(stockDTO.getCoilCount()).orElse(0L));
|
||||
}
|
||||
|
||||
BigDecimal rawStockWeightSum = ZERO;
|
||||
long rawCoilCountSum = 0L;
|
||||
BigDecimal rawStockConvertedSum = ZERO;
|
||||
BigDecimal inTransitWeightSum = ZERO;
|
||||
BigDecimal inTransitConvertedSum = ZERO;
|
||||
BigDecimal pendingWeightSum = ZERO;
|
||||
BigDecimal pendingConvertedSum = ZERO;
|
||||
|
||||
for (PurchaseRequirementMappingBo mapping : mappings) {
|
||||
WmsRawMaterial rawMaterial = rawInfoMap.get(mapping.getRawMaterialId());
|
||||
if (rawMaterial == null) {
|
||||
continue;
|
||||
}
|
||||
PurchaseRequirementRawDetailVo detail = new PurchaseRequirementRawDetailVo();
|
||||
detail.setRawMaterialId(rawMaterial.getRawMaterialId());
|
||||
detail.setRawMaterialCode(rawMaterial.getRawMaterialCode());
|
||||
detail.setRawMaterialName(rawMaterial.getRawMaterialName());
|
||||
detail.setConversionRate(mapping.getConversionRate());
|
||||
|
||||
RawStockDTO rawStock = rawStockMap.get(rawMaterial.getRawMaterialId());
|
||||
BigDecimal stockWeight = rawStock == null ? ZERO : safeNumber(rawStock.getTotalWeight());
|
||||
long stockCoilCount = rawStock == null ? 0L : Optional.ofNullable(rawStock.getCoilCount()).orElse(0L);
|
||||
BigDecimal convertedStock = stockWeight.multiply(mapping.getConversionRate()).setScale(4, RoundingMode.HALF_UP);
|
||||
|
||||
BigDecimal inTransitWeight = safeNumber(rawInTransitMap.get(rawMaterial.getRawMaterialId()));
|
||||
BigDecimal convertedTransit = inTransitWeight.multiply(mapping.getConversionRate()).setScale(4, RoundingMode.HALF_UP);
|
||||
|
||||
BigDecimal pendingWeight = safeNumber(rawPendingMap.get(rawMaterial.getRawMaterialId()));
|
||||
BigDecimal convertedPending = pendingWeight.multiply(mapping.getConversionRate()).setScale(4, RoundingMode.HALF_UP);
|
||||
|
||||
detail.setStockWeight(stockWeight);
|
||||
detail.setStockCoilCount(stockCoilCount);
|
||||
detail.setConvertedStock(convertedStock);
|
||||
detail.setInTransitWeight(inTransitWeight);
|
||||
detail.setConvertedInTransit(convertedTransit);
|
||||
detail.setPendingWeight(pendingWeight);
|
||||
detail.setConvertedPending(convertedPending);
|
||||
vo.getRawDetails().add(detail);
|
||||
|
||||
rawStockWeightSum = rawStockWeightSum.add(stockWeight);
|
||||
rawCoilCountSum += stockCoilCount;
|
||||
rawStockConvertedSum = rawStockConvertedSum.add(convertedStock);
|
||||
inTransitWeightSum = inTransitWeightSum.add(inTransitWeight);
|
||||
inTransitConvertedSum = inTransitConvertedSum.add(convertedTransit);
|
||||
pendingWeightSum = pendingWeightSum.add(pendingWeight);
|
||||
pendingConvertedSum = pendingConvertedSum.add(convertedPending);
|
||||
}
|
||||
|
||||
vo.setRawStockWeight(rawStockWeightSum);
|
||||
vo.setRawStockCoilCount(rawCoilCountSum);
|
||||
vo.setRawStockConverted(rawStockConvertedSum);
|
||||
vo.setInTransitWeight(inTransitWeightSum);
|
||||
vo.setInTransitConverted(inTransitConvertedSum);
|
||||
vo.setPendingWeight(pendingWeightSum);
|
||||
vo.setPendingConverted(pendingConvertedSum);
|
||||
|
||||
BigDecimal suggestion = vo.getSalesDemand()
|
||||
.subtract(vo.getProductStockWeight())
|
||||
.subtract(vo.getRawStockConverted())
|
||||
.subtract(vo.getInTransitConverted())
|
||||
.subtract(vo.getPendingConverted());
|
||||
if (suggestion.signum() < 0) {
|
||||
suggestion = ZERO;
|
||||
}
|
||||
vo.setSuggestedPurchase(suggestion.setScale(4, RoundingMode.HALF_UP));
|
||||
return vo;
|
||||
}
|
||||
|
||||
private <T> Stream<T> streamOf(List<T> list) {
|
||||
return list == null ? Stream.empty() : list.stream();
|
||||
}
|
||||
|
||||
private BigDecimal safeNumber(BigDecimal value) {
|
||||
return value == null ? ZERO : value;
|
||||
}
|
||||
|
||||
private Map<Long, WmsProduct> loadProducts(Set<Long> ids) {
|
||||
if (CollectionUtils.isEmpty(ids)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
List<WmsProduct> list = productMapper.selectBatchIds(new ArrayList<>(ids));
|
||||
return list == null ? Collections.emptyMap() : list.stream()
|
||||
.collect(Collectors.toMap(WmsProduct::getProductId, Function.identity(), (a, b) -> a));
|
||||
}
|
||||
|
||||
private Map<Long, WmsRawMaterial> loadRawMaterials(Set<Long> ids) {
|
||||
if (CollectionUtils.isEmpty(ids)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
List<WmsRawMaterial> list = rawMaterialMapper.selectBatchIds(new ArrayList<>(ids));
|
||||
return list == null ? Collections.emptyMap() : list.stream()
|
||||
.collect(Collectors.toMap(WmsRawMaterial::getRawMaterialId, Function.identity(), (a, b) -> a));
|
||||
}
|
||||
|
||||
private void persistRequirements(List<PurchaseRequirementVo> vos) {
|
||||
requirementMapper.deleteAll();
|
||||
for (PurchaseRequirementVo vo : vos) {
|
||||
ErpPurchaseRequirement entity = new ErpPurchaseRequirement();
|
||||
entity.setMaterialTypeCode(vo.getProductCode());
|
||||
entity.setSpecification(vo.getSpecification());
|
||||
entity.setSalesDemand(vo.getSalesDemand());
|
||||
entity.setProductStock(vo.getProductStockWeight());
|
||||
entity.setRawStock(vo.getRawStockWeight());
|
||||
entity.setRawStockConv(vo.getRawStockConverted());
|
||||
entity.setOnTheWay(vo.getInTransitWeight());
|
||||
entity.setOnTheWayConv(vo.getInTransitConverted());
|
||||
entity.setSuggestPurchaseQty(vo.getSuggestedPurchase());
|
||||
entity.setRemark("自动分析");
|
||||
requirementMapper.insert(entity);
|
||||
}
|
||||
}
|
||||
|
||||
private <T> Map<Long, BigDecimal> toBigDecimalMap(Stream<T> stream,
|
||||
Function<T, Long> keyExtractor,
|
||||
Function<T, BigDecimal> valueExtractor) {
|
||||
return stream == null ? Collections.emptyMap()
|
||||
: stream.filter(Objects::nonNull)
|
||||
.collect(Collectors.toMap(keyExtractor, valueExtractor, BigDecimal::add));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
package com.klp.erp.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.exception.ServiceException;
|
||||
import com.klp.erp.domain.ErpPurchaseReturn;
|
||||
import com.klp.erp.domain.ErpPurchaseReturnItem;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseReturnItemBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReturnItemVo;
|
||||
import com.klp.erp.mapper.ErpPurchaseReceiptMapper;
|
||||
import com.klp.erp.mapper.ErpPurchaseReturnItemMapper;
|
||||
import com.klp.erp.mapper.ErpPurchaseReturnMapper;
|
||||
import com.klp.erp.service.IErpPurchaseOrderService;
|
||||
import com.klp.erp.service.IErpPurchaseReturnItemService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ErpPurchaseReturnItemServiceImpl implements IErpPurchaseReturnItemService {
|
||||
|
||||
private final ErpPurchaseReturnItemMapper baseMapper;
|
||||
private final ErpPurchaseReceiptMapper receiptMapper;
|
||||
private final ErpPurchaseReturnMapper returnMapper;
|
||||
private final IErpPurchaseOrderService orderService;
|
||||
|
||||
@Override
|
||||
public ErpPurchaseReturnItemVo queryById(Long returnItemId) {
|
||||
return baseMapper.selectVoById(returnItemId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<ErpPurchaseReturnItemVo> queryPageList(ErpPurchaseReturnItemBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<ErpPurchaseReturnItem> lqw = buildQueryWrapper(bo);
|
||||
Page<ErpPurchaseReturnItemVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpPurchaseReturnItemVo> queryList(ErpPurchaseReturnItemBo bo) {
|
||||
LambdaQueryWrapper<ErpPurchaseReturnItem> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<ErpPurchaseReturnItem> buildQueryWrapper(ErpPurchaseReturnItemBo bo) {
|
||||
LambdaQueryWrapper<ErpPurchaseReturnItem> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getReturnId() != null, ErpPurchaseReturnItem::getReturnId, bo.getReturnId());
|
||||
lqw.eq(bo.getItemId() != null, ErpPurchaseReturnItem::getItemId, bo.getItemId());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean insertByBo(ErpPurchaseReturnItemBo bo) {
|
||||
ErpPurchaseReturnItem add = BeanUtil.toBean(bo, ErpPurchaseReturnItem.class);
|
||||
validateReturnQuantity(null, bo);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setReturnItemId(add.getReturnItemId());
|
||||
Long orderId = resolveOrderId(add.getReturnId());
|
||||
if (orderId != null) {
|
||||
orderService.refreshOrderStatus(orderId);
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByBo(ErpPurchaseReturnItemBo bo) {
|
||||
ErpPurchaseReturnItem origin = baseMapper.selectById(bo.getReturnItemId());
|
||||
if (origin == null) {
|
||||
return false;
|
||||
}
|
||||
ErpPurchaseReturnItem update = BeanUtil.toBean(bo, ErpPurchaseReturnItem.class);
|
||||
validateReturnQuantity(origin, bo);
|
||||
boolean flag = baseMapper.updateById(update) > 0;
|
||||
if (flag) {
|
||||
Long orderId = resolveOrderId(update.getReturnId());
|
||||
if (orderId != null) {
|
||||
orderService.refreshOrderStatus(orderId);
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
private void validateReturnQuantity(ErpPurchaseReturnItem origin, ErpPurchaseReturnItemBo bo) {
|
||||
BigDecimal received = safe(receiptMapper.sumQualifiedQtyByItem(bo.getItemId()));
|
||||
BigDecimal existing = safe(baseMapper.sumAllReturnQtyByItem(bo.getItemId()));
|
||||
BigDecimal originQty = origin == null ? BigDecimal.ZERO : safe(origin.getReturnQty());
|
||||
BigDecimal effective = existing.subtract(originQty).add(safe(bo.getReturnQty()));
|
||||
if (effective.compareTo(received) > 0) {
|
||||
throw new ServiceException("退货数量不能超过已收货数量");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
List<ErpPurchaseReturnItem> items = baseMapper.selectBatchIds(ids);
|
||||
boolean flag = baseMapper.deleteBatchIds(ids) > 0;
|
||||
if (flag && items != null && !items.isEmpty()) {
|
||||
Set<Long> orderIds = new HashSet<>();
|
||||
for (ErpPurchaseReturnItem item : items) {
|
||||
Long orderId = resolveOrderId(item.getReturnId());
|
||||
if (orderId != null) {
|
||||
orderIds.add(orderId);
|
||||
}
|
||||
}
|
||||
orderIds.forEach(orderService::refreshOrderStatus);
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
private Long resolveOrderId(Long returnId) {
|
||||
if (returnId == null) {
|
||||
return null;
|
||||
}
|
||||
ErpPurchaseReturn purchaseReturn = returnMapper.selectById(returnId);
|
||||
return purchaseReturn == null ? null : purchaseReturn.getOrderId();
|
||||
}
|
||||
|
||||
private BigDecimal safe(BigDecimal value) {
|
||||
return value == null ? BigDecimal.ZERO : value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.klp.erp.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.erp.domain.ErpPurchaseReturn;
|
||||
import com.klp.erp.domain.bo.ErpPurchaseReturnBo;
|
||||
import com.klp.erp.domain.vo.ErpPurchaseReturnVo;
|
||||
import com.klp.erp.mapper.ErpPurchaseReturnMapper;
|
||||
import com.klp.erp.service.IErpPurchaseOrderService;
|
||||
import com.klp.erp.service.IErpPurchaseReturnService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ErpPurchaseReturnServiceImpl implements IErpPurchaseReturnService {
|
||||
|
||||
private final ErpPurchaseReturnMapper baseMapper;
|
||||
private final IErpPurchaseOrderService orderService;
|
||||
|
||||
@Override
|
||||
public ErpPurchaseReturnVo queryById(Long returnId) {
|
||||
return baseMapper.selectVoById(returnId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<ErpPurchaseReturnVo> queryPageList(ErpPurchaseReturnBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<ErpPurchaseReturn> lqw = buildQueryWrapper(bo);
|
||||
Page<ErpPurchaseReturnVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpPurchaseReturnVo> queryList(ErpPurchaseReturnBo bo) {
|
||||
LambdaQueryWrapper<ErpPurchaseReturn> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<ErpPurchaseReturn> buildQueryWrapper(ErpPurchaseReturnBo bo) {
|
||||
LambdaQueryWrapper<ErpPurchaseReturn> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getOrderId() != null, ErpPurchaseReturn::getOrderId, bo.getOrderId());
|
||||
lqw.eq(bo.getStatus() != null, ErpPurchaseReturn::getStatus, bo.getStatus());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean insertByBo(ErpPurchaseReturnBo bo) {
|
||||
ErpPurchaseReturn add = BeanUtil.toBean(bo, ErpPurchaseReturn.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setReturnId(add.getReturnId());
|
||||
if (Objects.equals(add.getStatus(), 1)) {
|
||||
orderService.refreshOrderStatus(add.getOrderId());
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByBo(ErpPurchaseReturnBo bo) {
|
||||
ErpPurchaseReturn update = BeanUtil.toBean(bo, ErpPurchaseReturn.class);
|
||||
validEntityBeforeSave(update);
|
||||
boolean flag = baseMapper.updateById(update) > 0;
|
||||
if (flag && Objects.equals(update.getStatus(), 1)) {
|
||||
orderService.refreshOrderStatus(update.getOrderId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
private void validEntityBeforeSave(ErpPurchaseReturn entity) {
|
||||
// TODO: 校验退货状态流转
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if (isValid) {
|
||||
// TODO: 校验是否允许删除
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.klp.erp.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.erp.domain.ErpSupplierPrice;
|
||||
import com.klp.erp.domain.bo.ErpSupplierPriceBo;
|
||||
import com.klp.erp.domain.bo.MaterialTypeQueryBo;
|
||||
import com.klp.erp.domain.vo.ErpSupplierPriceVo;
|
||||
import com.klp.erp.domain.vo.MaterialTypeOptionVo;
|
||||
import com.klp.erp.mapper.ErpSupplierPriceMapper;
|
||||
import com.klp.erp.service.IErpSupplierPriceService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class ErpSupplierPriceServiceImpl implements IErpSupplierPriceService {
|
||||
|
||||
private final ErpSupplierPriceMapper baseMapper;
|
||||
|
||||
@Override
|
||||
public ErpSupplierPriceVo queryById(Long priceId) {
|
||||
return baseMapper.selectVoById(priceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<ErpSupplierPriceVo> queryPageList(ErpSupplierPriceBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<ErpSupplierPrice> lqw = buildQueryWrapper(bo);
|
||||
Page<ErpSupplierPriceVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpSupplierPriceVo> queryList(ErpSupplierPriceBo bo) {
|
||||
LambdaQueryWrapper<ErpSupplierPrice> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<ErpSupplierPrice> buildQueryWrapper(ErpSupplierPriceBo bo) {
|
||||
LambdaQueryWrapper<ErpSupplierPrice> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getSupplierId() != null, ErpSupplierPrice::getSupplierId, bo.getSupplierId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getMaterialTypeCode()), ErpSupplierPrice::getMaterialTypeCode, bo.getMaterialTypeCode());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getSpecification()), ErpSupplierPrice::getSpecification, bo.getSpecification());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean insertByBo(ErpSupplierPriceBo bo) {
|
||||
ErpSupplierPrice add = BeanUtil.toBean(bo, ErpSupplierPrice.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setPriceId(add.getPriceId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByBo(ErpSupplierPriceBo bo) {
|
||||
ErpSupplierPrice update = BeanUtil.toBean(bo, ErpSupplierPrice.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
private void validEntityBeforeSave(ErpSupplierPrice entity) {
|
||||
// TODO: 唯一性/有效期校验
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if (isValid) {
|
||||
// TODO: 删除前校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MaterialTypeOptionVo> queryMaterialTypeOptions(MaterialTypeQueryBo bo) {
|
||||
return baseMapper.selectMaterialTypeOptions(bo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.klp.erp.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.erp.domain.ErpSupplier;
|
||||
import com.klp.erp.domain.bo.ErpSupplierBo;
|
||||
import com.klp.erp.domain.vo.ErpSupplierVo;
|
||||
import com.klp.erp.mapper.ErpSupplierMapper;
|
||||
import com.klp.erp.service.IErpSupplierService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class ErpSupplierServiceImpl implements IErpSupplierService {
|
||||
|
||||
private final ErpSupplierMapper baseMapper;
|
||||
|
||||
@Override
|
||||
public ErpSupplierVo queryById(Long supplierId) {
|
||||
return baseMapper.selectVoById(supplierId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<ErpSupplierVo> queryPageList(ErpSupplierBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<ErpSupplier> lqw = buildQueryWrapper(bo);
|
||||
Page<ErpSupplierVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ErpSupplierVo> queryList(ErpSupplierBo bo) {
|
||||
LambdaQueryWrapper<ErpSupplier> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<ErpSupplier> buildQueryWrapper(ErpSupplierBo bo) {
|
||||
LambdaQueryWrapper<ErpSupplier> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getSupplierCode()), ErpSupplier::getSupplierCode, bo.getSupplierCode());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getName()), ErpSupplier::getName, bo.getName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getType()), ErpSupplier::getType, bo.getType());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getCreditRating()), ErpSupplier::getCreditRating, bo.getCreditRating());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean insertByBo(ErpSupplierBo bo) {
|
||||
ErpSupplier add = BeanUtil.toBean(bo, ErpSupplier.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setSupplierId(add.getSupplierId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateByBo(ErpSupplierBo bo) {
|
||||
ErpSupplier update = BeanUtil.toBean(bo, ErpSupplier.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
private void validEntityBeforeSave(ErpSupplier entity) {
|
||||
// TODO: 唯一性校验
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if (isValid) {
|
||||
// TODO: 删除校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user