package net.kingborn.erp.bc.command;
import net.kingborn.core.command.BaseCommand;
import net.kingborn.core.command.Command;
import net.kingborn.core.command.Param;
import net.kingborn.core.exception.Assert;
import net.kingborn.core.exception.BizException;
import net.kingborn.core.util.StrKit;
import net.kingborn.erp.bc.model.Purchase;
import net.kingborn.erp.bc.service.PurchaseService;
import net.kingborn.erp.constant.Define;
import net.kingborn.erp.fc.model.AccountRecord;
import net.kingborn.erp.fc.service.AccountRecordService;
import net.kingborn.erp.fc.service.PayableService;
import net.kingborn.erp.uc.model.Product;
import net.kingborn.erp.uc.model.Supplier;
import net.kingborn.erp.uc.model.Warehouse;
import net.kingborn.erp.uc.service.ProductService;
import net.kingborn.erp.uc.service.SettlementAccountService;
import net.kingborn.erp.uc.service.SupplierService;
import net.kingborn.erp.uc.service.WarehouseService;
import net.kingborn.erp.wc.model.IssueProduct;
import net.kingborn.erp.wc.service.IssueProductService;
import net.kingborn.erp.wc.service.StockRecordService;
import net.kingborn.erp.wc.service.StockService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
/**
* 购货单保存
*/
@Command
public class CPurchaseSave extends BaseCommand {
@Autowired
private PurchaseService purchaseService;
@Autowired
private IssueProductService issueProductService;
@Autowired
private AccountRecordService accountRecordService;
@Autowired
private SettlementAccountService settlementAccountService;
@Autowired
private ProductService productService;
@Autowired
private WarehouseService warehouseService;
@Autowired
private SupplierService supplierService;
@Autowired
private StockService stockService;
@Autowired
private PayableService payableService;
@Param(required = true)
private Purchase purchase;
@Param(defaultValue = "[]")
private List<IssueProduct> productList;
@Param(defaultValue = "[]")
private List<AccountRecord> accountList;
private Purchase persistedPurchase;
@Override
protected void init() throws Exception {
}
@Override
protected void doCommand() throws Exception {
// 校验数据
Assert.notBlank(purchase.getSupplierId(), "供应商ID不能为空!");
Supplier supplier = supplierService.getById(purchase.getSupplierId());
Assert.notNull(supplier, "ID为【" + purchase.getSupplierId() + "】的供应商不存在!");
Assert.notFalse(Define.validatePurchaseType(purchase.getType()), "类型不正确!");
// 计算
if (StrKit.isBlank(purchase.getId())) {
persistedPurchase = new Purchase();
persistedPurchase.setType(purchase.getType());
// TODO 校验编码是否合法
validatePurchaseCode(purchase.getCode());
persistedPurchase.setCode(purchase.getCode());
persistedPurchase.setChecked(false);
} else {
persistedPurchase = purchaseService.getById(purchase.getId());
Assert.notNull(persistedPurchase, "ID为【" + purchase.getId() + "】的购货单不存在!");
// 删除原来的商品
issueProductService.deleteByBusiness(purchase.getId());
// 删除原来的账户
accountRecordService.deleteByBusiness(purchase.getId());
}
persistedPurchase.setSupplierId(purchase.getSupplierId());
persistedPurchase.setIssueDate(purchase.getIssueDate());
persistedPurchase.setCode(purchase.getCode());
persistedPurchase.setQuantity(getPurchaseQuantity());
persistedPurchase.setDiscountAmount(purchase.getDiscountAmount());
persistedPurchase.setAmount(purchase.getAmount());
persistedPurchase.setPreferentialRate(purchase.getPreferentialRate());
persistedPurchase.setPreferentialAmount(purchase.getPreferentialAmount());
persistedPurchase.setPreferredAmount(purchase.getPreferredAmount());
persistedPurchase.setCurrentAmount(purchase.getCurrentAmount());
persistedPurchase.setDebtAmount(purchase.getDebtAmount());
persistedPurchase.setContracts(purchase.getContracts());
persistedPurchase.setStatus(Define.PURCHASE_STATUS_UNPAID);
persistedPurchase.setListerId(purchase.getListerId());
purchaseService.saveOrUpdate(persistedPurchase);
// 新增商品
addProductList();
// 新增账户
String accountType = persistedPurchase.getType().equals(Define.BUSINESS_TYPE_PURCHASE_BUY) ?
Define.ACCOUNT_RECORD_TYPE_OUT : Define.ACCOUNT_RECORD_TYPE_IN;
for (AccountRecord record : accountList) {
record.setAmount(persistedPurchase.getCurrentAmount());
}
accountRecordService.addRecordList(accountList, accountType, persistedPurchase.getIssueDate(), persistedPurchase.getType(), persistedPurchase.getId());
// 处理应付账款
handlePayable();
data.put("purchase", persistedPurchase);
}
/**
* 处理应付账款
*/
private void handlePayable() {
if (StrKit.notBlank(purchase.getId())) {
// 删除原来的应收账款记录
payableService.deleteByBusiness(purchase.getId());
}
if (Define.BUSINESS_TYPE_PURCHASE_BUY.equals(persistedPurchase.getType())) {
payableService.businessAdd(persistedPurchase.getSupplierId(), persistedPurchase.getIssueDate(),
Define.BUSINESS_TYPE_PURCHASE_BUY, persistedPurchase.getId(), persistedPurchase.getDebtAmount(), 0);
} else { // 销退
payableService.businessAdd(persistedPurchase.getSupplierId(), persistedPurchase.getIssueDate(),
Define.BUSINESS_TYPE_PURCHASE_REFUND, persistedPurchase.getId(), - persistedPurchase.getDebtAmount(), 0);
}
}
/**
* 校验单据编号是否合法
*
* @param code
*/
private void validatePurchaseCode(String code) {
Purchase purchase = purchaseService.findByCode(code);
if (purchase != null) {
throw new BizException("单据编号为【" + code + "】的购货单已经存在!");
}
}
/**
* 获取总数量
*
* @return
*/
private Double getPurchaseQuantity() {
double quantity = 0.0d;
for (IssueProduct product : productList) {
quantity += product.getQuantity();
}
return quantity;
}
/**
* 新增商品列表
*/
private void addProductList() {
if (productList == null || productList.size() == 0) return;
List<IssueProduct> persistedIssueProductList = new ArrayList<>();
IssueProduct persistedIssueProduct;
for (IssueProduct issueProduct : productList) {
Assert.notBlank(issueProduct.getProductId(), "商品ID不能为空!");
Product product = productService.getById(issueProduct.getProductId());
Assert.notNull(product, "ID为【" + issueProduct.getProductId() + "】的商品不存在!");
Assert.notBlank(issueProduct.getWarehouseId(), "仓库ID不能为空!");
Warehouse warehouse = warehouseService.getById(issueProduct.getWarehouseId());
Assert.notNull(warehouse, "ID为【" + issueProduct.getWarehouseId() + "】的仓库不存在!");
persistedIssueProduct = new IssueProduct();
persistedIssueProduct.setCode(issueProduct.getCode());
persistedIssueProduct.setIssueDate(persistedPurchase.getIssueDate());
persistedIssueProduct.setBusinessType(persistedPurchase.getType());
persistedIssueProduct.setBusinessId(persistedPurchase.getId());
persistedIssueProduct.setProductId(product.getId());
persistedIssueProduct.setWarehouseId(warehou
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
精博ERP(进销存SCM版,完全开源)是基于后端SpringBoot+MyBatis框架,PC前端Vue+ElementUI框架,微信小程序打造的全套ERP系统。立志为中小企业提供开源好用的ERP软件,目前专注进销存+财务功能。
资源推荐
资源详情
资源评论
收起资源包目录
基于后端SpringBoot+MyBatis框架,PC前端Vue+ElementUI框架,微信小程序打造的全套ERP系统 (540个子文件)
.browserslistrc 33B
mvnw.cmd 6KB
lombok.config 64B
demo.css 6KB
iconfont.css 4KB
timeline-item.css 1KB
global.css 443B
timeline.css 132B
Dockerfile 244B
.editorconfig 121B
iconfont.eot 4KB
.eslintignore 22B
.gitignore 401B
.gitignore 220B
.gitignore 214B
demo_symbol.html 6KB
demo_unicode.html 6KB
demo_fontclass.html 4KB
index.html 2KB
favicon.ico 1KB
CPurchaseSave.java 9KB
CSaleSave.java 9KB
CAnalysisStockDetailList.java 8KB
CAnalysisAccountDetailList.java 7KB
CAnalysisStockSummaryList.java 6KB
Define.java 6KB
SimpleValidator.java 6KB
CCheckoutSave.java 6KB
CStoreSave.java 5KB
CCollectionSave.java 5KB
COrderSave.java 5KB
CTransferSave.java 5KB
CPaymentSave.java 5KB
StockServiceImpl.java 5KB
CProductSave.java 5KB
CAnalysisStockAmountList.java 5KB
LogServiceImpl.java 5KB
CAnalysisSaleDetailList.java 4KB
CCustomerSave.java 4KB
CTransferPage.java 4KB
CSupplierSave.java 4KB
CAnalysisPurchaseDetailList.java 4KB
CExpenseSave.java 4KB
CIncomeSave.java 4KB
TokenServiceImpl.java 4KB
AccountRecordServiceImpl.java 4KB
CAnalysisPurchaseSupplierSummaryList.java 4KB
CAnalysisPayableDetailList.java 4KB
CAnalysisSaleCustomerSummaryList.java 4KB
CAnalysisPayableSupplierList.java 3KB
CAnalysisFlowDetailList.java 3KB
CAnalysisReceivableCustomerList.java 3KB
CAnalysisPurchaseProductSummaryList.java 3KB
AnalysisController.java 3KB
CAnalysisSaleProductSummaryList.java 3KB
CAnalysisReceivableDetailList.java 3KB
CPurchasePage.java 3KB
CTransferDetail.java 3KB
CSalePage.java 3KB
CPurchaseDetail.java 3KB
CUserAdd.java 3KB
CCheckoutDetail.java 3KB
COrderPage.java 3KB
CStoreDetail.java 2KB
COrderDetail.java 2KB
CSaleDetail.java 2KB
CExpensePage.java 2KB
ReceivableServiceImpl.java 2KB
CCollectionPage.java 2KB
CSettlementAccountSave.java 2KB
TestSettlementAccountList.java 2KB
CCheckoutPage.java 2KB
CPaymentPage.java 2KB
CIncomePage.java 2KB
PayableServiceImpl.java 2KB
CStorePage.java 2KB
TestSaleSave.java 2KB
Sale.java 2KB
Purchase.java 2KB
CCustomerPage.java 2KB
CDictItemSave.java 2KB
IssueProductServiceImpl.java 2KB
TestPurchaseSave.java 2KB
CProductPage.java 2KB
CSupplierPage.java 2KB
KeyValueServiceImpl.java 2KB
UserServiceImpl.java 2KB
CCategorySave.java 2KB
CSetSystemConfiguration.java 2KB
LoginInterceptor.java 2KB
TestOrderSave.java 2KB
CUserLogin.java 2KB
TestSupplierSave.java 2KB
CCategoryList.java 2KB
TestCustomerSave.java 2KB
Product.java 2KB
IssueProductService.java 2KB
StockRecordServiceTest.java 2KB
StockRecordDao.java 2KB
StockRecordServiceImpl.java 2KB
共 540 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6723
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功