From 6f287ccb0f8df857fbce894bd241cdf77690cecb Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 20 一月 2026 15:23:11 +0800
Subject: [PATCH] Merge branch 'jtwy' of http://114.132.189.42:9002/r/product-inventory-management-after into sqd-hb
---
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | 177 ++++----
src/main/resources/mapper/production/ProductWorkOrderMapper.xml | 30 -
src/main/resources/mapper/production/ProductionProductInputMapper.xml | 5
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 30 +
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java | 1
src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java | 2
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 247 +++++++++---
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java | 4
src/main/resources/mapper/basic/ProductModelMapper.xml | 63 +++
src/main/resources/mapper/production/ProductOrderMapper.xml | 3
src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java | 10
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 171 --------
src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java | 2
src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java | 32 +
src/main/resources/application-dev.yml | 10
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java | 2
src/main/java/com/ruoyi/production/service/ProcessRouteService.java | 2
src/main/java/com/ruoyi/basic/pojo/ProductModel.java | 4
src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java | 9
src/main/java/com/ruoyi/home/dto/ProductionTurnoverDto.java | 27 +
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 2
src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java | 3
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java | 49 +-
src/main/java/com/ruoyi/quality/pojo/QualityInspect.java | 1
src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java | 25
src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java | 152 ++++++--
src/main/java/com/ruoyi/quality/controller/QualityInspectController.java | 8
src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java | 2
doc/20260119-procurement_record_storage.sql | 2
src/main/resources/mapper/production/ProductStructureMapper.xml | 6
src/main/resources/mapper/production/ProductionProductMainMapper.xml | 13
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml | 1
src/main/java/com/ruoyi/production/controller/ProductBomController.java | 2
src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java | 7
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java | 1
35 files changed, 655 insertions(+), 450 deletions(-)
diff --git a/doc/20260119-procurement_record_storage.sql b/doc/20260119-procurement_record_storage.sql
new file mode 100644
index 0000000..923bbd3
--- /dev/null
+++ b/doc/20260119-procurement_record_storage.sql
@@ -0,0 +1,2 @@
+alter table procurement_record_storage
+ add quality_inspect_id bigint null comment '璐ㄦid';
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
index a1669f1..05d5792 100644
--- a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
+++ b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import org.apache.ibatis.annotations.Param;
@@ -17,6 +18,8 @@
IPage<ProductModel> listPageProductModel(Page<ProductModel> page, @Param("c") ProductModel productModel);
+ IPage<ProductModel> listPageProductionStock(Page<ProductModel> page, @Param("req") ProcurementPageDto req);
+
ProductModel selectLatestRecord();
}
diff --git a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
index 3e4fef7..069b665 100644
--- a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
+++ b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -6,6 +6,7 @@
import lombok.Data;
import java.math.BigDecimal;
+import java.time.LocalDateTime;
@Data
@TableName("product_model")
@@ -59,4 +60,7 @@
@TableField(exist = false)
@Excel(name = "鍓╀綑搴撳瓨")
private BigDecimal stockQuantity;
+
+ @TableField(exist = false)
+ private LocalDateTime createTime;
}
diff --git a/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java b/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java
index 99d9e61..88fe4b6 100644
--- a/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java
+++ b/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java
@@ -12,14 +12,14 @@
@ApiModel
public class ProductionProgressDto {
@ApiModelProperty("鎬昏鍗曟暟")
- private Integer totalOrderCount;
+ private Long totalOrderCount;
@ApiModelProperty("宸插畬鎴愯鍗曟暟")
- private Integer completedOrderCount;
+ private Long completedOrderCount;
@ApiModelProperty("鏈畬鎴愯鍗曟暟")
- private Integer uncompletedOrderCount;
- @ApiModelProperty("鎬讳綋瀹屾垚杩涘害")
- private BigDecimal completedProgressCount;
+ private Long uncompletedOrderCount;
+ @ApiModelProperty("閮ㄥ垎瀹屾垚璁㈠崟鏁�")
+ private Long partialCompletedOrderCount;
@ApiModelProperty("璁㈠崟璇︽儏")
private List<ProductOrderDto> completedOrderDetails;
}
diff --git a/src/main/java/com/ruoyi/home/dto/ProductionTurnoverDto.java b/src/main/java/com/ruoyi/home/dto/ProductionTurnoverDto.java
new file mode 100644
index 0000000..41ad82b
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/ProductionTurnoverDto.java
@@ -0,0 +1,27 @@
+package com.ruoyi.home.dto;
+
+import com.ruoyi.production.dto.ProductOrderDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel
+public class ProductionTurnoverDto {
+ @ApiModelProperty("鎬诲湪鍒舵暟閲�")
+ private Long totalOrderCount;
+
+ @ApiModelProperty("骞冲潎鍛ㄨ浆澶╂暟")
+ private BigDecimal averageTurnoverDays;
+ @ApiModelProperty("鍛ㄨ浆鏁堢巼")
+ private BigDecimal turnoverEfficiency;
+
+ @ApiModelProperty("宸ュ簭璇︽儏")
+ private List<String> processDetails;
+
+ @ApiModelProperty("宸ュ簭瀵瑰簲鐨勬暟閲忚鎯�")
+ private List<Long> processQuantityDetails;
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
index 919a764..6cdd36b 100644
--- a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -235,8 +235,8 @@
@GetMapping("/listPageProductionStock")
@Log(title = "搴撳瓨绠$悊-鎴愬搧搴撳瓨", businessType = BusinessType.OTHER)
- public AjaxResult listPageProductionStock(Page page) {
- IPage<ProductModel> result = procurementRecordService.listPageProductionStock(page);
+ public AjaxResult listPageProductionStock(Page page, ProcurementPageDto procurementDto) {
+ IPage<ProductModel> result = procurementRecordService.listPageProductionStock(page,procurementDto);
return AjaxResult.success(result);
}
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java
index 451c85c..d9e32e3 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java
@@ -22,6 +22,7 @@
private String typeName;
private Integer purchaseLedgerId;
+ private Long qualityInspectId;
private Long qualityInspectId;
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
index 9bfda29..29e77c4 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -101,6 +101,5 @@
*/
private Long productModelId;
-
private Long qualityInspectId;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
index 4c3ffee..6bd187c 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -60,7 +60,7 @@
BigDecimal getProcurementAmount(Long salesProductId);
InventoryInformationDto getReportList();
- IPage<ProductModel> listPageProductionStock(Page page);
+ IPage<ProductModel> listPageProductionStock(Page page, ProcurementPageDto procurementDto);
IPage<ProcurementPageDto> listPageByProductProduction(Page page, ProcurementPageDto procurementDto);
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index a238ae6..2a3ea27 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -62,13 +62,13 @@
// 璁$畻寰呭叆搴撴暟閲�
// 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
List<Integer> collect = procurementDtos.stream().map(ProcurementDto::getId).collect(Collectors.toList());
- if (CollectionUtils.isEmpty(collect)) {
+ if(CollectionUtils.isEmpty( collect)){
return procurementDtos;
}
LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
procurementRecordLambdaQueryWrapper.in(ProcurementRecordStorage::getSalesLedgerProductId, collect);
List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(procurementRecordLambdaQueryWrapper);
- if (CollectionUtils.isEmpty(procurementRecordStorages)) {
+ if(CollectionUtils.isEmpty(procurementRecordStorages)){
return procurementDtos;
}
for (ProcurementDto dto : procurementDtos) {
@@ -78,7 +78,7 @@
.collect(Collectors.toList());
// 濡傛灉娌℃湁鐩稿叧鐨勫叆搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
- if (CollectionUtils.isEmpty(collect1)) {
+ if(CollectionUtils.isEmpty(collect1)){
dto.setQuantity0(dto.getQuantity());
continue;
}
@@ -129,9 +129,9 @@
// 鍒犻櫎鎵�鏈夊搴旂殑鍑哄簱璁板綍
LambdaQueryWrapper<ProcurementRecordOut> procurementRecordOutLambdaQueryWrapper = new LambdaQueryWrapper<>();
procurementRecordOutLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, procurementDto.getIds())
- .eq(ProcurementRecordOut::getType, procurementDto.getType());
+ .eq(ProcurementRecordOut::getType,procurementDto.getType());
List<ProcurementRecordOut> procurementRecordOuts = procurementRecordOutMapper.selectList(procurementRecordOutLambdaQueryWrapper);
- if (!CollectionUtils.isEmpty(procurementRecordOuts)) {
+ if(!CollectionUtils.isEmpty(procurementRecordOuts)){
procurementRecordOutMapper.deleteBatchIds(procurementRecordOuts.stream().map(ProcurementRecordOut::getId).collect(Collectors.toList()));
}
return 0;
@@ -388,7 +388,7 @@
currentStock += dto.getInboundNum().intValue() - totalInboundNum.intValue();
values.add(currentStock);
// 璁$畻鍛ㄨ浆鐜�
- if (totalIn > 0) {
+ if(totalIn > 0){
turnoverRate = totalOut * 100 / totalIn;
}
}
@@ -766,7 +766,7 @@
.eq(ProcurementRecordStorage::getType, procurementDto.getType());
Long aLong = procurementRecordMapper.selectCount(procurementRecordLambdaQueryWrapper);
SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(detail.getId());
- if (ObjectUtils.isNull(detail.getProductModelId())) {
+ if (ObjectUtils.isNull(detail.getProductModelId())){
detail.setProductModelId(salesLedgerProduct.getProductModelId());
}
ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder()
@@ -783,7 +783,7 @@
.updateUser(loginUser.getUserId())
.createBy(procurementDto.getNickName())
.productModelId(detail.getProductModelId())
- .qualityInspectId(ObjectUtils.isNotNull(procurementDto.getQualityInspectId()) ? procurementDto.getQualityInspectId() : 0L);
+ .qualityInspectId(ObjectUtils.isNotNull(procurementDto.getQualityInspectId())?procurementDto.getQualityInspectId():0L);
this.save(procurementRecordBuilder.build());
// 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺
// LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -805,14 +805,14 @@
// 璁$畻寰呭叆搴撴暟閲�
// 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList());
- if (CollectionUtils.isEmpty(collect)) {
+ if(CollectionUtils.isEmpty( collect)){
return procurementPageDtoIPage;
}
LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect)
.eq(ProcurementRecordOut::getType, 1);
List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
- if (CollectionUtils.isEmpty(procurementRecords)) {
+ if(CollectionUtils.isEmpty( procurementRecords)){
return procurementPageDtoIPage;
}
for (ProcurementPageDto dto : procurementPageDtos) {
@@ -822,7 +822,7 @@
.collect(Collectors.toList());
// 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
- if (CollectionUtils.isEmpty(collect1)) {
+ if(CollectionUtils.isEmpty(collect1)){
dto.setInboundNum0(dto.getInboundNum());
continue;
}
@@ -845,14 +845,14 @@
// 璁$畻寰呭叆搴撴暟閲�
// 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
- if (CollectionUtils.isEmpty(collect)) {
+ if(CollectionUtils.isEmpty( collect)){
return procurementPageDtoCopyIPage;
}
LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
- procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, 1);
+ procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType,1);
List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
- if (CollectionUtils.isEmpty(procurementRecords)) {
+ if(CollectionUtils.isEmpty( procurementRecords)){
return procurementPageDtoCopyIPage;
}
for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
@@ -862,7 +862,7 @@
.collect(Collectors.toList());
// 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
- if (CollectionUtils.isEmpty(collect1)) {
+ if(CollectionUtils.isEmpty(collect1)){
dto.setInboundNum0(dto.getInboundNum());
dto.setTotalInboundNum(BigDecimal.ZERO);
continue;
@@ -877,7 +877,7 @@
// 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
// 搴撳瓨浠峰��
- if (dto.getUnitPrice() != null) {
+ if(dto.getUnitPrice() != null){
dto.setTotalPrice(dto.getInboundNum0().multiply(dto.getUnitPrice()));
}
}
@@ -885,15 +885,8 @@
}
@Override
- public IPage<ProductModel> listPageProductionStock(Page page) {
- ProductModel productModel = new ProductModel();
- IPage<ProductModel> iPage = productModelMapper.listPageProductModel(page, productModel);
- iPage.getRecords().forEach(item -> {
- item.setInboundNum(stockUtils.getStockQuantity(item.getId()).get("inboundNum"));
- item.setOutboundNum(stockUtils.getStockQuantity(item.getId()).get("outboundNum"));
- item.setStockQuantity(stockUtils.getStockQuantity(item.getId()).get("stockQuantity"));
- });
- return iPage;
+ public IPage<ProductModel> listPageProductionStock(Page page, ProcurementPageDto dto) {
+ return productModelMapper.listPageProductionStock(page, dto);
}
@@ -906,14 +899,14 @@
// 璁$畻寰呭叆搴撴暟閲�
// 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList());
- if (CollectionUtils.isEmpty(collect)) {
+ if(CollectionUtils.isEmpty( collect)){
return procurementPageDtoIPage;
}
LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect)
.eq(ProcurementRecordOut::getType, 4);
List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
- if (CollectionUtils.isEmpty(procurementRecords)) {
+ if(CollectionUtils.isEmpty( procurementRecords)){
return procurementPageDtoIPage;
}
for (ProcurementPageDto dto : procurementPageDtos) {
@@ -923,7 +916,7 @@
.collect(Collectors.toList());
// 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
- if (CollectionUtils.isEmpty(collect1)) {
+ if(CollectionUtils.isEmpty(collect1)){
dto.setInboundNum0(dto.getInboundNum());
continue;
}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductBomController.java b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
index 6352640..cc0a242 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductBomController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
@@ -9,10 +9,12 @@
import com.ruoyi.production.dto.ProductBomDto;
import com.ruoyi.production.pojo.ProcessRoute;
import com.ruoyi.production.pojo.ProductBom;
+import com.ruoyi.production.pojo.ProductProcess;
import com.ruoyi.production.pojo.ProductProcessRoute;
import com.ruoyi.production.service.ProcessRouteService;
import com.ruoyi.production.service.ProductBomService;
import com.ruoyi.production.service.ProductProcessRouteService;
+import com.ruoyi.production.service.ProductProcessService;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
index fdf91bb..323e332 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -4,6 +4,7 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
import com.ruoyi.production.service.ProductionProductMainService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -12,6 +13,7 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
import java.util.List;
@RequestMapping("productionProductMain")
diff --git a/src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java b/src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java
index bfcd8af..fdb0575 100644
--- a/src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java
+++ b/src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java
@@ -2,11 +2,13 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.pojo.AccountExpense;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.production.dto.ProductOrderDto;
import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
import com.ruoyi.production.service.impl.SalesLedgerProductionAccountingServiceImpl;
import io.swagger.annotations.Api;
diff --git a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
index f7e7dba..9233b87 100644
--- a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
+++ b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
@@ -8,6 +8,8 @@
import java.util.List;
+import java.util.List;
+
public interface ProcessRouteService extends IService<ProcessRoute> {
IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto);
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
index 78ee944..b49afc7 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -8,9 +8,14 @@
import com.ruoyi.production.mapper.ProcessRouteItemMapper;
import com.ruoyi.production.mapper.ProcessRouteMapper;
import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.mapper.ProductProcessRouteMapper;
import com.ruoyi.production.pojo.ProcessRoute;
import com.ruoyi.production.pojo.ProcessRouteItem;
import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductProcessRoute;
import com.ruoyi.production.service.ProcessRouteService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -20,6 +25,8 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
+import java.util.Arrays;
+import java.util.List;
@Service
@AllArgsConstructor
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 0738d94..a185a46 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -32,6 +32,8 @@
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import oshi.driver.mac.net.NetStat;
import java.math.BigDecimal;
import java.time.LocalDate;
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index 1d76fe2..378a9c3 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
@@ -24,6 +25,7 @@
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -192,15 +194,27 @@
*/
@GetMapping("/listPage")
public AjaxResult listPage(Page page, PurchaseLedgerDto purchaseLedger) {
- IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = purchaseLedgerService.selectPurchaseLedgerListPage(page ,purchaseLedger);
- //杩囨护鎺塧pprovalStatus=3鐨勮褰�
- purchaseLedgerDtoIPage.getRecords().removeIf(purchaseLedgerDto -> purchaseLedgerDto.getApprovalStatus() == 3);
- purchaseLedgerDtoIPage.getRecords().forEach(purchaseLedgerDto -> {
- if (purchaseLedgerDto.getUnReceiptPaymentAmount().compareTo(BigDecimal.ZERO) == 0) {
- purchaseLedgerDto.setUnReceiptPaymentAmount(purchaseLedgerDto.getContractAmount());
- }
- });
- return AjaxResult.success(purchaseLedgerDtoIPage);
+ IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = Optional.ofNullable(
+ purchaseLedgerService.selectPurchaseLedgerListPage(page, purchaseLedger)
+ ).orElse(new Page<>());
+
+ // 澶勭悊null
+ Optional.ofNullable(purchaseLedgerDtoIPage.getRecords())
+ .filter(CollectionUtils::isNotEmpty)
+ .ifPresent(records -> {
+ // 杩囨护approvalStatus=3鐨勮褰�
+ records.removeIf(dto -> dto != null && dto.getApprovalStatus() == 3);
+ // 淇鏈敹浠樻閲戦
+ records.forEach(dto -> {
+ if (dto == null) return;
+ BigDecimal unReceiptAmt = Optional.ofNullable(dto.getUnReceiptPaymentAmount()).orElse(BigDecimal.ZERO);
+ if (unReceiptAmt.compareTo(BigDecimal.ZERO) == 0) {
+ dto.setUnReceiptPaymentAmount(Optional.ofNullable(dto.getContractAmount()).orElse(BigDecimal.ZERO));
+ }
+ });
+ });
+
+ return AjaxResult.success(purchaseLedgerDtoIPage);
}
@ApiOperation("鐢熸垚閲囪喘搴忓垪鍙�")
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 763c77c..dc6e550 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -24,6 +24,8 @@
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.other.pojo.TempFile;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.purchase.dto.PurchaseLedgerDto;
@@ -111,6 +113,7 @@
private final QualityTestStandardMapper qualityTestStandardMapper;
private final QualityInspectParamMapper qualityInspectParamMapper;
+ private final ProcurementRecordMapper procurementRecordStorageMapper;
@Value("${file.upload-dir}")
private String uploadDir;
@@ -238,10 +241,12 @@
handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType());
}
//鏂板鍘熸潗鏂欐楠�
- for (SalesLedgerProduct saleProduct : productList) {
- //鏄惁鎺ㄩ�佽川妫�锛屽鏋渢rue灏辨坊鍔�
- if (saleProduct.getIsChecked()) {
- addQualityInspect(purchaseLedger, saleProduct);
+ if (productList != null) {
+ for (SalesLedgerProduct saleProduct : productList) {
+ //鏄惁鎺ㄩ�佽川妫�锛屽鏋渢rue灏辨坊鍔�
+ if (saleProduct.getIsChecked()) {
+ addQualityInspect(purchaseLedger, saleProduct);
+ }
}
}
// 5. 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
@@ -256,8 +261,8 @@
QualityInspect qualityInspect = new QualityInspect();
qualityInspect.setInspectType(0);
qualityInspect.setSupplier(purchaseLedger.getSupplierName());
- qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
- qualityInspect.setProductId(saleProduct.getId());
+ qualityInspect.setPurchaseLedgerId(saleProduct.getId());
+ qualityInspect.setProductId(saleProduct.getProductId());
qualityInspect.setProductName(saleProduct.getProductCategory());
qualityInspect.setModel(saleProduct.getSpecificationModel());
qualityInspect.setProductModelId(saleProduct.getProductModelId());
@@ -445,6 +450,19 @@
if (ids == null || ids.length == 0) {
throw new BaseException("璇烽�変腑鑷冲皯涓�鏉℃暟鎹�");
}
+ // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐叆搴撹褰�
+ LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductQueryWrapper = new LambdaQueryWrapper<>();
+ salesLedgerProductQueryWrapper.in(SalesLedgerProduct::getSalesLedgerId, ids)
+ .eq(SalesLedgerProduct::getType, 2);
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductQueryWrapper);
+ if (CollectionUtils.isNotEmpty(salesLedgerProducts)) {
+ salesLedgerProducts.stream().forEach(salesLedgerProduct -> {
+ // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︿骇鍝�
+ LambdaQueryWrapper<ProcurementRecordStorage> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ProcurementRecordStorage::getSalesLedgerProductId, salesLedgerProduct.getId());
+ procurementRecordStorageMapper.delete(queryWrapper);
+ });
+ }
// 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︿骇鍝�
LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(SalesLedgerProduct::getSalesLedgerId, ids)
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
index 06c5b5a..9089885 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -1,6 +1,7 @@
package com.ruoyi.purchase.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -29,6 +30,7 @@
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.CommonFile;
+import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import lombok.RequiredArgsConstructor;
@@ -48,10 +50,7 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
@@ -163,6 +162,14 @@
productRecord.setPurchaseLedgerId(ticketRegistrationDto.getPurchaseLedgerId());
productRecord.setCreatedAt(DateUtils.getNowDate());
BeanUtils.copyProperties(salesLedgerProduct, productRecord);
+ //鍚屾鏇存柊鍏朵粬鍓╀綑鏁伴噺鍜岄噾棰�
+ productRecordMapper.update(
+ null,
+ new LambdaUpdateWrapper<ProductRecord>()
+ .eq(ProductRecord::getPurchaseLedgerId, ticketRegistrationDto.getPurchaseLedgerId())
+ .set(ProductRecord::getFutureTickets, salesLedgerProduct.getFutureTickets())
+ .set(ProductRecord::getFutureTicketsAmount, salesLedgerProduct.getFutureTicketsAmount())
+ );
productRecord.setSaleLedgerProjectId(salesLedgerProduct.getId());
productRecord.setId(null);
productRecord.setType("2");
@@ -249,50 +256,119 @@
@Override
+ @Transactional(rollbackFor = Exception.class)
public int delRegistration(Long[] ids) {
- // 鍒犻櫎閲囪喘鍙拌处浜у搧寮�绁ㄨ褰曞璞�
- LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
- productRecordLambdaQueryWrapper.in(ProductRecord::getId, Arrays.asList(ids));
- List<ProductRecord> productRecords = productRecordMapper.selectList(productRecordLambdaQueryWrapper);
- if(CollectionUtils.isEmpty(productRecords)){
+
+ // 鏌ヨ瑕佸垹闄ょ殑浜у搧鏉ョエ璁板綍
+ LambdaQueryWrapper<ProductRecord> productWrapper = new LambdaQueryWrapper<>();
+ productWrapper.in(ProductRecord::getId, Arrays.asList(ids));
+ List<ProductRecord> productRecords = productRecordMapper.selectList(productWrapper);
+
+ if (CollectionUtils.isEmpty(productRecords)) {
return 0;
}
- LambdaQueryWrapper<TicketRegistration> ticketRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
- ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getId, productRecords.stream().map(ProductRecord::getTicketRegistrationId).collect(Collectors.toList()));
- List<TicketRegistration> ticketRegistrations = ticketRegistrationMapper.selectList(ticketRegistrationLambdaQueryWrapper);
- // 淇敼浜у搧淇℃伅
- for (ProductRecord productRecord : productRecords) {
- BigDecimal subtract = ticketRegistrations.get(0).getInvoiceAmount().subtract(productRecords.get(0).getTicketsAmount());
- // 灏忎簬绛変簬0鍒犻櫎 锛屽ぇ浜�0淇敼
- if(subtract.compareTo(BigDecimal.ZERO) <= 0){
- ticketRegistrationMapper.deleteById(ticketRegistrations.get(0));
- // 鍒犻櫎浠樻娴佹按璁板綍
- paymentRegistrationMapper.delete(new LambdaQueryWrapper<PaymentRegistration>().eq(PaymentRegistration::getTicketRegistrationId, ticketRegistrations.get(0).getId()));
- }else if(subtract.compareTo(BigDecimal.ZERO) > 0){
- ticketRegistrations.get(0).setInvoiceAmount(subtract);
- ticketRegistrationMapper.updateById(ticketRegistrations.get(0));
- }
- LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
- salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, productRecord.getSaleLedgerProjectId())
- .eq(SalesLedgerProduct::getType, 2);
- List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductLambdaQueryWrapper);
- if(!CollectionUtils.isEmpty(salesLedgerProducts)){
- for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) {
- salesLedgerProduct.setFutureTickets(salesLedgerProduct.getFutureTickets().add(productRecord.getTicketsNum()));
- salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getFutureTicketsAmount().add(productRecord.getTicketsAmount()));
- salesLedgerProduct.setTicketsAmount(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getFutureTicketsAmount()));
- salesLedgerProduct.setTicketsNum(salesLedgerProduct.getQuantity().subtract(salesLedgerProduct.getFutureTickets()));
- salesLedgerProductMapper.updateById(salesLedgerProduct);
+ // 鏀堕泦鍏宠仈ID
+ Set<Long> ticketRegistrationIds = productRecords.stream()
+ .map(ProductRecord::getTicketRegistrationId)
+ .collect(Collectors.toSet());
- }
+ Set<Long> salesLedgerProductIds = productRecords.stream()
+ .map(ProductRecord::getSaleLedgerProjectId)
+ .collect(Collectors.toSet());
+
+ // 鏌ヨ鏉ョエ鐧昏
+ List<TicketRegistration> ticketRegistrations =
+ ticketRegistrationMapper.selectBatchIds(ticketRegistrationIds);
+
+ // 澶勭悊鏉ョエ鐧昏閲戦銆佷粯娆炬祦姘�
+ for (TicketRegistration ticket : ticketRegistrations) {
+
+ // 璇ユ潵绁ㄧ櫥璁颁笅鎵�鏈変骇鍝佽褰�
+ List<ProductRecord> recordsOfTicket = productRecords.stream()
+ .filter(r -> r.getTicketRegistrationId().equals(ticket.getId()))
+ .collect(Collectors.toList());
+
+ // 璁$畻瑕佸洖閫�鐨勯噾棰�
+ BigDecimal rollbackAmount = recordsOfTicket.stream()
+ .map(ProductRecord::getTicketsAmount)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ BigDecimal remain = ticket.getInvoiceAmount().subtract(rollbackAmount);
+
+ if (remain.compareTo(BigDecimal.ZERO) <= 0) {
+ // 鍒犻櫎鏉ョエ鐧昏
+ ticketRegistrationMapper.deleteById(ticket.getId());
+ // 鍒犻櫎浠樻娴佹按
+ paymentRegistrationMapper.delete(
+ new LambdaQueryWrapper<PaymentRegistration>()
+ .eq(PaymentRegistration::getTicketRegistrationId, ticket.getId())
+ );
+ } else {
+ ticket.setInvoiceAmount(remain);
+ ticketRegistrationMapper.updateById(ticket);
}
}
- // 鍒犻櫎閲囪喘鍙拌处浜у搧寮�绁ㄨ褰�
- productRecordMapper.delete(productRecordLambdaQueryWrapper);
+
+ // 鍥為��閿�鍞彴璐︿骇鍝佺殑鏈潵绁�
+ for (ProductRecord record : productRecords) {
+
+ LambdaQueryWrapper<SalesLedgerProduct> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(SalesLedgerProduct::getId, record.getSaleLedgerProjectId())
+ .eq(SalesLedgerProduct::getType, 2);
+
+ SalesLedgerProduct product = salesLedgerProductMapper.selectOne(wrapper);
+ if (product != null) {
+ product.setFutureTickets(
+ product.getFutureTickets().add(record.getTicketsNum())
+ );
+ product.setFutureTicketsAmount(
+ product.getFutureTicketsAmount().add(record.getTicketsAmount())
+ );
+ salesLedgerProductMapper.updateById(product);
+ }
+ }
+
+ // 鍒犻櫎浜у搧鏉ョエ璁板綍
+ productRecordMapper.delete(productWrapper);
+
+ // 閲嶆柊璁$畻 currentInvoiceAmount
+ for (Long productId : salesLedgerProductIds) {
+ refreshCurrentInvoiceAmount(productId);
+ }
+
return 1;
}
+ private void refreshCurrentInvoiceAmount(Long salesLedgerProductId) {
+
+ // 鏌ヨ璇ヤ骇鍝佹渶鏂颁竴鏉℃潵绁ㄨ褰�
+ LambdaQueryWrapper<ProductRecord> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(ProductRecord::getSaleLedgerProjectId, salesLedgerProductId)
+ .orderByDesc(ProductRecord::getCreatedAt)
+ .last("limit 1");
+
+ ProductRecord latestRecord = productRecordMapper.selectOne(wrapper);
+
+ SalesLedgerProduct product =
+ salesLedgerProductMapper.selectById(salesLedgerProductId);
+
+ if (product == null) {
+ return;
+ }
+
+ if (latestRecord == null) {
+ // 娌℃湁浠讳綍鏉ョエ璁板綍
+ product.setTicketsAmount(BigDecimal.ZERO);
+ } else {
+ // 姘歌繙鍙栨渶鏂颁竴鏉�
+ product.setTicketsAmount(latestRecord.getTicketsAmount());
+ }
+
+ salesLedgerProductMapper.updateById(product);
+ }
+
+
@Override
public TicketRegistrationDto getRegistrationById(TicketRegistrationDto ticketRegistrationDto) {
TicketRegistration ticketRegistration = ticketRegistrationMapper.selectById(ticketRegistrationDto.getId());
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
index fa50217..1555082 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
@@ -3,6 +3,9 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
+import com.ruoyi.procurementrecord.service.ProcurementRecordService;
+import com.ruoyi.procurementrecord.service.impl.ProcurementRecordServiceImpl;
import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectFile;
@@ -12,6 +15,7 @@
import com.ruoyi.quality.service.IQualityInspectParamService;
import com.ruoyi.quality.service.IQualityInspectService;
import com.ruoyi.quality.service.IQualityUnqualifiedService;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
@@ -34,6 +38,8 @@
@Resource
private IQualityInspectFileService qualityInspectFileService;
+ @Autowired
+ private ProcurementRecordService procurementRecordService;
/**
@@ -62,6 +68,8 @@
//鍒犻櫎妫�楠岄檮浠�
qualityInspectFileService.remove(Wrappers.<QualityInspectFile>lambdaQuery()
.in(QualityInspectFile::getInspectId,ids));
+ //鍒犻櫎鍏ュ簱璁板綍
+ procurementRecordService.remove(Wrappers.<ProcurementRecordStorage>lambdaQuery().in(ProcurementRecordStorage::getQualityInspectId,ids));
//鍒犻櫎妫�楠屽崟
return AjaxResult.success(qualityInspectService.removeBatchByIds(ids));
}
diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
index 179caca..a891dc3 100644
--- a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
+++ b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -138,6 +138,7 @@
*/
private Integer inspectState;
+ //閲囪喘鍙拌处浜у搧id
private Long purchaseLedgerId;
/**
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index f39a456..5be05ad 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -56,7 +56,7 @@
@AllArgsConstructor
@Service
@Transactional(rollbackFor = Exception.class)
-public class QualityInspectServiceImpl extends ServiceImpl<QualityInspectMapper, QualityInspect> implements IQualityInspectService {
+public class QualityInspectServiceImpl extends ServiceImpl<QualityInspectMapper, QualityInspect> implements IQualityInspectService {
private QualityInspectMapper qualityInspectMapper;
@@ -73,7 +73,7 @@
@Override
public int add(QualityInspectDto qualityInspectDto) {
QualityInspect qualityInspect = new QualityInspect();
- BeanUtils.copyProperties(qualityInspectDto,qualityInspect);
+ BeanUtils.copyProperties(qualityInspectDto, qualityInspect);
qualityInspect.setInspectState(0);//榛樿鏈彁浜�
qualityInspectMapper.insert(qualityInspect);
for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
@@ -88,7 +88,7 @@
QualityInspect qualityInspect = qualityInspectMapper.selectById(id);
List<QualityInspectParam> qualityInspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id));
QualityInspectDto qualityInspectDto = new QualityInspectDto();
- BeanUtils.copyProperties(qualityInspect,qualityInspectDto);
+ BeanUtils.copyProperties(qualityInspect, qualityInspectDto);
qualityInspectDto.setQualityInspectParams(qualityInspectParams);
return qualityInspectDto;
}
@@ -98,89 +98,94 @@
public int submit(QualityInspect inspect) {
QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId());
/*鍒ゆ柇涓嶅悎鏍�*/
- if (ObjectUtils.isNotNull(qualityInspect.getCheckResult()) && qualityInspect.getCheckResult().equals("涓嶅悎鏍�")){
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+
+ if (ObjectUtils.isNotNull(qualityInspect.getCheckResult()) && qualityInspect.getCheckResult().equals("涓嶅悎鏍�")) {
QualityUnqualified qualityUnqualified = new QualityUnqualified();
- BeanUtils.copyProperties(qualityInspect,qualityUnqualified);
+ BeanUtils.copyProperties(qualityInspect, qualityUnqualified);
qualityUnqualified.setInspectState(0);//寰呭鐞�
List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(","));
- qualityUnqualified.setDefectivePhenomena(text+"杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞�
+ qualityUnqualified.setDefectivePhenomena(text + "杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞�
qualityUnqualifiedMapper.insert(qualityUnqualified);
- }
+ } else {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if (qualityInspect.getInspectType() == 0) {
- if ("鍚堟牸".equals(qualityInspect.getCheckResult())) {
- ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
- procurementRecordOutAdd.setType(1);
- procurementRecordOutAdd.setTypeName("閲囪喘鍏ュ簱");
- procurementRecordOutAdd.setNickName(loginUser.getNickName());
- procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId()));
- if (qualityInspect.getPurchaseLedgerId() == null) {
- throw new BaseException("璇烽�夋嫨閲囪喘鍗�");
+ if (qualityInspect.getInspectType() == 0) {
+ if ("鍚堟牸".equals(qualityInspect.getCheckResult())) {
+ ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+ procurementRecordOutAdd.setType(1);
+ procurementRecordOutAdd.setTypeName("閲囪喘鍘熸潗鏂欐楠屽悎鏍煎叆搴�");
+ procurementRecordOutAdd.setNickName(loginUser.getNickName());
+ procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId()));
+ if (qualityInspect.getPurchaseLedgerId() == null) {
+ throw new BaseException("璇烽�夋嫨閲囪喘鍗�");
+ }
+ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(qualityInspect.getPurchaseLedgerId());
+
+ ArrayList<Details> detailss = new ArrayList<>();
+ Details details = new Details();
+ details.setId(Math.toIntExact(salesLedgerProduct.getId()));
+ details.setInboundQuantity(qualityInspect.getQuantity());
+ details.setWarnNum(salesLedgerProduct.getWarnNum());
+ details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
+ details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
+ details.setProductModelId(qualityInspect.getProductModelId());
+ detailss.add(details);
+ procurementRecordOutAdd.setDetails(detailss);
+ procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId());
+ procurementRecordService.add(procurementRecordOutAdd);
}
- SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(qualityInspect.getProductId());
+ } else if (qualityInspect.getInspectType() == 1) {
+ //鏌ヨUnitPrice/TotalPrice
+ ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+ procurementRecordOutAdd.setType(2);
+ procurementRecordOutAdd.setTypeName("鐢熶骇杩囩▼妫�楠屽悎鏍煎叆搴�");
+ procurementRecordOutAdd.setNickName(loginUser.getNickName());
+ List<Details> details = new ArrayList<>();
+ Details details1 = new Details();
+ details1.setInboundQuantity(qualityInspect.getQuantity());
+ details1.setProductModelId(qualityInspect.getProductModelId());
+ procurementRecordOutAdd.setDetails(details);
- ArrayList<Details> detailss = new ArrayList<>();
- Details details = new Details();
- details.setId(Math.toIntExact(salesLedgerProduct.getId()));
- details.setInboundQuantity(qualityInspect.getQuantity());
- details.setWarnNum(salesLedgerProduct.getWarnNum());
- details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
- details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
- details.setProductModelId(qualityInspect.getProductModelId());
- detailss.add( details);
- procurementRecordOutAdd.setDetails(detailss);
+ ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder()
+ .salesLedgerProductId(0)
+ .inboundBatches("鐢熶骇鍗婃垚鍝佸叆搴�")
+ .inboundNum(details1.getInboundQuantity())
+ .type(2)
+ .warnNum(new BigDecimal(0))
+ .unitPrice(new BigDecimal(0))
+ .totalPrice(new BigDecimal(0))
+ .createTime(LocalDateTime.now())
+ .createUser(loginUser.getUserId())
+ .updateTime(LocalDateTime.now())
+ .updateUser(loginUser.getUserId())
+ .createBy(procurementRecordOutAdd.getNickName())
+ .productModelId(details1.getProductModelId())
+ .qualityInspectId(qualityInspect.getId());
+ procurementRecordService.save(procurementRecordBuilder.build());
+
+
+ } else if (qualityInspect.getInspectType() == 2) {
+ //鏌ヨUnitPrice/TotalPrice
+ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId());
+ ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+ procurementRecordOutAdd.setType(2);
+ procurementRecordOutAdd.setTypeName("鐢熶骇鍑哄巶妫�楠屽悎鏍煎叆搴�");
+ procurementRecordOutAdd.setNickName(loginUser.getNickName());
+ List<Details> details = new ArrayList<>();
+ Details details1 = new Details();
+ details1.setInboundQuantity(qualityInspect.getQuantity());
+ details1.setId(Math.toIntExact(salesLedgerProduct.getId()));
+ details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
+ details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
+ details1.setProductModelId(salesLedgerProduct.getProductModelId());
+ details.add(details1);
+ procurementRecordOutAdd.setDetails(details);
+ procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId());
procurementRecordService.add(procurementRecordOutAdd);
}
- }else if (qualityInspect.getInspectType() == 1) {
- //鏌ヨUnitPrice/TotalPrice
- ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
- procurementRecordOutAdd.setType(2);
- procurementRecordOutAdd.setTypeName("鐢熶骇鍏ュ簱");
- procurementRecordOutAdd.setNickName(loginUser.getNickName());
- List<Details> details = new ArrayList<>();
- Details details1 = new Details();
- details1.setInboundQuantity(qualityInspect.getQuantity());
- details1.setProductModelId(qualityInspect.getProductModelId());
- procurementRecordOutAdd.setDetails(details);
-
- ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder()
- .salesLedgerProductId(0)
- .inboundBatches( "鐢熶骇鍗婃垚鍝佸叆搴�")
- .inboundNum(details1.getInboundQuantity())
- .type(2)
- .warnNum(new BigDecimal(0))
- .unitPrice(new BigDecimal(0))
- .totalPrice(new BigDecimal(0))
- .createTime(LocalDateTime.now())
- .createUser(loginUser.getUserId())
- .updateTime(LocalDateTime.now())
- .updateUser(loginUser.getUserId())
- .createBy(procurementRecordOutAdd.getNickName())
- .productModelId(details1.getProductModelId());
- procurementRecordService.save(procurementRecordBuilder.build());
-
-
-
- }else if (qualityInspect.getInspectType() == 2) {
- //鏌ヨUnitPrice/TotalPrice
- SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId());
- ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
- procurementRecordOutAdd.setType(2);
- procurementRecordOutAdd.setTypeName("鐢熶骇鍏ュ簱");
- procurementRecordOutAdd.setNickName(loginUser.getNickName());
- List<Details> details = new ArrayList<>();
- Details details1 = new Details();
- details1.setInboundQuantity(qualityInspect.getQuantity());
- details1.setId(Math.toIntExact(salesLedgerProduct.getId()));
- details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
- details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
- details1.setProductModelId(salesLedgerProduct.getProductModelId());
- details.add(details1);
- procurementRecordOutAdd.setDetails(details);
- procurementRecordService.add(procurementRecordOutAdd);
}
+
qualityInspect.setInspectState(1);//宸叉彁浜�
return qualityInspectMapper.updateById(qualityInspect);
}
@@ -189,16 +194,16 @@
@Override
public void down(HttpServletResponse response, QualityInspect qualityInspect) {
QualityInspect inspect = qualityInspectMapper.selectById(qualityInspect.getId());
- String inspectType="";
- switch (inspect.getInspectType()){
+ String inspectType = "";
+ switch (inspect.getInspectType()) {
case 0:
- inspectType="鍘熸潗鏂欐楠�";
+ inspectType = "鍘熸潗鏂欐楠�";
break;
case 1:
- inspectType="杩囩▼妫�楠�";
+ inspectType = "杩囩▼妫�楠�";
break;
case 2:
- inspectType="鍑哄巶妫�楠�";
+ inspectType = "鍑哄巶妫�楠�";
break;
}
List<QualityInspectParam> paramList = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
@@ -240,31 +245,31 @@
@Override
public int updateQualityInspect(QualityInspectDto qualityInspectDto) {
if (ObjectUtils.isNotNull(qualityInspectDto.getQualityInspectParams())) {
- qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId,qualityInspectDto.getId()));
+ qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, qualityInspectDto.getId()));
for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
qualityInspectParam.setInspectId(qualityInspectDto.getId());
}
qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams());
}
QualityInspect qualityInspect = new QualityInspect();
- BeanUtils.copyProperties(qualityInspectDto,qualityInspect);
+ BeanUtils.copyProperties(qualityInspectDto, qualityInspect);
return qualityInspectMapper.updateById(qualityInspect);
}
@Override
public IPage<QualityInspect> qualityInspectListPage(Page page, QualityInspect qualityInspect) {
- return qualityInspectMapper.qualityInspectListPage(page,qualityInspect);
+ return qualityInspectMapper.qualityInspectListPage(page, qualityInspect);
}
@Override
public void qualityInspectExport(HttpServletResponse response, QualityInspect qualityInspect) {
- List<QualityInspect> qualityInspects =qualityInspectMapper.qualityInspectExport(qualityInspect);
+ List<QualityInspect> qualityInspects = qualityInspectMapper.qualityInspectExport(qualityInspect);
ExcelUtil<QualityInspect> util = new ExcelUtil<QualityInspect>(QualityInspect.class);
- switch (qualityInspect.getInspectType()){
+ switch (qualityInspect.getInspectType()) {
case 0:
util.exportExcel(response, qualityInspects, "鍘熸潗鏂欐楠屽鍑�");
break;
- case 1:
+ case 1:
util.exportExcel(response, qualityInspects, "杩囩▼妫�楠屽鍑�");
break;
case 2:
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
index 0cd59f9..28ece31 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -65,7 +65,7 @@
BigDecimal stockQuantity = stockUtils.getStockQuantity(item.getProductModelId()).get("stockQuantity");
if(stockQuantity != null) {
// ProcurementPageDtoCopy procurementDtoCopy = result.getRecords().get(0);
- if (item.getQuantity().compareTo(stockQuantity) >= 0 && item.getApproveStatus() == 0) {
+ if (item.getQuantity().compareTo(stockQuantity) <= 0 && item.getApproveStatus() == 0) {
item.setApproveStatus(1);
salesLedgerProductService.addOrUpdateSalesLedgerProduct(item);
}
diff --git a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
index 946cd75..63f417b 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.math.LongMath;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.controller.BaseController;
@@ -88,20 +89,22 @@
// 瀹℃壒閫氳繃
if (req.getApproveStatus() == 3) {
- // 鏌ヨ閲囪喘鍏ュ簱璁板綍
- LambdaQueryWrapper<ProcurementRecordStorage> lambdaQueryWrapper = new LambdaQueryWrapper<ProcurementRecordStorage>()
- .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId());
- ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper);
-
- if (procurementRecordStorage == null) {
- // 淇濊瘉鍓嶉潰鐨勪慨鏀瑰叏閮ㄥ洖婊�
- throw new ServiceException("閲囪喘璁板綍涓嶅瓨鍦紝瀹℃壒鍥炴粴");
- }
+// // 鏌ヨ閲囪喘鍏ュ簱璁板綍
+// LambdaQueryWrapper<ProcurementRecordStorage> lambdaQueryWrapper = new LambdaQueryWrapper<ProcurementRecordStorage>()
+// .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId());
+// ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper);
+//
+// if (procurementRecordStorage == null) {
+// // 淇濊瘉鍓嶉潰鐨勪慨鏀瑰叏閮ㄥ洖婊�
+// throw new ServiceException("閲囪喘璁板綍涓嶅瓨鍦紝瀹℃壒鍥炴粴");
+// }
// 鐢熸垚鍑哄簱璁板綍
ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd();
- procurementRecordOutAdd.setId(procurementRecordStorage.getId());
- procurementRecordOutAdd.setSalesLedgerProductId(salesLedgerProduct.getId());
+// procurementRecordOutAdd.setId(procurementRecordStorage.getId());
+ procurementRecordOutAdd.setId(0);
+ procurementRecordOutAdd.setProductModelId(salesLedgerProduct.getProductModelId());
+ procurementRecordOutAdd.setSalesLedgerProductId((long) Math.toIntExact(salesLedgerProduct.getId()));
procurementRecordOutAdd.setType(2);
procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId()));
procurementRecordOutAdd.setQuantity(salesLedgerProduct.getQuantity().toPlainString());
diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
index 62090d1..1d71938 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -70,6 +72,13 @@
invoiceAmountTotal = invoiceAmountTotal.add(currentInvoiceNum);
InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct();
BeanUtils.copyProperties(productDatum, invoiceRegistrationProduct);
+ //鏇存柊宸插紑绁ㄥ墿浣欐湭寮�绁ㄦ暟
+ invoiceRegistrationProductMapper.update(
+ null,
+ new LambdaUpdateWrapper<InvoiceRegistrationProduct>()
+ .eq(InvoiceRegistrationProduct::getSalesLedgerId, salesLedgerDto.getId())
+ .set(InvoiceRegistrationProduct::getNoInvoiceAmount, productDatum.getNoInvoiceAmount())
+ );
invoiceRegistrationProduct.setId(null);
invoiceRegistrationProduct.setSalesLedgerId(salesLedgerDto.getId().intValue());
invoiceRegistrationProduct.setInvoiceRegistrationId(invoiceRegistration.getId());
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 02acd87..7125230 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -3,11 +3,14 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
@@ -42,6 +45,7 @@
public class SalesLedgerProductServiceImpl extends ServiceImpl<SalesLedgerProductMapper, SalesLedgerProduct> implements ISalesLedgerProductService {
private SalesLedgerProductMapper salesLedgerProductMapper;
+ private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
private SalesLedgerMapper salesLedgerMapper;
@@ -59,6 +63,10 @@
private ProductProcessRouteMapper productProcessRouteMapper;
private ProductWorkOrderMapper productWorkOrderMapper;
+ private ProductionProductMainMapper productionProductMainMapper;
+ private ProductionProductOutputMapper productionProductOutputMapper;
+ private ProductionProductInputMapper productionProductInputMapper;
+ private QualityInspectMapper qualityInspectMapper;
@Override
public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -87,10 +95,10 @@
if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
- noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum);
- noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount);
}
}
+ noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum);
+ noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount);
ledgerProduct.setInvoiceNum(invoiceNum);
ledgerProduct.setInvoiceAmount(invoiceAmount);
ledgerProduct.setNoInvoiceNum(noInvoiceNum);
@@ -193,76 +201,18 @@
if (salesLedgerProduct.getId() == null) {
salesLedgerProduct.setRegisterDate(LocalDateTime.now());
result = salesLedgerProductMapper.insert(salesLedgerProduct);
- ProductOrder productOrder = new ProductOrder();
- productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
- productOrder.setProductModelId(salesLedgerProduct.getId());
- productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
- productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
- productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
- productOrderMapper.insert(productOrder);
-
- ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()));
- if (processRoute != null) {
- //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
- ProductProcessRoute productProcessRoute = new ProductProcessRoute();
- productProcessRoute.setProductModelId(processRoute.getProductModelId());
- productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
- productProcessRoute.setProductOrderId(productOrder.getId());
- productProcessRoute.setBomId(processRoute.getBomId());
- productProcessRouteMapper.insert(productProcessRoute);
- //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
- List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
- // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
- String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- for (ProcessRouteItem processRouteItem : processRouteItems) {
- ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
- productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
- productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
- productProcessRouteItem.setProductOrderId(productOrder.getId());
- productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
- int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
- if (insert > 0) {
- // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
- QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
- queryWrapper.likeRight("work_order_no", datePrefix)
- .orderByDesc("work_order_no")
- .last("LIMIT 1");
-
- ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper);
-
- int sequenceNumber = 1; // 榛樿搴忓彿
- if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
- String lastNo = lastWorkOrder.getWorkOrderNo().toString();
- if (lastNo.startsWith(datePrefix)) {
- String seqStr = lastNo.substring(datePrefix.length());
- try {
- sequenceNumber = Integer.parseInt(seqStr) + 1;
- } catch (NumberFormatException e) {
- sequenceNumber = 1;
- }
- }
- }
- // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
- String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber);
- ProductWorkOrder productWorkOrder = new ProductWorkOrder();
- productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
- productWorkOrder.setProductOrderId(productOrder.getId());
- productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
- productWorkOrder.setWorkOrderNo(workOrderNoStr);
- productWorkOrder.setStatus(1);
-
- productWorkOrderMapper.insert(productWorkOrder);
- }
-
- }
- productOrder.setRouteId(processRoute.getId());
- productOrderMapper.updateById(productOrder);
- }
-
-
+ addProductionData(salesLedgerProduct);
} else {
+ //鏌ヨ鍘熸湰鐨勪骇鍝佸瀷鍙穒d
salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
result = salesLedgerProductMapper.updateById(salesLedgerProduct);
+ /*鍒犻櫎瀵瑰簲鐨勭敓浜ф暟鎹苟閲嶆柊鏂板*/
+ deleteProductionData(Arrays.asList(salesLedgerProduct.getId()));
+ // 鍒犻櫎鐢熶骇鏍哥畻鏁版嵁
+ LambdaQueryWrapper<SalesLedgerProductionAccounting> reportWrapper = new LambdaQueryWrapper<>();
+ reportWrapper.in(SalesLedgerProductionAccounting::getSalesLedgerId, salesLedgerId);
+ salesLedgerProductionAccountingMapper.delete(reportWrapper);
+ addProductionData(salesLedgerProduct);
}
// 濡傛灉鎻掑叆鎴栨洿鏂版垚鍔燂紝骞朵笖鏈� salesLedgerId锛屾墠缁х画鏇存柊涓昏〃閲戦
@@ -296,6 +246,165 @@
}
/**
+ * 鏂板鐢熶骇鏁版嵁
+ */
+ public void addProductionData(SalesLedgerProduct salesLedgerProduct) {
+ ProductOrder productOrder = new ProductOrder();
+ productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
+ productOrder.setProductModelId(salesLedgerProduct.getId());
+ productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
+ productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
+ productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
+ productOrderMapper.insert(productOrder);
+
+ List<ProcessRoute> processRoutes = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
+ .eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
+ .orderByDesc(ProcessRoute::getCreateTime));
+ if (processRoutes.size()>0){
+ ProcessRoute processRoute = processRoutes.get(0);
+ //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
+ ProductProcessRoute productProcessRoute = new ProductProcessRoute();
+ productProcessRoute.setProductModelId(processRoute.getProductModelId());
+ productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
+ productProcessRoute.setProductOrderId(productOrder.getId());
+ productProcessRoute.setBomId(processRoute.getBomId());
+ productProcessRouteMapper.insert(productProcessRoute);
+ //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
+ List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+ // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
+ String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+ for (ProcessRouteItem processRouteItem : processRouteItems) {
+ ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
+ productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
+ productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+ productProcessRouteItem.setProductOrderId(productOrder.getId());
+ productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
+ productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
+ int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
+ if (insert > 0) {
+ // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
+ QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
+ queryWrapper.likeRight("work_order_no", datePrefix)
+ .orderByDesc("work_order_no")
+ .last("LIMIT 1");
+
+ ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper);
+
+ int sequenceNumber = 1; // 榛樿搴忓彿
+ if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+ String lastNo = lastWorkOrder.getWorkOrderNo().toString();
+ if (lastNo.startsWith(datePrefix)) {
+ String seqStr = lastNo.substring(datePrefix.length());
+ try {
+ sequenceNumber = Integer.parseInt(seqStr) + 1;
+ } catch (NumberFormatException e) {
+ sequenceNumber = 1;
+ }
+ }
+ }
+ // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
+ String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber);
+ ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+ productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+ productWorkOrder.setProductOrderId(productOrder.getId());
+ productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
+ productWorkOrder.setWorkOrderNo(workOrderNoStr);
+ productWorkOrder.setStatus(1);
+
+ productWorkOrderMapper.insert(productWorkOrder);
+ }
+
+ }
+ productOrder.setRouteId(processRoute.getId());
+ productOrderMapper.updateById(productOrder);
+ }
+ }
+
+ /**
+ * 鍒犻櫎鐢熶骇鏁版嵁
+ */
+ public void deleteProductionData(List<Long> productIds) {
+ //鎵归噺鏌ヨproductOrder
+ List<ProductOrder> productOrders = productOrderMapper.selectList(
+ new LambdaQueryWrapper<ProductOrder>()
+ .in(ProductOrder::getProductModelId, productIds)
+ );
+ if (!org.springframework.util.CollectionUtils.isEmpty(productOrders)) {
+ List<Long> orderIds = productOrders.stream()
+ .map(ProductOrder::getId)
+ .collect(Collectors.toList());
+
+ // 鎵归噺鏌ヨprocessRouteItems
+ List<ProductProcessRouteItem> allRouteItems = productProcessRouteItemMapper.selectList(
+ new LambdaQueryWrapper<ProductProcessRouteItem>()
+ .in(ProductProcessRouteItem::getProductOrderId, orderIds)
+ );
+
+ if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(allRouteItems)) {
+ // 鑾峰彇瑕佸垹闄ょ殑宸ュ簭椤笽D
+ List<Long> routeItemIds = allRouteItems.stream()
+ .map(ProductProcessRouteItem::getId)
+ .collect(Collectors.toList());
+
+ // 鏌ヨ鍏宠仈鐨勫伐鍗旾D
+ List<ProductWorkOrder> workOrders = productWorkOrderMapper.selectList(
+ new LambdaQueryWrapper<ProductWorkOrder>()
+ .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds)
+ );
+ if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(workOrders)) {
+ List<Long> workOrderIds = workOrders.stream()
+ .map(ProductWorkOrder::getId)
+ .collect(Collectors.toList());
+
+ // 鏌ヨ鍏宠仈鐨勭敓浜т富琛↖D
+ List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
+ new LambdaQueryWrapper<ProductionProductMain>()
+ .in(ProductionProductMain::getWorkOrderId, workOrderIds)
+ );
+ List<Long> productMainIds = productMains.stream()
+ .map(ProductionProductMain::getId)
+ .collect(Collectors.toList());
+
+ // 鍒犻櫎浜у嚭琛ㄣ�佹姇鍏ヨ〃鏁版嵁
+ if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(productMainIds)) {
+ productionProductOutputMapper.deleteByProductMainIds(productMainIds);
+ productionProductInputMapper.deleteByProductMainIds(productMainIds);
+ List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+ new LambdaQueryWrapper<QualityInspect>()
+ .in(QualityInspect::getProductMainId, productMainIds)
+ );
+ qualityInspects.forEach(qualityInspect -> {
+ //inspectState=1 宸叉彁浜� 涓嶈兘鍒犻櫎
+ if (qualityInspect.getInspectState() == 1) {
+ throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
+ }
+ });
+ qualityInspectMapper.deleteByProductMainIds(productMainIds);
+ }
+
+ // 鍒犻櫎鐢熶骇涓昏〃鏁版嵁
+ productionProductMainMapper.deleteByWorkOrderIds(workOrderIds);
+
+ // 鍒犻櫎宸ュ崟鏁版嵁
+ productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
+ .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds));
+ }
+ }
+ // 鎵归噺鍒犻櫎processRouteItem
+ productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
+ .in(ProductProcessRouteItem::getProductOrderId, orderIds));
+
+ // 鎵归噺鍒犻櫎productProcessRoute
+ productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()
+ .in(ProductProcessRoute::getProductOrderId, orderIds));
+
+ // 鎵归噺鍒犻櫎productOrder
+ productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
+ .in(ProductOrder::getProductModelId, productIds));
+ }
+ }
+
+ /**
* 閫氱敤鏂规硶锛氭牴鎹富琛↖D鍜屽瓙琛ㄥ垪琛紝鏇存柊涓昏〃鐨勫悎鍚岄噾棰�
*/
public <T, S> void updateMainContractAmount(
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index b72b74b..5a1645f 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -32,6 +32,7 @@
import com.ruoyi.sales.dto.SalesLedgerDto;
import com.ruoyi.sales.mapper.*;
import com.ruoyi.sales.pojo.*;
+import com.ruoyi.sales.service.ISalesLedgerProductService;
import com.ruoyi.sales.service.ISalesLedgerService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -77,6 +78,7 @@
private final CustomerMapper customerMapper;
private final SalesLedgerProductMapper salesLedgerProductMapper;
+ private final SalesLedgerProductServiceImpl salesLedgerProductServiceImpl;
private final CommonFileMapper commonFileMapper;
@@ -91,7 +93,7 @@
private final SalesLedgerWorkMapper salesLedgerWorkMapper;
- private final SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
+ private final SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
private final InvoiceRegistrationMapper invoiceRegistrationMapper;
@@ -178,7 +180,7 @@
@Override
public List<Map<String, Object>> getSalesNo() {
LambdaQueryWrapper<SalesLedger> queryWrapper = Wrappers.lambdaQuery();
- queryWrapper.select(SalesLedger::getId, SalesLedger::getSalesContractNo, SalesLedger::getProjectName);
+ queryWrapper.select(SalesLedger::getId, SalesLedger::getSalesContractNo);
// 鑾峰彇鍘熷鏌ヨ缁撴灉
List<Map<String, Object>> result = salesLedgerMapper.selectMaps(queryWrapper);
@@ -217,8 +219,8 @@
// 鏌ヨ鍘熷鏁版嵁
LambdaQueryWrapper<SalesLedger> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.select(SalesLedger::getCustomerId,
- SalesLedger::getCustomerName,
- SalesLedger::getContractAmount)
+ SalesLedger::getCustomerName,
+ SalesLedger::getContractAmount)
.orderByDesc(SalesLedger::getContractAmount);
List<SalesLedger> records = salesLedgerMapper.selectList(queryWrapper);
@@ -226,7 +228,7 @@
Map<Long, GroupedCustomer> groupedMap = new LinkedHashMap<>(); // 浣跨敤LinkedHashMap淇濇寔鎺掑簭
for (SalesLedger record : records) {
groupedMap.computeIfAbsent(record.getCustomerId(),
- k -> new GroupedCustomer(record.getCustomerId(), record.getCustomerName()))
+ k -> new GroupedCustomer(record.getCustomerId(), record.getCustomerName()))
.addAmount(record.getContractAmount());
}
@@ -393,86 +395,8 @@
List<Long> productIds = products.stream()
.map(SalesLedgerProduct::getId)
.collect(Collectors.toList());
-
- //鎵归噺鏌ヨproductOrder
- List<ProductOrder> productOrders = productOrderMapper.selectList(
- new LambdaQueryWrapper<ProductOrder>()
- .in(ProductOrder::getProductModelId, productIds)
- );
-
- if (!org.springframework.util.CollectionUtils.isEmpty(productOrders)) {
- List<Long> orderIds = productOrders.stream()
- .map(ProductOrder::getId)
- .collect(Collectors.toList());
-
- // 鎵归噺鏌ヨprocessRouteItems
- List<ProductProcessRouteItem> allRouteItems = productProcessRouteItemMapper.selectList(
- new LambdaQueryWrapper<ProductProcessRouteItem>()
- .in(ProductProcessRouteItem::getProductOrderId, orderIds)
- );
-
- if (!CollectionUtils.isEmpty(allRouteItems)) {
- // 鑾峰彇瑕佸垹闄ょ殑宸ュ簭椤笽D
- List<Long> routeItemIds = allRouteItems.stream()
- .map(ProductProcessRouteItem::getId)
- .collect(Collectors.toList());
-
- // 鏌ヨ鍏宠仈鐨勫伐鍗旾D
- List<ProductWorkOrder> workOrders = productWorkOrderMapper.selectList(
- new LambdaQueryWrapper<ProductWorkOrder>()
- .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds)
- );
- if (!CollectionUtils.isEmpty(workOrders)) {
- List<Long> workOrderIds = workOrders.stream()
- .map(ProductWorkOrder::getId)
- .collect(Collectors.toList());
-
- // 鏌ヨ鍏宠仈鐨勭敓浜т富琛↖D
- List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
- new LambdaQueryWrapper<ProductionProductMain>()
- .in(ProductionProductMain::getWorkOrderId, workOrderIds)
- );
- List<Long> productMainIds = productMains.stream()
- .map(ProductionProductMain::getId)
- .collect(Collectors.toList());
-
- // 鍒犻櫎浜у嚭琛ㄣ�佹姇鍏ヨ〃鏁版嵁
- if (!CollectionUtils.isEmpty(productMainIds)) {
- productionProductOutputMapper.deleteByProductMainIds(productMainIds);
- productionProductInputMapper.deleteByProductMainIds(productMainIds);
- List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
- new LambdaQueryWrapper<QualityInspect>()
- .in(QualityInspect::getProductMainId, productMainIds)
- );
- qualityInspects.forEach(qualityInspect -> {
- //inspectState=1 宸叉彁浜� 涓嶈兘鍒犻櫎
- if(qualityInspect.getInspectState() == 1){
- throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
- }
- });
- qualityInspectMapper.deleteByProductMainIds(productMainIds);
- }
-
- // 鍒犻櫎鐢熶骇涓昏〃鏁版嵁
- productionProductMainMapper.deleteByWorkOrderIds(workOrderIds);
-
- // 鍒犻櫎宸ュ崟鏁版嵁
- productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
- .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds));
- }
- }
- // 鎵归噺鍒犻櫎processRouteItem
- productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
- .in(ProductProcessRouteItem::getProductOrderId, orderIds));
-
- // 鎵归噺鍒犻櫎productProcessRoute
- productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()
- .in(ProductProcessRoute::getProductOrderId, orderIds));
-
- // 鎵归噺鍒犻櫎productOrder
- productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
- .in(ProductOrder::getProductModelId, productIds));
- }
+ //鍒犻櫎鐢熶骇鏁版嵁
+ salesLedgerProductServiceImpl.deleteProductionData(productIds);
// 鎵归噺鍒犻櫎浜у搧瀛愯〃
if (!productIds.isEmpty()) {
@@ -483,11 +407,11 @@
wrapper.in(InvoiceRegistrationProduct::getSalesLedgerId, idList);
List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(wrapper);
List<Integer> invoiceLedgerIds = new ArrayList<>();
- if(CollectionUtils.isNotEmpty(invoiceRegistrationProducts)){
+ if (CollectionUtils.isNotEmpty(invoiceRegistrationProducts)) {
LambdaQueryWrapper<InvoiceLedger> wrapperOne = new LambdaQueryWrapper<>();
wrapperOne.in(InvoiceLedger::getInvoiceRegistrationProductId, invoiceRegistrationProducts.stream().map(InvoiceRegistrationProduct::getId).collect(Collectors.toList()));
List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(wrapperOne);
- if(CollectionUtils.isNotEmpty(invoiceLedgers)){
+ if (CollectionUtils.isNotEmpty(invoiceLedgers)) {
invoiceLedgerIds = invoiceLedgers.stream().map(InvoiceLedger::getId).collect(Collectors.toList());
}
invoiceLedgerMapper.delete(wrapperOne);
@@ -497,7 +421,7 @@
wrapperTwo.in(InvoiceRegistration::getSalesLedgerId, idList);
invoiceRegistrationMapper.delete(wrapperTwo);
- if(CollectionUtils.isNotEmpty(invoiceLedgerIds)){
+ if (CollectionUtils.isNotEmpty(invoiceLedgerIds)) {
LambdaQueryWrapper<ReceiptPayment> wrapperTree = new LambdaQueryWrapper<>();
wrapperTree.in(ReceiptPayment::getInvoiceLedgerId, invoiceLedgerIds);
receiptPaymentMapper.delete(wrapperTree);
@@ -512,7 +436,7 @@
LambdaQueryWrapper<SalesLedgerWork> workOrderWrapper = new LambdaQueryWrapper<>();
workOrderWrapper.in(SalesLedgerWork::getSalesLedgerId, idList);
salesLedgerWorkMapper.delete(workOrderWrapper);
- // 鍒犻櫎鐢熶骇鎶ュ伐鏁版嵁
+ // 鍒犻櫎鐢熶骇鏍哥畻鏁版嵁
LambdaQueryWrapper<SalesLedgerProductionAccounting> reportWrapper = new LambdaQueryWrapper<>();
reportWrapper.in(SalesLedgerProductionAccounting::getSalesLedgerId, idList);
salesLedgerProductionAccountingMapper.delete(reportWrapper);
@@ -693,73 +617,8 @@
salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
salesLedgerProductMapper.insert(salesLedgerProduct);
-
- ProductOrder productOrder = new ProductOrder();
- productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
- productOrder.setProductModelId(salesLedgerProduct.getId());
- productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
- productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
- productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
- productOrderMapper.insert(productOrder);
-
- ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()));
- if (processRoute != null) {
- //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
- ProductProcessRoute productProcessRoute = new ProductProcessRoute();
- productProcessRoute.setProductModelId(processRoute.getProductModelId());
- productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
- productProcessRoute.setProductOrderId(productOrder.getId());
- productProcessRoute.setBomId(processRoute.getBomId());
- productProcessRouteMapper.insert(productProcessRoute);
- //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
- List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
- // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
- String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- for (ProcessRouteItem processRouteItem : processRouteItems) {
- ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
- productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
- productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
- productProcessRouteItem.setProductOrderId(productOrder.getId());
- productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
- productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
- int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
- if (insert > 0) {
- // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
- QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
- queryWrapper.likeRight("work_order_no", datePrefix)
- .orderByDesc("work_order_no")
- .last("LIMIT 1");
-
- ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper);
-
- int sequenceNumber = 1; // 榛樿搴忓彿
- if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
- String lastNo = lastWorkOrder.getWorkOrderNo().toString();
- if (lastNo.startsWith(datePrefix)) {
- String seqStr = lastNo.substring(datePrefix.length());
- try {
- sequenceNumber = Integer.parseInt(seqStr) + 1;
- } catch (NumberFormatException e) {
- sequenceNumber = 1;
- }
- }
- }
- // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
- String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber);
- ProductWorkOrder productWorkOrder = new ProductWorkOrder();
- if (Objects.equals(productProcessRouteItem.getProductModelId(), salesLedgerProduct.getProductModelId())) {
- productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
- }
- productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
- productWorkOrder.setProductOrderId(productOrder.getId());
- productWorkOrder.setWorkOrderNo(workOrderNoStr);
- productWorkOrder.setStatus(1);
- productWorkOrderMapper.insert(productWorkOrder);
- }
- }
- productOrder.setRouteId(processRoute.getId());
- productOrderMapper.updateById(productOrder);
- }
+ // 娣诲姞鐢熶骇鏁版嵁
+ salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
}
}
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 7f951bf..309a5a0 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -63,9 +63,9 @@
druid:
# 涓诲簱鏁版嵁婧�
master:
- url: jdbc:mysql://localhost:3306/product-inventory-management-hckx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ url: jdbc:mysql://114.132.189.42:9099/product-inventory-management-sqd?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
- password: 123456
+ password: xd@123456..
# 浠庡簱鏁版嵁婧�
slave:
# 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
@@ -136,14 +136,14 @@
redis:
# 鍦板潃
host: 127.0.0.1
- # host: 172.17.0.1
+# host: 172.17.0.1
# 绔彛锛岄粯璁や负6379
port: 6379
# 鏁版嵁搴撶储寮�
database: 0
# 瀵嗙爜
- # password: root2022!
- password:
+# password: root2022!
+ password: 123456
# 杩炴帴瓒呮椂鏃堕棿
timeout: 10s
diff --git a/src/main/resources/mapper/basic/ProductModelMapper.xml b/src/main/resources/mapper/basic/ProductModelMapper.xml
index 07804bc..f9f1ff8 100644
--- a/src/main/resources/mapper/basic/ProductModelMapper.xml
+++ b/src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -33,5 +33,68 @@
LIMIT 1
</select>
+ <select id="listPageProductionStock" resultType="com.ruoyi.basic.pojo.ProductModel">
+ SELECT
+ pm.id,
+ pm.product_id,
+ pm.model,
+ pm.unit,
+ p.product_name,
+ GREATEST(s.last_in_time, o.last_out_time) AS create_time,
+ COALESCE(s.inboundNum, 0) AS inboundNum,
+ COALESCE(o.outboundNum, 0) AS outboundNum,
+ COALESCE(s.inboundNum, 0) - COALESCE(o.outboundNum, 0) AS stockQuantity
+ FROM product_model pm
+ LEFT JOIN product p ON pm.product_id = p.id
+
+ -- 鍏ュ簱姹囨��
+ LEFT JOIN (
+ SELECT
+ product_model_id,
+ SUM(inbound_num) AS inboundNum,
+ MAX(create_time) AS last_in_time
+ FROM procurement_record_storage
+ <where>
+ <if test="req.timeStr != null and req.timeStr != ''">
+ AND create_time >= #{req.timeStr}
+ AND create_time < DATE_ADD(#{req.timeStr}, INTERVAL 1 DAY)
+ </if>
+ </where>
+ GROUP BY product_model_id
+ ) s ON s.product_model_id = pm.id
+
+ -- 鍑哄簱姹囨��
+ LEFT JOIN (
+ SELECT
+ product_model_id,
+ SUM(inbound_num) AS outboundNum,
+ MAX(create_time) AS last_out_time
+ FROM procurement_record_out
+ <where>
+ <if test="req.timeStr != null and req.timeStr != ''">
+ AND create_time >= #{req.timeStr}
+ AND create_time < DATE_ADD(#{req.timeStr}, INTERVAL 1 DAY)
+ </if>
+ </where>
+ GROUP BY product_model_id
+ ) o ON o.product_model_id = pm.id
+
+ <where>
+ <if test="req.timeStr != null and req.timeStr != ''">
+ AND (s.product_model_id IS NOT NULL OR o.product_model_id IS NOT NULL)
+ </if>
+
+ <if test="req.productCategory != null and req.productCategory != ''">
+ AND EXISTS (
+ SELECT 1
+ FROM sales_ledger_product slp
+ WHERE slp.product_id = p.id
+ AND slp.product_category LIKE CONCAT('%', #{req.productCategory}, '%')
+ )
+ </if>
+ </where>
+
+ ORDER BY pm.id DESC
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
index 645b7c8..13c0965 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -371,6 +371,7 @@
<select id="listPageByProductProduction" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDto">
select
t1.*,
+ t1.inbound_num as inboundNum0,
t2.model as specification_model ,
t2.unit,
t3.product_name as product_category
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index b47d5cf..28e03b5 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -43,6 +43,9 @@
<if test="c.specificationModel != null and c.specificationModel != ''">
and slp.specification_model like concat('%',#{c.specificationModel},'%')
</if>
+ <if test="c.startTime != null and c.endTime != null">
+ and po.create_time between #{c.startTime} and #{c.endTime}
+ </if>
</where>
</select>
<select id="productMainByOrderId" resultType="com.ruoyi.production.dto.ProductOrderDto">
diff --git a/src/main/resources/mapper/production/ProductStructureMapper.xml b/src/main/resources/mapper/production/ProductStructureMapper.xml
index 3f04be2..baa2ac7 100644
--- a/src/main/resources/mapper/production/ProductStructureMapper.xml
+++ b/src/main/resources/mapper/production/ProductStructureMapper.xml
@@ -25,7 +25,7 @@
where ps.bom_id = #{bomId}
order by ps.id
</select>
- <select id="listByproductModelId" resultType="com.ruoyi.production.dto.ProductStructureDto">
+ <select id="listBybomAndProcess" resultType="com.ruoyi.production.dto.ProductStructureDto">
select ps.*,
p.product_name,
pp.name as process_name,
@@ -33,11 +33,11 @@
pm.model
from
product_structure ps
- left join product_bom pb on ps.bom_id = pb.id
left join product_model pm on ps.product_model_id = pm.id
left join product p on pm.product_id = p.id
left join product_process pp on ps.process_id = pp.id
- where pb.product_model_id = #{productModelId}
+ where ps.bom_id = #{bomId}
+ and ps.process_id=#{processId}
order by ps.id
</select>
<select id="listBybomAndProcess" resultType="com.ruoyi.production.dto.ProductStructureDto">
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index 2ab8057..06f79e1 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -38,33 +38,9 @@
<if test="c.workOrderNo != null and c.workOrderNo != ''">
pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
</if>
+ <if test="c.planStartTime != null and c.planEndTime != null">
+ and DATE(pwo.create_time) between #{c.planStartTime} and #{c.planEndTime}
+ </if>
</where>
</select>
- <select id="selectProductWorkOrderDtoList" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
- select *
- from product_work_order pwo
- left join product_order po on po.id = pwo.product_order_id
- </select>
-
- <update id="updatePlanQuantity" parameterType="java.util.Map">
- UPDATE product_work_order
- SET
- report_work = #{reportWork},
- plan_quantity = plan_quantity - #{deductQuantity}
- WHERE id = #{workOrderId}
- </update>
-
- <update id="rollbackPlanQuantity" parameterType="java.lang.Long">
- UPDATE product_work_order pwo
- INNER JOIN production_product_main ppm
- ON pwo.id = ppm.work_order_id
- AND ppm.id = #{productMainId}
- INNER JOIN production_product_output ppo
- ON ppo.product_main_id = ppm.id
- SET
- pwo.plan_quantity = pwo.plan_quantity + ppo.quantity,
- pwo.report_work = 0,
- pwo.quantity = 0
- WHERE pwo.id = ppm.work_order_id
- </update>
</mapper>
diff --git a/src/main/resources/mapper/production/ProductionProductInputMapper.xml b/src/main/resources/mapper/production/ProductionProductInputMapper.xml
index 7d203f3..a885977 100644
--- a/src/main/resources/mapper/production/ProductionProductInputMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductInputMapper.xml
@@ -13,11 +13,14 @@
<select id="listPageProductionProductInputDto" resultType="com.ruoyi.production.dto.ProductionProductInputDto">
select ppi.*,
pm.model as model,
- ppm.product_no as productNo
+ ppm.product_no as productNo,
+ p.product_name,
+ pm.unit
from
production_product_input ppi
left join production_product_main ppm on ppm.id = ppi.product_main_id
left join product_model pm on pm.id = ppi.product_model_id
+ left join product p on p.id = pm.product_id
<where>
<if test="c.productMainId != null and c.productMainId > 0">
and ppm.id = #{c.productMainId}
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index 3a0542c..1d98782 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -16,10 +16,20 @@
select ppm.*,
pwo.work_order_no as workOrderNo,
pwo.status as workOrderStatus,
- u.nick_name as nickName
+ u.nick_name as nickName,
+ p.product_name as productName,
+ pm.model as productModelName,
+ ppo.quantity,
+ pm.unit,
+ sl.sales_contract_no salesContractNo
from
production_product_main ppm
left join product_work_order pwo on pwo.id = ppm.work_order_id
+ left join product_order po on po.id = pwo.product_order_id
+ left join production_product_output ppo on ppm.id = ppo.product_main_id
+ left join product_model pm on pm.id = ppo.product_model_id
+ left join product p on p.id = pm.product_id
+ left join sales_ledger sl on sl.id = po.sales_ledger_id
left join sys_user u on u.user_id = ppm.user_id
<where>
<if test="c.nickName != null and c.nickName != ''">
@@ -36,6 +46,7 @@
</if>
</where>
order by ppm.id
+
</select>
<delete id="deleteByWorkOrderIds" parameterType="java.util.List">
--
Gitblit v1.9.3