From 6f266c7dbc1f843e00d4f48dfd3a61671f70e124 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期日, 05 七月 2026 11:23:38 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' into dev_pro_山西长治
---
src/main/java/com/ruoyi/account/service/impl/sales/AccountInvoiceApplicationServiceImpl.java | 5
src/main/resources/mapper/basic/CustomerMapper.xml | 36 --
src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java | 2
src/main/java/com/ruoyi/account/controller/sales/AccountInvoiceApplicationController.java | 8
src/main/resources/mapper/basic/SupplierManageMapper.xml | 40 --
src/main/java/com/ruoyi/account/mapper/sales/AccountInvoiceApplicationMapper.java | 2
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 139 +++++++-
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 8
src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml | 40 ++
src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnSaleProductDto.java | 3
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java | 27 +
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | 57 +++
sql/product-inventory-management-new-pro.sql | 8
src/main/java/com/ruoyi/purchase/controller/PurchaseReturnOrdersController.java | 10
src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml | 89 +++++
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 11
src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsVo.java | 5
src/main/java/com/ruoyi/account/service/sales/AccountInvoiceApplicationService.java | 2
src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java | 3
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml | 84 ++++
src/main/java/com/ruoyi/sales/vo/CustomerTransactionsVo.java | 5
src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java | 10
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java | 13
src/main/java/com/ruoyi/purchase/vo/PurchaseReturnOrderProductsDetailVo.java | 3
src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml | 15
src/main/java/com/ruoyi/purchase/pojo/PurchaseReturnOrders.java | 12
src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml | 27 +
src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java | 2
src/main/java/com/ruoyi/purchase/vo/PurchaseStockInProductVo.java | 3
src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java | 5
src/main/resources/mapper/stock/StockInventoryMapper.xml | 6
src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java | 16 +
src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java | 12
src/main/resources/mapper/sales/ShippingInfoMapper.xml | 7
src/main/resources/mapper/stock/StockInRecordMapper.xml | 4
src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java | 7
src/main/resources/mapper/account/sales/AccountInvoiceApplicationMapper.xml | 21 +
src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java | 30 ++
src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java | 26 -
src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java | 12
src/main/java/com/ruoyi/procurementrecord/bean/vo/ShippingProductVo.java | 3
src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java | 16 +
src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java | 3
src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java | 15 +
44 files changed, 683 insertions(+), 169 deletions(-)
diff --git a/sql/product-inventory-management-new-pro.sql b/sql/product-inventory-management-new-pro.sql
index 35c0008..2752b38 100644
--- a/sql/product-inventory-management-new-pro.sql
+++ b/sql/product-inventory-management-new-pro.sql
@@ -3299,6 +3299,10 @@
`no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '閫�璐у崟缂栧彿',
`return_type` tinyint NOT NULL DEFAULT 0 COMMENT '閫�璐ф柟寮� 0閫�璐ч��娆� 1鎷掓敹',
`supplier_id` bigint NOT NULL DEFAULT 0 COMMENT '渚涘簲鍟唅d',
+ `shipping_type` tinyint NULL DEFAULT NULL COMMENT '鍙戣揣绫诲瀷 1璐ц溅 2蹇��',
+ `truck_plate_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '鍙戣揣杞︾墝鍙�',
+ `express_company` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '蹇�掑叕鍙�',
+ `express_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '蹇�掑崟鍙�',
`project_id` bigint NOT NULL DEFAULT 0 COMMENT '椤圭洰id',
`project_phase` tinyint NOT NULL DEFAULT 0 COMMENT '椤圭洰闃舵',
`prepared_at` datetime NULL DEFAULT NULL COMMENT '鍒跺崟鏃ユ湡',
@@ -3753,6 +3757,10 @@
`return_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '閫�璐у崟鍙�',
`customer_id` bigint NULL DEFAULT NULL COMMENT '瀹㈡埛 id',
`shipping_id` bigint NULL DEFAULT NULL COMMENT '鍏宠仈鍙戣揣鍗曞彿',
+ `shipping_type` tinyint NULL DEFAULT NULL COMMENT '鍙戣揣绫诲瀷 1璐ц溅 2蹇��',
+ `truck_plate_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '鍙戣揣杞︾墝鍙�',
+ `express_company` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '蹇�掑叕鍙�',
+ `express_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '蹇�掑崟鍙�',
`project_stage` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '椤圭洰闃舵',
`maker` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '鍒跺崟浜�',
`make_time` timestamp NULL DEFAULT NULL COMMENT '鍒跺崟鏃堕棿',
diff --git a/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java b/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java
index 82a90a3..4c21ac5 100644
--- a/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java
+++ b/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java
@@ -29,6 +29,22 @@
@Excel(name = "鍏宠仈鍏ュ簱鍗曞彿")
private String inboundBatches;
+ @Schema(description = "鍙戣揣绫诲瀷")
+ @Excel(name = "鍙戣揣绫诲瀷")
+ private Integer shippingType;
+
+ @Schema(description = "鍙戣揣杞︾墝鍙�")
+ @Excel(name = "鍙戣揣杞︾墝鍙�")
+ private String truckPlateNo;
+
+ @Schema(description = "蹇�掑叕鍙�")
+ @Excel(name = "蹇�掑叕鍙�")
+ private String expressCompany;
+
+ @Schema(description = "蹇�掑崟鍙�")
+ @Excel(name = "蹇�掑崟鍙�")
+ private String expressNo;
+
@Schema(description = "閫�璐ф棩鏈�")
@Excel(name = "閫�璐ф棩鏈�")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
diff --git a/src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java b/src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java
index 980d7f8..36f65c4 100644
--- a/src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java
+++ b/src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java
@@ -29,6 +29,22 @@
@Excel(name = "鍏宠仈鍙戣揣鍗曞彿")
private String shippingNo;
+ @Schema(description = "鍙戣揣绫诲瀷")
+ @Excel(name = "鍙戣揣绫诲瀷")
+ private Integer shippingType;
+
+ @Schema(description = "鍙戣揣杞︾墝鍙�")
+ @Excel(name = "鍙戣揣杞︾墝鍙�")
+ private String truckPlateNo;
+
+ @Schema(description = "蹇�掑叕鍙�")
+ @Excel(name = "蹇�掑叕鍙�")
+ private String expressCompany;
+
+ @Schema(description = "蹇�掑崟鍙�")
+ @Excel(name = "蹇�掑崟鍙�")
+ private String expressNo;
+
@Schema(description = "閫�璐ф棩鏈�")
@Excel(name = "閫�璐ф棩鏈�")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
diff --git a/src/main/java/com/ruoyi/account/controller/sales/AccountInvoiceApplicationController.java b/src/main/java/com/ruoyi/account/controller/sales/AccountInvoiceApplicationController.java
index 00b490f..699f57c 100644
--- a/src/main/java/com/ruoyi/account/controller/sales/AccountInvoiceApplicationController.java
+++ b/src/main/java/com/ruoyi/account/controller/sales/AccountInvoiceApplicationController.java
@@ -16,6 +16,7 @@
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
+import java.util.List;
/**
* <p>
@@ -41,6 +42,13 @@
return R.ok(listPage);
}
+ @GetMapping("/getAccountInvoiceApplicationList")
+ @Log(title = "鏍规嵁瀹㈡埛id鏌ヨ寮�绁ㄧ敵璇峰彴璐�", businessType = BusinessType.OTHER)
+ @Operation(summary = "璐㈠姟绠$悊--寮�绁ㄧ敵璇峰彴璐�")
+ public R<List<AccountInvoiceApplicationVo>> getAccountInvoiceApplicationList(@RequestParam Integer customerId){
+ return R.ok(accountInvoiceApplicationService.getAccountInvoiceApplicationList(customerId));
+ }
+
@GetMapping("/getOutboundBatchesByCustomer")
@Log(title = "鏍规嵁瀹㈡埛鏌ヨ鍑哄簱鍗曞彿(寮�绁ㄧ敵璇�)", businessType = BusinessType.OTHER)
@Operation(summary = "璐㈠姟绠$悊--鏍规嵁瀹㈡埛鏌ヨ鍑哄簱鍗曞彿(寮�绁ㄧ敵璇�)")
diff --git a/src/main/java/com/ruoyi/account/mapper/sales/AccountInvoiceApplicationMapper.java b/src/main/java/com/ruoyi/account/mapper/sales/AccountInvoiceApplicationMapper.java
index 463f178..c37a31f 100644
--- a/src/main/java/com/ruoyi/account/mapper/sales/AccountInvoiceApplicationMapper.java
+++ b/src/main/java/com/ruoyi/account/mapper/sales/AccountInvoiceApplicationMapper.java
@@ -29,4 +29,6 @@
//鍒ゆ柇璇ュ嚭搴撹褰曟槸鍚︽湁寮�绁ㄧ敵璇�
boolean existsByStockOutRecordId(@Param("stockOutRecordIds") List<Long> stockOutRecordIds);
+
+ List<AccountInvoiceApplicationVo> selectAccountInvoiceApplicationList(@Param("customerId") Integer customerId);
}
diff --git a/src/main/java/com/ruoyi/account/service/impl/sales/AccountInvoiceApplicationServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/sales/AccountInvoiceApplicationServiceImpl.java
index 74cec42..c88ede2 100644
--- a/src/main/java/com/ruoyi/account/service/impl/sales/AccountInvoiceApplicationServiceImpl.java
+++ b/src/main/java/com/ruoyi/account/service/impl/sales/AccountInvoiceApplicationServiceImpl.java
@@ -91,6 +91,11 @@
return removeBatchByIds(ids);
}
+ @Override
+ public List<AccountInvoiceApplicationVo> getAccountInvoiceApplicationList(Integer customerId) {
+ return accountInvoiceApplicationMapper.selectAccountInvoiceApplicationList(customerId);
+ }
+
private String genInvoiceApplicationNo() {
return "KP" + LocalDateTime.now().format(CODE_TIME_FORMATTER) + new Random().nextInt(10);
}
diff --git a/src/main/java/com/ruoyi/account/service/sales/AccountInvoiceApplicationService.java b/src/main/java/com/ruoyi/account/service/sales/AccountInvoiceApplicationService.java
index 7f55ba5..d2cefc1 100644
--- a/src/main/java/com/ruoyi/account/service/sales/AccountInvoiceApplicationService.java
+++ b/src/main/java/com/ruoyi/account/service/sales/AccountInvoiceApplicationService.java
@@ -30,4 +30,6 @@
void exportAccountInvoiceApplication(HttpServletResponse response, AccountInvoiceApplicationDto accountInvoiceApplicationDto);
boolean deleteAccountInvoiceApplication(List<Long> ids);
+
+ List<AccountInvoiceApplicationVo> getAccountInvoiceApplicationList(Integer customerId);
}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java
index a0b07d5..9a5f0b8 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java
@@ -13,6 +13,8 @@
import com.ruoyi.approve.bean.vo.ApprovalTemplateVo;
import com.ruoyi.approve.mapper.ApprovalTemplateMapper;
import com.ruoyi.approve.mapper.ApprovalTemplateNodeApproverMapper;
+import com.ruoyi.approve.mapper.ApprovalInstanceMapper;
+import com.ruoyi.approve.pojo.ApprovalInstance;
import com.ruoyi.approve.pojo.ApprovalTemplate;
import com.ruoyi.approve.pojo.ApprovalTemplateNode;
import com.ruoyi.approve.pojo.ApprovalTemplateNodeApprover;
@@ -48,6 +50,7 @@
private final ApprovalTemplateMapper approvalTemplateMapper;
private final ApprovalTemplateNodeService approvalTemplateNodeService;
private final ApprovalTemplateNodeApproverMapper approvalTemplateNodeApproverMapper;
+ private final ApprovalInstanceMapper approvalInstanceMapper;
private final FileUtil fileUtil;
@Override
@@ -82,6 +85,10 @@
@Override
public Boolean updateApprovalTemplateDto(ApprovalTemplateDto approvalTemplateDto) {
+ // 妫�鏌ユā鏉挎槸鍚﹁瀹℃壒瀹炰緥寮曠敤
+ if (isTemplateReferenced(approvalTemplateDto.getId())) {
+ throw new RuntimeException("璇ュ鎵规ā鏉垮凡琚鎵规祦绋嬪紩鐢紝鏃犳硶缂栬緫");
+ }
approvalTemplateMapper.updateById(approvalTemplateDto);
approvalTemplateNodeService.remove(
new LambdaQueryWrapper<ApprovalTemplateNode>()
@@ -111,6 +118,12 @@
public Boolean delete(List<Long> ids) {
if (ids == null || ids.isEmpty()) {
return false;
+ }
+ // 妫�鏌ユā鏉挎槸鍚﹁瀹℃壒瀹炰緥寮曠敤
+ for (Long id : ids) {
+ if (isTemplateReferenced(id)) {
+ throw new RuntimeException("瀹℃壒妯℃澘锛圛D: " + id + "锛夊凡琚鎵规祦绋嬪紩鐢紝鏃犳硶鍒犻櫎");
+ }
}
ApprovalTemplate updateEntity = new ApprovalTemplate();
updateEntity.setDeleted(1);
@@ -275,4 +288,21 @@
BeanUtils.copyProperties(approver, approverVo);
return approverVo;
}
+
+ /**
+ * 妫�鏌ュ鎵规ā鏉挎槸鍚﹁瀹℃壒瀹炰緥寮曠敤
+ * @param templateId 妯℃澘ID
+ * @return true 琛ㄧず琚紩鐢紝false 琛ㄧず鏈寮曠敤
+ */
+ private boolean isTemplateReferenced(Long templateId) {
+ if (templateId == null) {
+ return false;
+ }
+ Long count = approvalInstanceMapper.selectCount(
+ new LambdaQueryWrapper<ApprovalInstance>()
+ .eq(ApprovalInstance::getTemplateId, templateId)
+ .eq(ApprovalInstance::getDeleted, 0)
+ );
+ return count != null && count > 0;
+ }
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java
index 539f3c7..98eb5da 100644
--- a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java
@@ -27,6 +27,18 @@
@Schema(description = "鍏宠仈鍑哄簱鍗曞彿")
private String shippingNo;
+ @Schema(description = "鍙戣揣绫诲瀷")
+ private Integer shippingType;
+
+ @Schema(description = "鍙戣揣杞︾墝鍙�")
+ private String truckPlateNo;
+
+ @Schema(description = "蹇�掑叕鍙�")
+ private String expressCompany;
+
+ @Schema(description = "蹇�掑崟鍙�")
+ private String expressNo;
+
@Schema(description = "椤圭洰鍚嶇О")
private String projectName;
@@ -36,4 +48,7 @@
@Schema(description = "閿�鍞骇鍝佸璞℃暟缁�")
private List<ReturnSaleProductDto> returnSaleProducts;
+ @Schema(description = "閿�鍞��璐у叆搴撳鎵圭姸鎬�")
+ private Integer stockInApprovalStatus;
+
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnSaleProductDto.java b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnSaleProductDto.java
index 6cfae1b..b24ad14 100644
--- a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnSaleProductDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnSaleProductDto.java
@@ -35,4 +35,7 @@
@Schema(description = "鍙戣揣鍑哄簱鏁伴噺")
private BigDecimal stockOutNum;
+
+ @Schema(description = "寰呭鐞嗛��璐ф暟閲�")
+ private BigDecimal pendingReturnNum;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/bean/vo/ShippingProductVo.java b/src/main/java/com/ruoyi/procurementrecord/bean/vo/ShippingProductVo.java
index 9f87aef..760d83f 100644
--- a/src/main/java/com/ruoyi/procurementrecord/bean/vo/ShippingProductVo.java
+++ b/src/main/java/com/ruoyi/procurementrecord/bean/vo/ShippingProductVo.java
@@ -40,4 +40,7 @@
@Schema(description = "鍚◣鍗曚环")
private BigDecimal taxInclusiveUnitPrice;
+
+ @Schema(description = "寰呭鐞嗛��璐ф暟閲�")
+ private BigDecimal pendingReturnNum;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
index 046fb5c..5f04de8 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
@@ -34,6 +34,18 @@
@Schema(description = "鍏宠仈鍑哄簱鍗曞彿Id")
private Long shippingId;
+ @Schema(description = "鍙戣揣绫诲瀷 1璐ц溅 2蹇��")
+ private Integer shippingType;
+
+ @Schema(description = "鍙戣揣杞︾墝鍙�")
+ private String truckPlateNo;
+
+ @Schema(description = "蹇�掑叕鍙�")
+ private String expressCompany;
+
+ @Schema(description = "蹇�掑崟鍙�")
+ private String expressNo;
+
@Schema(description = "椤圭洰id")
private Long projectId;
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
index 048f1df..6420622 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
@@ -20,8 +20,6 @@
import com.ruoyi.procurementrecord.service.ReturnManagementService;
import com.ruoyi.procurementrecord.service.ReturnSaleProductService;
import com.ruoyi.procurementrecord.utils.StockUtils;
-import com.ruoyi.sales.mapper.SalesLedgerMapper;
-import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.ShippingInfoService;
import lombok.RequiredArgsConstructor;
@@ -33,6 +31,7 @@
import java.math.BigDecimal;
import java.util.List;
+import java.util.stream.Collectors;
/**
* @author :yys
@@ -46,7 +45,6 @@
private final ReturnManagementMapper returnManagementMapper;
private final ReturnSaleProductService returnSaleProductService;
private final ShippingInfoService shippingInfoService;
- private final SalesLedgerMapper salesLedgerMapper;
private final SalesRefundAmountOrderService salesRefundAmountOrderService;
private final StockUtils stockUtils;
@@ -122,21 +120,15 @@
byId.setSettler(SecurityUtils.getLoginUser().getNickName());
byId.setRefundAmount(totalRefund);
updateById(byId);
+ //鏇存柊閫�璐т骇鍝佸垪琛ㄧ殑鐘舵��
+ List<ReturnSaleProduct> updateList = list.stream().map(m -> {
+ ReturnSaleProduct returnSaleProduct = new ReturnSaleProduct();
+ returnSaleProduct.setId(m.getId());
+ returnSaleProduct.setStatus(1);
+ return returnSaleProduct;
+ }).collect(Collectors.toList());
+ returnSaleProductService.updateBatchById(updateList);
- // 3. 鏇存柊閿�鍞彴璐︾殑瀹為檯鍚堝悓閲戦
- if (byId.getShippingId() != null) {
- ShippingInfo shippingInfo = shippingInfoService.getById(byId.getShippingId());
- if (shippingInfo != null && shippingInfo.getSalesLedgerId() != null) {
- SalesLedger salesLedger = salesLedgerMapper.selectById(shippingInfo.getSalesLedgerId());
- if (salesLedger != null && salesLedger.getContractAmount() != null) {
- BigDecimal baseAmount = salesLedger.getNetContractAmount() != null
- ? salesLedger.getNetContractAmount()
- : salesLedger.getContractAmount();
- salesLedger.setNetContractAmount(baseAmount.subtract(totalRefund));
- salesLedgerMapper.updateById(salesLedger);
- }
- }
- }
return true;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 9b8735f..6c56359 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -20,6 +20,7 @@
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Collections;
+import java.util.List;
@Component
@RequiredArgsConstructor
@@ -183,15 +184,25 @@
//鍒犻櫎鍑哄簱璁板綍
public void deleteStockOutRecord(Long recordId, String recordType) {
- StockOutRecord one = stockOutRecordService.getOne(new QueryWrapper<StockOutRecord>()
+ List<StockOutRecord> records = stockOutRecordService.list(new QueryWrapper<StockOutRecord>()
.lambda().eq(StockOutRecord::getRecordId, recordId)
- .eq(StockOutRecord::getRecordType, recordType), false);
- if (ObjectUtils.isNotEmpty(one)) {
- if (ReviewStatusEnum.APPROVED.getCode().equals(one.getApprovalStatus())) {
- stockOutRecordService.batchDelete(Collections.singletonList(one.getId()));
- } else {
- stockOutRecordService.removeById(one.getId());
- }
+ .eq(StockOutRecord::getRecordType, recordType));
+ if (ObjectUtils.isEmpty(records)) {
+ return;
+ }
+ List<Long> approvedIds = records.stream()
+ .filter(one -> ReviewStatusEnum.APPROVED.getCode().equals(one.getApprovalStatus()))
+ .map(StockOutRecord::getId)
+ .toList();
+ List<Long> pendingIds = records.stream()
+ .filter(one -> !ReviewStatusEnum.APPROVED.getCode().equals(one.getApprovalStatus()))
+ .map(StockOutRecord::getId)
+ .toList();
+ if (!approvedIds.isEmpty()) {
+ stockOutRecordService.batchDelete(approvedIds);
+ }
+ if (!pendingIds.isEmpty()) {
+ stockOutRecordService.removeByIds(pendingIds);
}
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java
index d66ebc7..a792b35 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java
@@ -161,11 +161,21 @@
// 妫�鏌ユ暟鎹槸鍚﹂噸澶嶏紝閬垮厤閲嶅淇濆瓨
boolean duplicate = productionOrderRoutingOperationParamMapper.selectCount(
Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
+ .eq(ProductionOrderRoutingOperationParam::getProductionOrderId, item.getProductionOrderId())
.isNull(ProductionOrderRoutingOperationParam::getProductionProductMainId)
.eq(ProductionOrderRoutingOperationParam::getProductionOrderRoutingOperationId, item.getProductionOrderRoutingOperationId())
.eq(item.getTechnologyRoutingOperationParamId() != null,
ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationParamId, item.getTechnologyRoutingOperationParamId())
- .eq(item.getTechnologyRoutingOperationParamId() == null && item.getParamCode() != null,
+ .eq(item.getTechnologyRoutingOperationParamId() == null && item.getTechnologyOperationParamId() != null,
+ ProductionOrderRoutingOperationParam::getTechnologyOperationParamId, item.getTechnologyOperationParamId())
+ .eq(item.getTechnologyRoutingOperationParamId() == null
+ && item.getTechnologyOperationParamId() == null
+ && item.getParamId() != null,
+ ProductionOrderRoutingOperationParam::getParamId, item.getParamId())
+ .eq(item.getTechnologyRoutingOperationParamId() == null
+ && item.getTechnologyOperationParamId() == null
+ && item.getParamId() == null
+ && item.getParamCode() != null,
ProductionOrderRoutingOperationParam::getParamCode, item.getParamCode())
.ne(item.getId() != null, ProductionOrderRoutingOperationParam::getId, item.getId())
) > 0;
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index 58216c1..3b20e8f 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -118,6 +118,16 @@
}
/**
+ * 鏌ヨ閲囪喘閫�璐у彲閫夐噰璐彴璐�
+ */
+ @GetMapping("/returnableList")
+ public TableDataInfo returnableList(PurchaseLedger purchaseLedger) {
+ startPage();
+ List<PurchaseLedger> list = purchaseLedgerService.selectReturnablePurchaseLedgerList(purchaseLedger);
+ return getDataTable(list);
+ }
+
+ /**
* 瀵煎嚭閲囪喘鍙拌处鍒楄〃
*/
@Log(title = "閲囪喘鍙拌处", businessType = BusinessType.EXPORT)
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseReturnOrdersController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseReturnOrdersController.java
index 6e73ee1..579d62d 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseReturnOrdersController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseReturnOrdersController.java
@@ -13,6 +13,8 @@
import com.ruoyi.purchase.dto.PurchaseReturnOrderDto;
import com.ruoyi.purchase.mapper.PurchaseReturnOrdersMapper;
import com.ruoyi.purchase.pojo.PurchaseReturnOrders;
+import com.ruoyi.stock.mapper.StockOutRecordMapper;
+import com.ruoyi.stock.pojo.StockOutRecord;
import java.time.LocalDateTime;
import com.ruoyi.purchase.service.PurchaseReturnOrdersService;
@@ -40,6 +42,7 @@
private PurchaseReturnOrdersService purchaseReturnOrdersService;
private PurchaseReturnOrdersMapper purchaseReturnOrdersMapper;
private AccountStatementDetailsService accountStatementDetailsService;
+ private StockOutRecordMapper stockOutRecordMapper;
@GetMapping("/listPage")
@@ -72,6 +75,13 @@
if (CollectionUtils.isNotEmpty(accountStatementDetails)){
throw new ServiceException("璇ラ噰璐��璐у崟宸茬粡鐢熸垚瀵硅处鍗曪紝鏃犳硶鍒犻櫎");
}
+ List<StockOutRecord> approvedStockOutRecords = stockOutRecordMapper.selectList(Wrappers.<StockOutRecord>lambdaQuery()
+ .eq(StockOutRecord::getRecordType, "9")
+ .eq(StockOutRecord::getApprovalStatus, 1)
+ .inSql(StockOutRecord::getRecordId, "select id from purchase_return_order_products where purchase_return_order_id = " + id));
+ if (CollectionUtils.isNotEmpty(approvedStockOutRecords)) {
+ throw new ServiceException("璇ラ噰璐��璐у崟瀵瑰簲鍑哄簱宸插鏍搁�氳繃锛屾棤娉曞垹闄�");
+ }
purchaseReturnOrdersService.deleteById(id);
return AjaxResult.success();
}
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
index 32d314c..ee089a5 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -33,6 +33,11 @@
private Long id;
/**
+ * 瀹℃壒瀹炰緥ID
+ */
+ private Long approvalInstanceId;
+
+ /**
* 閲囪喘鍚堝悓鍙�
*/
@Excel(name = "閲囪喘鍚堝悓鍙�")
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java
index 68ef597..67c98dd 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java
@@ -15,6 +15,13 @@
// 閲囪喘鍚堝悓鍙�
private String purchaseContractNumber;
+ private String shippingTypeText;
+
+ /**
+ * 瀵瑰簲鍑哄簱鏄惁宸插鏍搁�氳繃
+ */
+ private Boolean stockOutApproved;
+
//閫�鏂欎汉濮撳悕
private String returnUserName;
diff --git a/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java b/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
index 8d5ab54..feba849 100644
--- a/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
+++ b/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
@@ -23,6 +23,8 @@
IPage<PurchaseLedgerDto> selectPurchaseLedgerListPage(IPage ipage, @Param("c") PurchaseLedgerDto purchaseLedger);
+ List<PurchaseLedger> selectReturnablePurchaseLedgerList(@Param("c") PurchaseLedger purchaseLedger);
+
List<IncomeExpenseAnalysisDto> selectPurchaseStats(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("dateFormat") String dateFormat);
BigDecimal selectTotalPurchaseAmount(@Param("startDate") String startDate, @Param("endDate") String endDate);
diff --git a/src/main/java/com/ruoyi/purchase/pojo/PurchaseReturnOrders.java b/src/main/java/com/ruoyi/purchase/pojo/PurchaseReturnOrders.java
index 936b5b5..abe0b8a 100644
--- a/src/main/java/com/ruoyi/purchase/pojo/PurchaseReturnOrders.java
+++ b/src/main/java/com/ruoyi/purchase/pojo/PurchaseReturnOrders.java
@@ -44,6 +44,18 @@
@Schema(description = "渚涘簲鍟唅d")
private Long supplierId;
+ @Schema(description = "鍙戣揣绫诲瀷 1璐ц溅 2蹇��")
+ private Integer shippingType;
+
+ @Schema(description = "鍙戣揣杞︾墝鍙�")
+ private String truckPlateNo;
+
+ @Schema(description = "蹇�掑叕鍙�")
+ private String expressCompany;
+
+ @Schema(description = "蹇�掑崟鍙�")
+ private String expressNo;
+
@Schema(description = "椤圭洰id")
private Long projectId;
diff --git a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
index 4b91b89..78e86a1 100644
--- a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -23,6 +23,8 @@
List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger);
+ List<PurchaseLedger> selectReturnablePurchaseLedgerList(PurchaseLedger purchaseLedger);
+
int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception;
R batchInsertPurchaseSteps(List<Long> ids);
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index ddb0118..7c25815 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.alibaba.fastjson2.JSON;
import com.ruoyi.approve.bean.dto.ApprovalInstanceDto;
import com.ruoyi.approve.mapper.ApprovalTemplateMapper;
import com.ruoyi.approve.pojo.ApprovalInstance;
@@ -22,10 +23,11 @@
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.basic.utils.FileUtil;
-import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.enums.ApprovalStatusEnum;
import com.ruoyi.common.enums.ReviewStatusEnum;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.TypeEnums;
+import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -136,6 +138,11 @@
}
@Override
+ public List<PurchaseLedger> selectReturnablePurchaseLedgerList(PurchaseLedger purchaseLedger) {
+ return purchaseLedgerMapper.selectReturnablePurchaseLedgerList(purchaseLedger);
+ }
+
+ @Override
@Transactional(rollbackFor = Exception.class)
public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception {
PurchaseLedger purchaseLedger = new PurchaseLedger();
@@ -168,23 +175,10 @@
// 瀹為檯鍚堝悓閲戦濮嬬粓绛変簬鍚堝悓閲戦
purchaseLedger.setNetContractAmount(purchaseLedger.getContractAmount());
// 3. 鏂板鎴栨洿鏂颁富琛�
- if (purchaseLedger.getId() == null) {
- if (!StringUtils.hasText(purchaseLedger.getPurchaseContractNumber())) {
- purchaseLedger.setPurchaseContractNumber(generatePurchaseContractNo(purchaseLedger.getEntryDate()));
- }
- purchaseLedgerMapper.insert(purchaseLedger);
- } else {
- // 鍒犻櫎閲囪喘瀹℃牳锛岄噸鏂版彁浜�
- ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
- .eq(ApproveProcess::getApproveType, 5)
- .eq(ApproveProcess::getApproveReason, purchaseLedger.getPurchaseContractNumber())
- .eq(ApproveProcess::getApproveDelete, 0)
- .last("limit 1"));
- if (one != null) {
- approveProcessService.delByIds(Collections.singletonList(one.getId()));
- }
- purchaseLedgerMapper.updateById(purchaseLedger);
+ if (purchaseLedger.getId() == null && !StringUtils.hasText(purchaseLedger.getPurchaseContractNumber())) {
+ purchaseLedger.setPurchaseContractNumber(generatePurchaseContractNo(purchaseLedger.getEntryDate()));
}
+ this.saveOrUpdate(purchaseLedger);
// 4. 澶勭悊瀛愯〃鏁版嵁
List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData();
@@ -192,7 +186,17 @@
handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType());
}
// 6.閲囪喘瀹℃牳鏂板锛涘鎵圭鐞嗘湭閰嶇疆閲囪喘瀹℃壒浜烘椂锛屽鎵规湇鍔′細鑷姩缃负瀹℃壒閫氳繃銆�
- addApproveByPurchase(loginUser, purchaseLedger);
+ //鏌ヨ褰撳墠閲囪喘鍚堝悓鍙锋槸鍚﹀凡娣诲姞瀹℃壒锛屽鏋滄湁涓斾笉鏄┏鍥炵姸鎬侊紝鍒欎笉閲嶅娣诲姞
+ ApprovalInstance oldApprovalInstance = approvalInstanceService.getOne(Wrappers.<ApprovalInstance>lambdaQuery()
+ .eq(ApprovalInstance::getDeleted, 0)
+ .eq(ApprovalInstance::getBusinessType, TypeEnums.PURCHASE_APPROVAL.getCode())
+ .eq(ApprovalInstance::getBusinessId, purchaseLedger.getId())
+ .ne(ApprovalInstance::getStatus,"REJECTED")
+ .last("limit 1")
+ );
+ if(Objects.isNull(oldApprovalInstance)){
+ addApproveByPurchase(loginUser, purchaseLedger, productList);
+ }
// 5. 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.PURCHASE_LEDGER, purchaseLedger.getId(), purchaseLedgerDto.getStorageBlobDTOS());
return 1;
@@ -1013,7 +1017,12 @@
salesLedgerProductMapper.insert(salesLedgerProduct);
}
// 閲囪喘瀹℃牳
- addApproveByPurchase(loginUser,salesLedger);
+ List<SalesLedgerProduct> snapshotProducts = salesLedgerProductMapper.selectList(
+ new LambdaQueryWrapper<SalesLedgerProduct>()
+ .eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId())
+ .eq(SalesLedgerProduct::getType, 2)
+ );
+ addApproveByPurchase(loginUser, salesLedger, snapshotProducts);
}
return AjaxResult.success("瀵煎叆鎴愬姛");
@@ -1025,21 +1034,91 @@
@Override
public PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) {
- // 1. 鏌ヨ涓昏〃
- PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
- .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber())
- .last("LIMIT 1"));
- if (purchaseLedger == null) {
- throw new BaseException("閲囪喘鍙拌处涓嶅瓨鍦�");
+ PurchaseLedger purchaseLedger = null;
+ ApprovalInstance approvalSnapshotInstance = null;
+
+ // 1. 浼樺厛鎸夊綋鍓嶅鎵瑰疄渚嬫煡璇㈠揩鐓�
+ if (purchaseLedgerDto.getApprovalInstanceId() != null) {
+ approvalSnapshotInstance = approvalInstanceService.getById(purchaseLedgerDto.getApprovalInstanceId());
+ if (approvalSnapshotInstance != null && approvalSnapshotInstance.getBusinessId() != null) {
+ purchaseLedger = purchaseLedgerMapper.selectById(approvalSnapshotInstance.getBusinessId());
+ }
}
- // 2. 鏌ヨ瀛愯〃
+ // 2. 娌′紶瀹℃壒瀹炰緥ID鏃讹紝閫�鍥炲埌鎸夐噰璐悎鍚屽彿鏌ヨ
+ if (purchaseLedger == null) {
+ purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
+ .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber())
+ .last("LIMIT 1"));
+ if (purchaseLedger == null) {
+ throw new BaseException("閲囪喘鍙拌处涓嶅瓨鍦�");
+ }
+ }
+
+ // 3. 鏌ヨ褰撳墠閲囪喘鍗曞搴旂殑瀹℃壒蹇収
+ if (approvalSnapshotInstance == null) {
+ approvalSnapshotInstance = approvalInstanceService.getOne(new LambdaQueryWrapper<ApprovalInstance>()
+ .eq(ApprovalInstance::getBusinessId, purchaseLedger.getId())
+ .eq(ApprovalInstance::getBusinessType, 5L)
+ .eq(ApprovalInstance::getDeleted, 0)
+ .orderByDesc(ApprovalInstance::getId)
+ .last("LIMIT 1"));
+ }
+
+ if (approvalSnapshotInstance != null && StringUtils.hasText(approvalSnapshotInstance.getFormConfig())) {
+ try {
+ PurchaseLedgerDto snapshot = JSON.parseObject(approvalSnapshotInstance.getFormConfig(), PurchaseLedgerDto.class);
+ if (snapshot != null) {
+ snapshot.setId(purchaseLedger.getId());
+ if (snapshot.getPurchaseContractNumber() == null) {
+ snapshot.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber());
+ }
+ if (snapshot.getSupplierId() == null) {
+ snapshot.setSupplierId(purchaseLedger.getSupplierId());
+ }
+ if (snapshot.getSupplierName() == null) {
+ snapshot.setSupplierName(purchaseLedger.getSupplierName());
+ }
+ if (snapshot.getSalesContractNo() == null) {
+ snapshot.setSalesContractNo(purchaseLedger.getSalesContractNo());
+ }
+ if (snapshot.getSalesContractNoId() == null) {
+ snapshot.setSalesContractNoId(purchaseLedger.getSalesLedgerId());
+ }
+ if (snapshot.getProjectName() == null) {
+ snapshot.setProjectName(purchaseLedger.getProjectName());
+ }
+ if (snapshot.getEntryDate() == null) {
+ snapshot.setEntryDate(purchaseLedger.getEntryDate());
+ }
+ if (snapshot.getExecutionDate() == null) {
+ snapshot.setExecutionDate(purchaseLedger.getExecutionDate());
+ }
+ if (snapshot.getRemarks() == null) {
+ snapshot.setRemarks(purchaseLedger.getRemarks());
+ }
+ if (snapshot.getRecorderId() == null) {
+ snapshot.setRecorderId(purchaseLedger.getRecorderId());
+ }
+ if (snapshot.getRecorderName() == null) {
+ snapshot.setRecorderName(purchaseLedger.getRecorderName());
+ }
+ snapshot.setProductData(snapshot.getProductData() == null ? Collections.emptyList() : snapshot.getProductData());
+ snapshot.setHasChildren(CollectionUtils.isNotEmpty(snapshot.getProductData()));
+ return snapshot;
+ }
+ } catch (Exception e) {
+ log.warn("瑙f瀽閲囪喘瀹℃壒蹇収澶辫触: {}", e.getMessage());
+ }
+ }
+
+ // 4. 鏌ヨ瀛愯〃
LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();
productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())
.eq(SalesLedgerProduct::getType, 2);
List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
- // 4. 杞崲 DTO
+ // 5. 杞崲 DTO
PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
BeanUtils.copyProperties(purchaseLedger, resultDto);
if (!products.isEmpty()) {
@@ -1049,7 +1128,7 @@
return resultDto;
}
- public void addApproveByPurchase(LoginUser loginUser,PurchaseLedger purchaseLedger) throws Exception {
+ public void addApproveByPurchase(LoginUser loginUser, PurchaseLedger purchaseLedger, List<SalesLedgerProduct> productList) {
if (loginUser == null) {
return;
}
@@ -1074,6 +1153,10 @@
approvalInstance.setTitle(purchaseLedger.getPurchaseContractNumber()+"瀹℃壒");
approvalInstance.setApplicantName(loginUser.getNickName());
approvalInstance.setApplyTime(LocalDateTime.now());
+ PurchaseLedgerDto snapshot = new PurchaseLedgerDto();
+ BeanUtils.copyProperties(purchaseLedger, snapshot);
+ snapshot.setProductData(productList == null ? Collections.emptyList() : new ArrayList<>(productList));
+ approvalInstance.setFormConfig(JSON.toJSONString(snapshot));
approvalInstanceService.add(approvalInstance);
}
diff --git a/src/main/java/com/ruoyi/purchase/vo/PurchaseReturnOrderProductsDetailVo.java b/src/main/java/com/ruoyi/purchase/vo/PurchaseReturnOrderProductsDetailVo.java
index dcd58b5..e50d5d0 100644
--- a/src/main/java/com/ruoyi/purchase/vo/PurchaseReturnOrderProductsDetailVo.java
+++ b/src/main/java/com/ruoyi/purchase/vo/PurchaseReturnOrderProductsDetailVo.java
@@ -47,6 +47,9 @@
@Schema(description = "宸查��璐ф暟閲�")
private BigDecimal totalReturnNum;
+ @Schema(description = "閿�鍞彂璐ф暟閲�")
+ private BigDecimal saleOutQuantity;
+
@Schema(description = "鍚◣鍗曚环")
private BigDecimal taxInclusiveUnitPrice;
diff --git a/src/main/java/com/ruoyi/purchase/vo/PurchaseStockInProductVo.java b/src/main/java/com/ruoyi/purchase/vo/PurchaseStockInProductVo.java
index 3f8e0ec..ff7754e 100644
--- a/src/main/java/com/ruoyi/purchase/vo/PurchaseStockInProductVo.java
+++ b/src/main/java/com/ruoyi/purchase/vo/PurchaseStockInProductVo.java
@@ -42,6 +42,9 @@
@Schema(description = "閫�璐ф�绘暟")
private BigDecimal totalReturnNum;
+ @Schema(description = "閿�鍞彂璐ф暟閲�")
+ private BigDecimal saleOutQuantity;
+
@Schema(description = "鍚◣鍗曚环")
private BigDecimal taxInclusiveUnitPrice;
diff --git a/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java b/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java
index 3533e6e..5cf592d 100644
--- a/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java
+++ b/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java
@@ -30,4 +30,7 @@
@Schema(description = "搴斾粯閲戦")
private BigDecimal payableAmount;
+ @Schema(description = "閫�璐ч噾棰�")
+ private BigDecimal returnAmount;
+
}
diff --git a/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsVo.java b/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsVo.java
index 35cefc0..2434017 100644
--- a/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsVo.java
+++ b/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsVo.java
@@ -24,7 +24,10 @@
private BigDecimal paymentAmount;
@Schema(description = "搴斾粯閲戦")
- //璇ヤ緵搴斿晢閲囪喘搴斾粯绱閲戦=璐㈠姟(鍏ュ簱-閫�璐�)
+ //璇ヤ緵搴斿晢閲囪喘搴斾粯绱閲戦=鍒濆閲戦-浠樻-閫�娆�
private BigDecimal payableAmount;
+ @Schema(description = "閫�璐ч噾棰�")
+ private BigDecimal returnAmount;
+
}
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
index 9efcc89..f04417e 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -47,11 +47,18 @@
java.math.BigDecimal returnQuantity = item.getReturnQuantity() == null
? java.math.BigDecimal.ZERO
: item.getReturnQuantity();
- java.math.BigDecimal quantity = item.getQuantity() == null
+ item.setReturnQuantity(returnQuantity);
+ java.math.BigDecimal availableQuality = item.getQuantity() == null
? java.math.BigDecimal.ZERO
: item.getQuantity();
- item.setReturnQuantity(returnQuantity);
- item.setAvailableQuality(quantity.subtract(returnQuantity));
+ if (item.getType() != null && item.getType() == 2) {
+ availableQuality = item.getApprovedStockInNum() == null
+ ? java.math.BigDecimal.ZERO
+ : item.getApprovedStockInNum();
+ availableQuality = availableQuality
+ .subtract(item.getShippedQuantity() == null ? java.math.BigDecimal.ZERO : item.getShippedQuantity());
+ }
+ item.setAvailableQuality(availableQuality.subtract(returnQuantity));
});
}
return AjaxResult.success(list);
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 4aa9ff5..9bcbd07 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -187,6 +187,14 @@
private BigDecimal returnQuantity;
@TableField(exist = false)
+ @Schema(description = "閿�鍞彂璐ф暟閲�")
+ private BigDecimal shippedQuantity;
+
+ @TableField(exist = false)
+ @Schema(description = "宸插鏍稿叆搴撴暟閲�")
+ private BigDecimal approvedStockInNum;
+
+ @TableField(exist = false)
@Schema(description = "瀹℃壒涓暟閲�")
private BigDecimal pendingApprovalQuantity;
}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 92c44c3..171f5ae 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -25,6 +25,7 @@
import com.ruoyi.technology.mapper.TechnologyBomStructureMapper;
import com.ruoyi.technology.mapper.TechnologyRoutingMapper;
import com.ruoyi.technology.pojo.TechnologyRouting;
+import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -33,9 +34,7 @@
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.RoundingMode;
-import java.time.LocalDate;
import java.time.LocalDateTime;
-import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
@@ -98,9 +97,10 @@
List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
if(!CollectionUtils.isEmpty(salesLedgerProducts)){
salesLedgerProducts.forEach(item -> {
- // 鍙戣揣淇℃伅锛堝彇鏈�鏂颁竴鏉★級
+ // 鍙戣揣淇℃伅锛堝彇鏈�鏂颁竴鏉★紝鍙煡璇㈠鏍搁�氳繃鎴栧凡鍙戣揣鐨勮褰曪級
ShippingInfo latestShippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
.eq(ShippingInfo::getSalesLedgerProductId, item.getId())
+ .in(ShippingInfo::getStatus, "瀹℃牳閫氳繃", "宸插彂璐�")
.orderByDesc(ShippingInfo::getCreateTime)
.last("limit 1"));
if(latestShippingInfo != null){
@@ -108,9 +108,10 @@
item.setExpressCompany(latestShippingInfo.getExpressCompany());
item.setExpressNumber(latestShippingInfo.getExpressNumber());
}
- // 杞︾墝鍙凤細鍙栨墍鏈夊彂璐ц褰曠殑杞︾墝鍙凤紝閫楀彿鎷兼帴
+ // 杞︾墝鍙凤細鍙栨墍鏈夊鏍搁�氳繃鎴栧凡鍙戣揣璁板綍鐨勮溅鐗屽彿锛岄�楀彿鎷兼帴
List<ShippingInfo> allShippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
.eq(ShippingInfo::getSalesLedgerProductId, item.getId())
+ .in(ShippingInfo::getStatus, "瀹℃牳閫氳繃", "宸插彂璐�")
.orderByAsc(ShippingInfo::getCreateTime));
if(!CollectionUtils.isEmpty(allShippingInfos)){
String carNumbers = allShippingInfos.stream()
@@ -227,7 +228,7 @@
*/
public void addProductionData(SalesLedgerProduct salesLedgerProduct) {
//鍏堝垽鏂浜у搧鏄惁闇�瑕佺敓浜�
- if (!salesLedgerProduct.getIsProduction()) {
+ if (!BooleanUtils.isTrue(salesLedgerProduct.getIsProduction())) {
return;
}
SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerProduct.getSalesLedgerId());
diff --git a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java
index 992860e..cc205b1 100644
--- a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java
+++ b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java
@@ -30,4 +30,7 @@
@Schema(description = "搴旀敹閲戦")
private BigDecimal receiptableAmount;
+ @Schema(description = "閫�璐ч噾棰�")
+ private BigDecimal returnAmount;
+
}
diff --git a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsVo.java b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsVo.java
index 7b8fc1a..a6c7d7f 100644
--- a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsVo.java
+++ b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsVo.java
@@ -24,7 +24,10 @@
private BigDecimal receiptPaymentAmount;
@Schema(description = "搴旀敹閲戦")
- //璇ュ鎴烽攢鍞簲鏀剁疮璁¢噾棰�=璐㈠姟(鍑哄簱-閫�璐�)
+ //璇ュ鎴烽攢鍞簲鏀剁疮璁¢噾棰�=鍒濆閲戦-鍥炴-閫�娆�
private BigDecimal receiptableAmount;
+ @Schema(description = "閫�璐ч噾棰�")
+ private BigDecimal returnAmount;
+
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
index 9ac5410..00161b5 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -21,6 +21,14 @@
import com.ruoyi.stock.execl.StockInRecordExportData;
import com.ruoyi.production.mapper.ProductionOrderPickMapper;
import com.ruoyi.production.pojo.ProductionOrderPick;
+import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
+import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper;
+import com.ruoyi.procurementrecord.pojo.ReturnManagement;
+import com.ruoyi.procurementrecord.pojo.ReturnSaleProduct;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.ShippingInfoMapper;
+import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.stock.mapper.StockInRecordMapper;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.mapper.StockUninventoryMapper;
@@ -45,6 +53,10 @@
private StockInventoryMapper stockInventoryMapper;
private StockUninventoryMapper stockUninventoryMapper;
private ProductionOrderPickMapper productionOrderPickMapper;
+ private ReturnSaleProductMapper returnSaleProductMapper;
+ private ReturnManagementMapper returnManagementMapper;
+ private ShippingInfoMapper shippingInfoMapper;
+ private SalesLedgerMapper salesLedgerMapper;
@Override
public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) {
@@ -285,6 +297,8 @@
stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto);
}
}
+ // 閿�鍞��璐у叆搴�:鎵e噺閿�鍞彴璐﹀疄闄呭悎鍚岄噾棰�(閫�璐х敓鏁�)
+ handleSalesReturnRefund(stockInRecord);
}
}
return ids.size();
@@ -335,4 +349,47 @@
return ids.size();
}
+
+ /**
+ * 閿�鍞��璐у叆搴撳鎵归�氳繃鏃�,鎵e噺瀵瑰簲閿�鍞彴璐︾殑瀹為檯鍚堝悓閲戦銆�
+ * 鍏宠仈閾�:stock_in_record.record_id = return_sale_product.id
+ * 鈫� return_management.shipping_id = shipping_info.id
+ * 鈫� shipping_info.sales_ledger_id = sales_ledger.id
+ * 鍙鐞� record_type 涓� 14(鍚堟牸)鎴� 15(涓嶅悎鏍�)鐨勯攢鍞��璐у叆搴撱��
+ */
+ private void handleSalesReturnRefund(StockInRecord stockInRecord) {
+ String recordType = stockInRecord.getRecordType();
+ if (!StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode().equals(recordType)
+ && !StockInQualifiedRecordTypeEnum.RETURN_UNSTOCK_IN.getCode().equals(recordType)) {
+ return;
+ }
+ if (stockInRecord.getRecordId() == null) {
+ return;
+ }
+ ReturnSaleProduct rsp = returnSaleProductMapper.selectById(stockInRecord.getRecordId());
+ if (rsp == null || rsp.getReturnManagementId() == null) {
+ return;
+ }
+ ReturnManagement rm = returnManagementMapper.selectById(rsp.getReturnManagementId());
+ if (rm == null || rm.getShippingId() == null) {
+ return;
+ }
+ ShippingInfo shippingInfo = shippingInfoMapper.selectById(rm.getShippingId());
+ if (shippingInfo == null || shippingInfo.getSalesLedgerId() == null) {
+ return;
+ }
+ SalesLedger salesLedger = salesLedgerMapper.selectById(shippingInfo.getSalesLedgerId());
+ if (salesLedger == null || salesLedger.getContractAmount() == null) {
+ return;
+ }
+ BigDecimal refund = rsp.getAmount() != null ? rsp.getAmount() : BigDecimal.ZERO;
+ if (refund.compareTo(BigDecimal.ZERO) == 0) {
+ return;
+ }
+ BigDecimal baseAmount = salesLedger.getNetContractAmount() != null
+ ? salesLedger.getNetContractAmount()
+ : salesLedger.getContractAmount();
+ salesLedger.setNetContractAmount(baseAmount.subtract(refund));
+ salesLedgerMapper.updateById(salesLedger);
+ }
}
diff --git a/src/main/resources/mapper/account/sales/AccountInvoiceApplicationMapper.xml b/src/main/resources/mapper/account/sales/AccountInvoiceApplicationMapper.xml
index 3c74a44..4121614 100644
--- a/src/main/resources/mapper/account/sales/AccountInvoiceApplicationMapper.xml
+++ b/src/main/resources/mapper/account/sales/AccountInvoiceApplicationMapper.xml
@@ -72,5 +72,26 @@
</foreach>
)
</select>
+ <select id="selectAccountInvoiceApplicationList"
+ resultType="com.ruoyi.account.bean.vo.sales.AccountInvoiceApplicationVo">
+ select
+ *
+ from (
+ select aia.*,
+ asi.id AS sales_invoice_id,
+ asi.status AS sales_invoice_status,
+ c.customer_name,
+ GROUP_CONCAT(sour.outbound_batches SEPARATOR ',') AS outboundBatches
+ from account_invoice_application aia
+ left join customer c on aia.customer_id = c.id
+ left join stock_out_record sour on FIND_IN_SET(sour.id, aia.stock_out_record_ids) > 0
+ left join account_sales_invoice asi on aia.id = asi.account_invoice_application_id
+ GROUP BY aia.id
+ )A
+ WHERE A.customer_id = #{customerId}
+ AND (COALESCE(A.sales_invoice_id,'') = '' OR A.sales_invoice_status = 1)
+ AND A.status = 1
+ order by A.id desc
+ </select>
</mapper>
diff --git a/src/main/resources/mapper/basic/CustomerMapper.xml b/src/main/resources/mapper/basic/CustomerMapper.xml
index 442173e..75327ef 100644
--- a/src/main/resources/mapper/basic/CustomerMapper.xml
+++ b/src/main/resources/mapper/basic/CustomerMapper.xml
@@ -126,24 +126,12 @@
<select id="customewTransactions" resultType="com.ruoyi.sales.vo.CustomerTransactionsVo">
select T1.customer_id,
c.customer_name,
- T1.contractAmounts - IFNULL(T4.returnAmount, 0) AS contractAmounts,
+ T1.contractAmounts AS contractAmounts,
IFNULL(T2.receiptPaymentAmount, 0) AS receiptPaymentAmount,
- IFNULL(T3.outboundAmount, 0) - IFNULL(T4.returnAmount, 0) AS receiptableAmount
+ T1.contractAmounts - (IFNULL(T2.receiptPaymentAmount, 0) - IFNULL(T4.returnAmount, 0)) AS receiptableAmount,
+ IFNULL(T4.returnAmount, 0) AS returnAmount
from (select customer_id, sum(contract_amount) as contractAmounts from sales_ledger group by customer_id) T1
left join (select customer_id, sum(collection_amount) as receiptPaymentAmount from account_sales_collection group by customer_id) T2 on T1.customer_id = T2.customer_id
- left join (
- SELECT
- sl.customer_id,
- sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
- FROM stock_out_record sor
- LEFT join shipping_info s on sor.record_id = s.id
- LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
- LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
- WHERE sor.record_type='13'
- and sor.approval_status=1
- and slp.type = 1
- group by sl.customer_id
- ) T3 on T3.customer_id=T1.customer_id
left join (
select
sl.customer_id,
@@ -167,9 +155,10 @@
select sl.id salesLedgerId,
sl.sales_contract_no,
sl.execution_date,
- sl.contract_amount - IFNULL(T3.returnAmount, 0) AS contract_amount,
+ sl.contract_amount AS contract_amount,
IFNULL(T1.receiptPaymentAmount, 0) AS receiptPaymentAmount,
- IFNULL(T2.outboundAmount, 0) - IFNULL(T3.returnAmount, 0) AS receiptableAmount
+ sl.contract_amount - (IFNULL(T1.receiptPaymentAmount, 0) - IFNULL(T3.returnAmount, 0)) AS receiptableAmount,
+ IFNULL(T3.returnAmount, 0) AS returnAmount
from sales_ledger sl
left join (
select
@@ -183,19 +172,6 @@
and sor.approval_status=1
group by sl.id
)T1 on T1.id = sl.id
- left join (
- SELECT
- sl.id,
- sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
- FROM stock_out_record sor
- left join shipping_info s on sor.record_id = s.id
- LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
- LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
- WHERE sor.record_type='13'
- and sor.approval_status=1
- and slp.type = 1
- group by sl.id
- )T2 on T2.id = sl.id
left join (
select sl.id,
sum(rm.refund_amount) as returnAmount
diff --git a/src/main/resources/mapper/basic/SupplierManageMapper.xml b/src/main/resources/mapper/basic/SupplierManageMapper.xml
index 810e137..56c6441 100644
--- a/src/main/resources/mapper/basic/SupplierManageMapper.xml
+++ b/src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -74,26 +74,10 @@
sm.supplier_name,
T1.contractAmounts,
IFNULL(T2.paymentAmount, 0) AS paymentAmount,
- IFNULL(T3.InboundAmount, 0) - IFNULL(T4.returnAmount, 0) AS payableAmount
+ T1.contractAmounts - (IFNULL(T2.paymentAmount, 0) - IFNULL(T4.returnAmount, 0)) AS payableAmount,
+ IFNULL(T4.returnAmount, 0) AS returnAmount
from (select supplier_id, sum(COALESCE(net_contract_amount, contract_amount)) as contractAmounts from purchase_ledger group by supplier_id) T1
left join (select supplier_id, sum(payment_amount) as paymentAmount from account_purchase_payment group by supplier_id) T2 on T1.supplier_id = T2.supplier_id
- left join (
- SELECT
- pl.supplier_id,
- sum(sir.stock_in_num * slp.tax_inclusive_unit_price) AS InboundAmount
- FROM stock_in_record sir
- -- 10 绫诲瀷鎵嶅叧鑱旇川妫�琛�
- LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
- -- 鍔ㄦ�佸叧鑱旈噰璐紙鑷姩閫傞厤 7 鍜� 10锛�
- LEFT JOIN purchase_ledger pl
- ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id)
- -- 浜у搧鍏宠仈涓嶅姩
- LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id
- -- 鏉′欢
- WHERE sir.approval_status = 1 AND slp.type = 2
- AND sir.record_type IN ('7','10')
- group by pl.supplier_id
- ) T3 on T3.supplier_id=T1.supplier_id
left join (
select
supplier_id,
@@ -116,7 +100,8 @@
pl.execution_date,
COALESCE(pl.net_contract_amount, pl.contract_amount) AS contract_amount,
IFNULL(T1.paymentAmount, 0) AS paymentAmount,
- IFNULL(T2.InboundAmount, 0) - IFNULL(T3.returnAmount, 0) AS payableAmount
+ COALESCE(pl.net_contract_amount, pl.contract_amount) - (IFNULL(T1.paymentAmount, 0) - IFNULL(T3.returnAmount, 0)) AS payableAmount,
+ IFNULL(T3.returnAmount, 0) AS returnAmount
from purchase_ledger pl
left join (
select
@@ -134,23 +119,6 @@
AND sir.record_type IN ('7','10')
group by pl.id
)T1 on T1.id = pl.id
- left join (
- SELECT
- pl.id,
- sum(sir.stock_in_num * slp.tax_inclusive_unit_price) AS InboundAmount
- FROM stock_in_record sir
- -- 10 绫诲瀷鎵嶅叧鑱旇川妫�琛�
- LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
- -- 鍔ㄦ�佸叧鑱旈噰璐紙鑷姩閫傞厤 7 鍜� 10锛�
- LEFT JOIN purchase_ledger pl
- ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id)
- -- 浜у搧鍏宠仈涓嶅姩
- LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id
- -- 鏉′欢
- WHERE sir.approval_status = 1 AND slp.type = 2
- AND sir.record_type IN ('7','10')
- group by pl.id
- )T2 on T2.id = pl.id
left join (
select pl.id,
sum(pro.total_amount) as returnAmount
diff --git a/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml b/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
index e15e4aa..6231005 100644
--- a/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
@@ -6,13 +6,30 @@
select rm.*,
c.customer_name,
si.shipping_no,
+ rm.shipping_type,
+ rm.truck_plate_no,
+ rm.express_company,
+ rm.express_no,
sl.project_name,
sl.sales_contract_no,
- sl.salesman
+ sl.salesman,
+ CASE
+ WHEN tempA.total_approval = 0 OR tempA.total_approval IS NULL THEN 0
+ WHEN tempA.approval_sum = tempA.total_approval THEN 1
+ ELSE 2
+ END AS stock_in_approval_status
from return_management rm
left join shipping_info si on rm.shipping_id = si.id
left join customer c on rm.customer_id = c.id
left join sales_ledger sl on si.sales_ledger_id = sl.id
+ LEFT JOIN (
+ SELECT
+ rsp.return_management_id,
+ COUNT(sir.id) AS total_approval,
+ SUM(CASE WHEN sir.approval_status = 1 THEN 1 ELSE 0 END) AS approval_sum
+ FROM return_sale_product rsp LEFT JOIN stock_in_record sir ON rsp.id = sir.record_id
+ GROUP BY rsp.return_management_id
+ ) tempA ON tempA.return_management_id = rm.id
<where>
<if test="req.returnNo != null and req.returnNo != ''">
and rm.return_no like concat('%',#{req.returnNo},'%')
@@ -45,6 +62,10 @@
select rm.*,
c.customer_name,
si.shipping_no,
+ rm.shipping_type,
+ rm.truck_plate_no,
+ rm.express_company,
+ rm.express_no,
sl.project_name,
sl.sales_contract_no,
sl.salesman
@@ -59,6 +80,10 @@
rm.return_no,
c.customer_name,
si.shipping_no,
+ rm.shipping_type,
+ rm.truck_plate_no,
+ rm.express_company,
+ rm.express_no,
rm.make_time,
rm.refund_amount,
rm.return_reason,
diff --git a/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml b/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
index 6b15d56..d104b21 100644
--- a/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ReturnSaleProductMapper.xml
@@ -19,8 +19,9 @@
sor.outbound_batches,
sor.stock_out_num,
sor.batch_no,
- GREATEST(sor.stock_out_num - COALESCE(rs1.total_return_num1, 0), 0) AS un_quantity,
- COALESCE(rs.total_return_num, 0) AS total_return_num
+ GREATEST( sor.stock_out_num - COALESCE ( rs.total_return_num, 0 ), 0 ) AS un_quantity,
+ COALESCE ( rs.pending_return_num, 0 ) AS pending_return_num ,
+ COALESCE ( rs.return_num, 0 ) AS total_return_num
FROM return_sale_product rsp
LEFT JOIN return_management rm ON rm.id = rsp.return_management_id
LEFT JOIN shipping_info si ON si.id = rm.shipping_id
@@ -30,15 +31,11 @@
left join product_model pm on slp.product_model_id = pm.id
LEFT JOIN product p on pm.product_id = p.id
LEFT JOIN (SELECT stock_out_record_id,
- SUM(num) AS total_return_num
+ SUM(num) AS total_return_num,
+ SUM( CASE WHEN return_management_id =#{returnManagementId} AND STATUS = 0 THEN num ELSE 0 END ) AS pending_return_num ,
+ SUM( CASE WHEN STATUS = 1 THEN num ELSE 0 END ) AS return_num
FROM return_sale_product
- WHERE 1 = 1 and return_management_id = #{returnManagementId}
GROUP BY stock_out_record_id) rs ON rs.stock_out_record_id = sor.id
- LEFT JOIN (SELECT stock_out_record_id,
- SUM(num) AS total_return_num1
- FROM return_sale_product
- WHERE 1 = 1
- GROUP BY stock_out_record_id) rs1 ON rs1.stock_out_record_id = sor.id
where rm.id =#{returnManagementId}
</select>
<select id="listReturnSaleProduct" resultType="com.ruoyi.procurementrecord.bean.dto.ReturnSaleProductDto">
diff --git a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
index 60d6f4a..8b94eb7 100644
--- a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -139,6 +139,46 @@
ORDER BY result.entry_date DESC
</select>
+ <select id="selectReturnablePurchaseLedgerList" resultType="com.ruoyi.purchase.pojo.PurchaseLedger">
+ SELECT DISTINCT pl.*
+ FROM purchase_ledger pl
+ WHERE 1 = 1
+ <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''">
+ AND pl.purchase_contract_number LIKE CONCAT('%', #{c.purchaseContractNumber}, '%')
+ </if>
+ <if test="c.supplierId != null">
+ AND pl.supplier_id = #{c.supplierId}
+ </if>
+ <if test="c.approvalStatus != null">
+ AND pl.approval_status = #{c.approvalStatus}
+ </if>
+ AND EXISTS (
+ SELECT 1
+ FROM stock_in_record sir
+ LEFT JOIN quality_inspect qi
+ ON sir.record_type = '10'
+ AND sir.record_id = qi.id
+ LEFT JOIN sales_ledger_product slp
+ ON slp.sales_ledger_id = pl.id
+ AND slp.product_model_id = sir.product_model_id
+ AND slp.type = 2
+ LEFT JOIN (
+ SELECT stock_in_record_id, SUM(return_quantity) AS total_return_num
+ FROM purchase_return_order_products
+ GROUP BY stock_in_record_id
+ ) rs ON rs.stock_in_record_id = sir.id
+ WHERE sir.approval_status = 1
+ AND sir.record_type IN ('7','10')
+ AND (
+ (sir.record_type = '7' AND sir.record_id = pl.id)
+ OR (sir.record_type = '10' AND qi.purchase_ledger_id = pl.id)
+ )
+ AND slp.id IS NOT NULL
+ AND GREATEST(sir.stock_in_num - COALESCE(rs.total_return_num, 0), 0) > 0
+ )
+ ORDER BY pl.entry_date DESC
+ </select>
+
<select id="selectTotalPurchaseAmount" resultType="java.math.BigDecimal">
SELECT IFNULL(SUM(contract_amount), 0)
FROM purchase_ledger
diff --git a/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml b/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
index 2f782ff..8ca4903 100644
--- a/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
@@ -8,6 +8,10 @@
<result column="no" property="no" />
<result column="return_type" property="returnType" />
<result column="supplier_id" property="supplierId" />
+ <result column="shipping_type" property="shippingType" />
+ <result column="truck_plate_no" property="truckPlateNo" />
+ <result column="express_company" property="expressCompany" />
+ <result column="express_no" property="expressNo" />
<result column="project_id" property="projectId" />
<result column="project_phase" property="projectPhase" />
<result column="prepared_at" property="preparedAt" />
@@ -22,7 +26,18 @@
SELECT
pro.*,
sm.supplier_name as supplier_name,
- pl.purchase_contract_number as purchase_contract_number
+ pl.purchase_contract_number as purchase_contract_number,
+ CASE
+ WHEN EXISTS (
+ SELECT 1
+ FROM purchase_return_order_products prop
+ INNER JOIN stock_out_record sor ON sor.record_id = prop.id
+ AND sor.record_type = '9'
+ AND sor.approval_status = 1
+ WHERE prop.purchase_return_order_id = pro.id
+ ) THEN 1
+ ELSE 0
+ END AS stock_out_approved
FROM purchase_return_orders pro
LEFT JOIN supplier_manage sm ON pro.supplier_id = sm.id
LEFT JOIN purchase_ledger pl ON pl.id = pro.purchase_ledger_id
@@ -59,6 +74,10 @@
pro.no returnNo,
t.inboundBatches,
sm.supplier_name,
+ pro.shipping_type,
+ pro.truck_plate_no,
+ pro.express_company,
+ pro.express_no,
pro.prepared_at,
pro.total_amount,
CASE pro.return_type WHEN 0 THEN '閫�璐ч��娆�' WHEN 1 THEN '鎷掓敹' END AS returnType,
@@ -100,13 +119,22 @@
sir.stock_in_num,
sir.batch_no,
slp.tax_inclusive_unit_price,
- GREATEST(sir.stock_in_num - COALESCE(rs.total_return_num, 0), 0) AS un_quantity,
- COALESCE(rs.total_return_num, 0) AS total_return_num
+ GREATEST(
+ sir.stock_in_num
+ - COALESCE(rs.total_return_num, 0)
+ - COALESCE(so.total_sale_out_num, 0),
+ 0
+ ) AS un_quantity,
+ COALESCE(rs.total_return_num, 0) AS total_return_num,
+ COALESCE(so.total_sale_out_num, 0) AS saleOutQuantity
FROM stock_in_record sir
LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
LEFT JOIN purchase_ledger pl
ON pl.id = IF(sir.record_type = 7, sir.record_id, qi.purchase_ledger_id)
- LEFT JOIN sales_ledger_product slp ON pl.id = slp.sales_ledger_id
+ LEFT JOIN sales_ledger_product slp
+ ON pl.id = slp.sales_ledger_id
+ AND slp.product_model_id = sir.product_model_id
+ AND slp.type = 2
LEFT JOIN (
SELECT
stock_in_record_id,
@@ -116,7 +144,24 @@
WHERE 1=1
GROUP BY stock_in_record_id
) rs ON rs.stock_in_record_id = sir.id
- WHERE sir.approval_status = 1 AND slp.type = 2
+ LEFT JOIN (
+ SELECT
+ inv.batch_no,
+ inv.product_model_id,
+ SUM(spd.quantity) AS total_sale_out_num
+ FROM shipping_product_detail spd
+ INNER JOIN shipping_info si
+ ON si.id = spd.shipping_info_id
+ INNER JOIN stock_out_record sor
+ ON sor.record_id = si.id
+ AND sor.record_type = '13'
+ AND sor.approval_status IN (0, 1, 3)
+ INNER JOIN stock_inventory inv
+ ON inv.id = spd.stock_inventory_id
+ GROUP BY inv.batch_no, inv.product_model_id
+ ) so ON so.product_model_id = sir.product_model_id
+ AND (so.batch_no = sir.batch_no OR (so.batch_no IS NULL AND sir.batch_no IS NULL))
+ WHERE sir.approval_status = 1
AND sir.record_type IN ('7','10')
and pl.id = #{purchaseLedgerId}
</select>
@@ -135,8 +180,14 @@
slp.tax_inclusive_unit_price,
prop.return_quantity,
prop.purchase_return_order_id,
- GREATEST(sir.stock_in_num - COALESCE(rs1.total_return_num1, 0), 0) AS un_quantity,
- COALESCE(rs.total_return_num, 0) AS total_return_num
+ GREATEST(
+ sir.stock_in_num
+ - COALESCE(rs.total_return_num, 0)
+ - COALESCE(so.total_sale_out_num, 0),
+ 0
+ ) AS un_quantity,
+ COALESCE(rs.total_return_num, 0) AS total_return_num,
+ COALESCE(so.total_sale_out_num, 0) AS saleOutQuantity
from purchase_return_order_products prop
left join purchase_return_orders pro on prop.purchase_return_order_id = pro.id
LEFT JOIN stock_in_record sir ON prop.stock_in_record_id = sir.id and sir.record_type in ('7','10')
@@ -144,13 +195,25 @@
LEFT JOIN (SELECT stock_in_record_id,
SUM(return_quantity) AS total_return_num
FROM purchase_return_order_products
- WHERE 1 = 1 and purchase_return_order_id = #{id}
+ WHERE 1 = 1
GROUP BY stock_in_record_id) rs ON rs.stock_in_record_id = sir.id
- LEFT JOIN (SELECT stock_in_record_id,
- SUM(return_quantity) AS total_return_num1
- FROM purchase_return_order_products
- WHERE 1 = 1 and purchase_return_order_id = #{id}
- GROUP BY stock_in_record_id) rs1 ON rs1.stock_in_record_id = sir.id
+ LEFT JOIN (
+ SELECT
+ inv.batch_no,
+ inv.product_model_id,
+ SUM(spd.quantity) AS total_sale_out_num
+ FROM shipping_product_detail spd
+ INNER JOIN shipping_info si
+ ON si.id = spd.shipping_info_id
+ INNER JOIN stock_out_record sor
+ ON sor.record_id = si.id
+ AND sor.record_type = '13'
+ AND sor.approval_status IN (0, 1, 3)
+ INNER JOIN stock_inventory inv
+ ON inv.id = spd.stock_inventory_id
+ GROUP BY inv.batch_no, inv.product_model_id
+ ) so ON so.product_model_id = sir.product_model_id
+ AND (so.batch_no = sir.batch_no OR (so.batch_no IS NULL AND sir.batch_no IS NULL))
where pro.id = #{id}
</select>
</mapper>
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index 8787706..9e6839f 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -34,7 +34,9 @@
ELSE 0
END as has_sufficient_stock,
(IFNULL(T1.quantity, 0) - IFNULL(t3.shipped_quantity, 0) - IFNULL(t5.pending_approval_quantity, 0)) as no_quantity,
+ IFNULL(t3.shipped_quantity, 0) as shipped_quantity,
IFNULL(t6.return_quantity, 0) as return_quantity,
+ IFNULL(t4.approved_stock_in_num, 0) as approved_stock_in_num,
IFNULL(t5.pending_approval_quantity, 0) as pending_approval_quantity,
CASE
WHEN IFNULL(t3.shipped_quantity, 0) = 0 AND IFNULL(t5.pending_approval_quantity, 0) = 0 THEN '寰呭彂璐�'
@@ -56,16 +58,59 @@
GROUP BY product_model_id
) t2 ON T1.product_model_id = t2.product_model_id
LEFT JOIN (
- SELECT si.sales_ledger_product_id, IFNULL(SUM(spd.quantity), 0) as shipped_quantity
+ SELECT
+ slp.id AS sales_ledger_product_id,
+ IFNULL(SUM(so.total_sale_out_num), 0) AS shipped_quantity
+ FROM sales_ledger_product slp
+ LEFT JOIN (
+ SELECT
+ pl.id AS purchase_ledger_id,
+ sir.product_model_id,
+ SUM(spd.quantity) AS total_sale_out_num
+ FROM shipping_product_detail spd
+ INNER JOIN shipping_info si
+ ON si.id = spd.shipping_info_id
+ INNER JOIN stock_out_record sor
+ ON sor.record_id = si.id
+ AND TRIM(sor.record_type) = '13'
+ AND sor.approval_status IN (0, 1, 3)
+ INNER JOIN stock_inventory inv
+ ON inv.id = spd.stock_inventory_id
+ INNER JOIN stock_in_record sir
+ ON sir.product_model_id = inv.product_model_id
+ AND (
+ (sir.batch_no IS NOT NULL AND sir.batch_no = inv.batch_no)
+ OR (sir.batch_no IS NULL AND inv.batch_no IS NULL)
+ )
+ AND sir.approval_status = 1
+ AND sir.record_type IN ('7', '10')
+ LEFT JOIN quality_inspect qi
+ ON sir.record_type = '10'
+ AND sir.record_id = qi.id
+ LEFT JOIN purchase_ledger pl
+ ON pl.id = IF(sir.record_type = '7', sir.record_id, qi.purchase_ledger_id)
+ WHERE si.status IN ('瀹℃牳閫氳繃', '宸插彂璐�')
+ AND pl.id IS NOT NULL
+ GROUP BY pl.id, sir.product_model_id
+ ) so ON so.purchase_ledger_id = slp.sales_ledger_id
+ AND so.product_model_id = slp.product_model_id
+ WHERE slp.type = 2
+ GROUP BY slp.id
+
+ UNION ALL
+
+ -- 閿�鍞彴璐�(type=1): shipping_info 鐩存帴鎸� sales_ledger_product_id,鍙粺璁″嚭搴撳鏍搁�氳繃(approval_status=1)鐨勫彂璐ч噺,涓� t5 鐨� pending 閫昏緫浜掕ˉ
+ SELECT
+ si.sales_ledger_product_id AS sales_ledger_product_id,
+ IFNULL(SUM(spd.quantity), 0) AS shipped_quantity
FROM shipping_info si
INNER JOIN shipping_product_detail spd ON si.id = spd.shipping_info_id
+ INNER JOIN stock_out_record sor
+ ON sor.record_id = si.id
+ AND TRIM(sor.record_type) = '13'
+ AND sor.approval_status = 1
WHERE si.status IN ('瀹℃牳閫氳繃', '宸插彂璐�')
- AND EXISTS (
- SELECT 1 FROM stock_out_record sor
- WHERE sor.record_id = si.id
- AND TRIM(sor.record_type) = '13'
- AND sor.approval_status = 1
- )
+ AND si.sales_ledger_product_id IS NOT NULL
GROUP BY si.sales_ledger_product_id
) t3 ON t3.sales_ledger_product_id = T1.id
LEFT JOIN (
@@ -115,10 +160,27 @@
GROUP BY si.sales_ledger_product_id
) t5 ON t5.sales_ledger_product_id = T1.id
LEFT JOIN (
- SELECT prop.sales_ledger_product_id, IFNULL(SUM(prop.return_quantity), 0) AS return_quantity
- FROM purchase_return_order_products prop
- INNER JOIN purchase_return_orders pro ON prop.purchase_return_order_id = pro.id
- GROUP BY prop.sales_ledger_product_id
+ SELECT
+ prop.sales_ledger_product_id,
+ IFNULL(SUM(prop.return_quantity), 0) AS return_quantity
+ FROM purchase_return_order_products prop
+ LEFT JOIN purchase_return_orders pro
+ ON pro.id = prop.purchase_return_order_id
+ GROUP BY prop.sales_ledger_product_id
+
+ UNION ALL
+
+ SELECT
+ si.sales_ledger_product_id,
+ IFNULL(SUM(rsp.num), 0) AS return_quantity
+ FROM return_sale_product rsp
+ INNER JOIN return_management rm ON rm.id = rsp.return_management_id
+ INNER JOIN shipping_info si ON si.id = rm.shipping_id
+ INNER JOIN stock_in_record sir ON sir.record_id = rsp.id
+ AND TRIM(sir.record_type) IN ('14','15')
+ AND sir.approval_status = 1
+ WHERE si.sales_ledger_product_id IS NOT NULL
+ GROUP BY si.sales_ledger_product_id
) t6 ON t6.sales_ledger_product_id = T1.id
left join product_model pm ON T1.product_model_id = pm.id
left join product p ON pm.product_id = p.id
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 6fc1842..8775933 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -78,7 +78,8 @@
sor.batch_no,
slp.tax_inclusive_unit_price,
GREATEST(sor.stock_out_num - COALESCE(rs.total_return_num, 0), 0) AS un_quantity,
- COALESCE(rs.total_return_num, 0) AS total_return_num
+ COALESCE(rs.return_num, 0) AS total_return_num,
+ COALESCE(rs.pending_return_num, 0) AS pending_return_num
FROM shipping_info si
LEFT JOIN shipping_product_detail spd ON spd.shipping_info_id = si.id
LEFT JOIN stock_out_record sor ON sor.record_id = si.id and sor.record_type = '13'
@@ -86,7 +87,9 @@
LEFT JOIN (
SELECT
stock_out_record_id,
- SUM(num) AS total_return_num
+ SUM(num) AS total_return_num,
+ SUM( CASE WHEN rsp.STATUS = 0 THEN rsp.num ELSE 0 END ) AS pending_return_num ,
+ SUM( CASE WHEN rsp.STATUS = 1 THEN rsp.num ELSE 0 END ) AS return_num
FROM return_sale_product rsp
left join return_management rm on rm.id = rsp.return_management_id
left join shipping_info si on si.id = rm.shipping_id
diff --git a/src/main/resources/mapper/stock/StockInRecordMapper.xml b/src/main/resources/mapper/stock/StockInRecordMapper.xml
index a3bf3f9..3e10e2b 100644
--- a/src/main/resources/mapper/stock/StockInRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -21,9 +21,9 @@
pm.unit,
u.nick_name as createBy,
CASE
- WHEN #{params.topParentProductId} = 278 AND TRIM(sir.record_type) = '7' THEN
+ WHEN TRIM(sir.record_type) = '7' THEN
COALESCE(pl_by_product.purchase_contract_number, pl_direct.purchase_contract_number)
- WHEN #{params.topParentProductId} = 278 AND TRIM(sir.record_type) = '10' THEN
+ WHEN TRIM(sir.record_type) = '10' THEN
pl_by_quality.purchase_contract_number
WHEN #{params.topParentProductId} = 276 THEN
CASE
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index ed780a7..ac9c49b 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -352,7 +352,11 @@
su.nick_name as create_by
from
stock_in_record sir
- left join stock_inventory si on sir.product_model_id = si.product_model_id
+ left join (
+ select product_model_id, sum(qualitity) as qualitity
+ from stock_inventory
+ group by product_model_id
+ ) si on sir.product_model_id = si.product_model_id
left join product_model pm on sir.product_model_id = pm.id
left join product p on pm.product_id = p.id
left join sys_user su on sir.create_user = su.user_id
--
Gitblit v1.9.3