From 0047f8ce5986c577e6b887403dd24ea884c9ce4b Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期二, 10 三月 2026 13:15:19 +0800
Subject: [PATCH] 入库前需审批,审批后入库(消息通知)
---
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java | 55 ++--
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | 1
src/main/java/com/ruoyi/stock/service/StockInventoryService.java | 6
src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java | 33 ++
src/main/java/com/ruoyi/stock/pojo/StockInRecord.java | 13 +
src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java | 19 +
src/main/resources/mapper/stock/StockInRecordMapper.xml | 14 +
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java | 5
src/main/java/com/ruoyi/stock/service/StockInRecordService.java | 4
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | 42 +++
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java | 106 +++++++---
src/main/java/com/ruoyi/stock/controller/StockInRecordController.java | 24 ++
src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java | 2
src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java | 82 ++++++-
src/main/java/com/ruoyi/approve/pojo/ApproveNode.java | 38 ++-
src/main/java/com/ruoyi/stock/service/StockUninventoryService.java | 3
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 119 +++++++++--
17 files changed, 425 insertions(+), 141 deletions(-)
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java b/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java
index 2ea7dd5..462b961 100644
--- a/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java
@@ -1,18 +1,16 @@
package com.ruoyi.approve.pojo;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.sales.pojo.CommonFile;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
/**
* 瀹℃壒鑺傜偣琛�
@@ -21,8 +19,9 @@
@Data
@TableName("approve_node")
@ApiModel
-public class ApproveNode{
+public class ApproveNode implements Serializable {
+ private static final long serialVersionUID = 1L;
@ApiModelProperty("闄勪欢id")
@TableField(exist = false)
@@ -125,7 +124,24 @@
*/
private String approveNodeRemark;
- private static final long serialVersionUID = 1L;
+ /**
+ * 鍏ュ簱id
+ */
+ @TableField(exist = false)
+ private Long recordId;
+ /**
+ * 鏄惁鍏ュ簱瀹℃牳閫氳繃
+ */
+ @ApiModelProperty(value = "鏄惁鍏ュ簱瀹℃牳閫氳繃")
+ @TableField(exist = false)
+ private boolean inventoryReview;
+
+ /**
+ * 鍏ュ簱绫诲瀷锛堝悎鏍�/涓嶅悎鏍硷級
+ */
+ @ApiModelProperty(value = "鍏ュ簱绫诲瀷")
+ @TableField(exist = false)
+ private String storageType;
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
index 808199f..44d89b8 100644
--- a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -1,12 +1,9 @@
package com.ruoyi.approve.pojo;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.util.Date;
-import java.util.List;
-
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.sales.pojo.CommonFile;
@@ -14,6 +11,11 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
/**
* 瀹℃壒娴佺▼琛�
@@ -127,7 +129,7 @@
private Long tenantId;
/**
- * 瀹℃壒绫诲瀷 1-鍏嚭绠$悊 2-璇峰亣绠$悊 3-鍑哄樊绠$悊 4-鎶ラ攢绠$悊 5-閲囪喘瀹℃壒 6-鎶ヤ环瀹℃壒 7-鍙戣揣瀹℃壒 8-鍗遍櫓浣滀笟瀹℃壒
+ * 瀹℃壒绫诲瀷 1-鍏嚭绠$悊 2-璇峰亣绠$悊 3-鍑哄樊绠$悊 4-鎶ラ攢绠$悊 5-閲囪喘瀹℃壒 6-鎶ヤ环瀹℃壒 7-鍙戣揣瀹℃壒 8-鍗遍櫓浣滀笟瀹℃壒 9-鍏ュ簱瀹℃壒
*/
private Integer approveType;
@@ -170,5 +172,20 @@
private BigDecimal maintenancePrice;
private static final long serialVersionUID = 1L;
+ /**
+ * 鏄惁鍏ュ簱瀹℃牳閫氳繃
+ */
+ @ApiModelProperty(value = "鏄惁鍏ュ簱瀹℃牳閫氳繃")
+ private boolean inventoryReview;
+ /**
+ * 鍏ュ簱绫诲瀷锛堝悎鏍�/涓嶅悎鏍硷級
+ */
+ @ApiModelProperty(value = "鍏ュ簱绫诲瀷")
+ private String storageType;
+
+ /**
+ * 鍏ュ簱id
+ */
+ private Long recordId;
}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
index 00a53f5..9e70dfd 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -13,7 +13,6 @@
import com.ruoyi.approve.service.IApproveNodeService;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.mapper.DeviceRepairMapper;
import com.ruoyi.device.pojo.DeviceRepair;
@@ -25,12 +24,19 @@
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.purchase.service.impl.PurchaseLedgerServiceImpl;
-import com.ruoyi.sales.mapper.*;
+import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.mapper.SalesQuotationMapper;
+import com.ruoyi.sales.mapper.ShippingInfoMapper;
import com.ruoyi.sales.pojo.CommonFile;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.pojo.SalesQuotation;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
+import com.ruoyi.stock.pojo.StockInRecord;
+import com.ruoyi.stock.service.StockInRecordService;
+import com.ruoyi.stock.service.StockInventoryService;
+import com.ruoyi.stock.service.StockUninventoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -47,7 +53,7 @@
public class ApproveNodeServiceImpl extends ServiceImpl<ApproveNodeMapper, ApproveNode> implements IApproveNodeService {
@Autowired
- private ApproveNodeMapper approveNodeMapper;
+ private ApproveNodeMapper approveNodeMapper;
@Autowired
private ApproveProcessMapper approveProcessMapper;
@Autowired
@@ -56,7 +62,7 @@
@Autowired
private TempFileServiceImpl tempFileService;
@Autowired
- private ISysNoticeService sysNoticeService;
+ private ISysNoticeService sysNoticeService;
@Autowired
private CommonFileMapper fileMapper;
@@ -81,6 +87,13 @@
@Autowired
private PurchaseLedgerServiceImpl purchaseLedgerServiceImpl;
+ @Autowired
+ private StockUninventoryService stockUninventoryService;
+ @Autowired
+ private StockInRecordService stockInRecordService;
+ @Autowired
+ private StockInventoryService stockInventoryService;
+
public ApproveProcess getApproveById(String id) {
@@ -94,7 +107,7 @@
}
@Override
- public void initApproveNodes(String approveUserIds,String approveID,Long tenantId) {
+ public void initApproveNodes(String approveUserIds, String approveID, Long tenantId) {
Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
String[] names = approveUserIds.split(",");
for (int i = 0; i < names.length; i++) {
@@ -102,7 +115,7 @@
if (sysUser == null) continue;
ApproveNode approveNode = new ApproveNode();
approveNode.setApproveProcessId(approveID);
- approveNode.setApproveNodeOrder(i +1);
+ approveNode.setApproveNodeOrder(i + 1);
approveNode.setApproveNodeUser(sysUser.getNickName());
approveNode.setApproveNodeUserId(sysUser.getUserId());
approveNode.setApproveNodeTime(new Date());
@@ -132,17 +145,17 @@
// .eq(ApproveProcess::getApproveStatus, 0)
.last("limit 1");
ApproveProcess approveProcess = approveProcessMapper.selectOne(approveProcessLambdaQueryWrapper);
- if(approveProcess != null && approveProcess.getApproveStatus() == 3){
+ if (approveProcess != null && approveProcess.getApproveStatus() == 3) {
return list;
}
for (ApproveNode approveNode : list) {
List<CommonFile> commonFiles = fileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
.eq(CommonFile::getCommonId, approveNode.getId())
.eq(CommonFile::getType, FileNameType.ApproveNode.getValue()));
- if(!CollectionUtils.isEmpty(commonFiles)){
+ if (!CollectionUtils.isEmpty(commonFiles)) {
approveNode.setUrl(commonFiles.get(0).getUrl());
}
- if(approveNode.getApproveNodeStatus() == 1){
+ if (approveNode.getApproveNodeStatus() == 1) {
continue;
}
approveNode.setIsShen(true);
@@ -151,13 +164,13 @@
return list;
}
- public void updateApproveProcessStatus(ApproveNode approveNode,Integer status) throws IOException {
+ public void updateApproveProcessStatus(ApproveNode approveNode, Integer status) throws IOException {
LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveId, approveNode.getApproveProcessId())
.eq(ApproveProcess::getApproveDelete, 0)
.last("limit 1");
ApproveProcess approveProcess = approveProcessMapper.selectOne(approveProcessLambdaQueryWrapper);
- if(approveProcess == null) throw new RuntimeException("瀹℃壒涓嶅瓨鍦�");
+ if (approveProcess == null) throw new RuntimeException("瀹℃壒涓嶅瓨鍦�");
LambdaQueryWrapper<ApproveNode> approveNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
approveNodeLambdaQueryWrapper.eq(ApproveNode::getApproveProcessId, approveNode.getApproveProcessId())
.eq(ApproveNode::getApproveNodeOrder, approveNode.getApproveNodeOrder() + 1)
@@ -166,21 +179,21 @@
.last("limit 1");
ApproveNode approveNode1 = approveNodeMapper.selectOne(approveNodeLambdaQueryWrapper);
approveProcess.setApproveStatus(status);
- if(approveNode1 != null){
+ if (approveNode1 != null) {
approveProcess.setApproveUserCurrentId(approveNode1.getApproveNodeUserId());
approveProcess.setApproveUserCurrentName(approveNode1.getApproveNodeUser());
}
- if(approveProcess.getApproveStatus().equals(2) || approveProcess.getApproveStatus().equals(3) || approveProcess.getApproveStatus().equals(4)){
+ if (approveProcess.getApproveStatus().equals(2) || approveProcess.getApproveStatus().equals(3) || approveProcess.getApproveStatus().equals(4)) {
approveProcess.setApproveOverTime(new Date());
}
approveProcessMapper.updateById(approveProcess);
DeviceRepair deviceRepair = deviceRepairMapper.selectById(approveProcess.getDeviceRepairId());
- if(ObjectUtils.isNotNull(deviceRepair)) {
- if(approveProcess.getApproveStatus().equals(2)){
+ if (ObjectUtils.isNotNull(deviceRepair)) {
+ if (approveProcess.getApproveStatus().equals(2)) {
// 鍚屾剰
deviceRepair.setStatus(1);
- }else if(approveProcess.getApproveStatus().equals(3)){
+ } else if (approveProcess.getApproveStatus().equals(3)) {
// 鎷掔粷
deviceRepair.setStatus(2);
}
@@ -188,11 +201,11 @@
}
//閲囪喘瀹℃牳
- if(approveProcess.getApproveType().equals(5)){
+ if (approveProcess.getApproveType().equals(5)) {
PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
.eq(PurchaseLedger::getPurchaseContractNumber, approveProcess.getApproveReason())
.last("limit 1"));
- if(purchaseLedger != null) {
+ if (purchaseLedger != null) {
if (status.equals(2)) {
// 鍚屾剰
purchaseLedger.setApprovalStatus(3);
@@ -202,7 +215,7 @@
// 璐ㄦ
if (salesLedgerProduct.getIsChecked()) {
purchaseLedgerServiceImpl.addQualityInspect(purchaseLedger, salesLedgerProduct);
- }else {
+ } else {
//鐩存帴鍏ュ簱
stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId());
}
@@ -218,33 +231,33 @@
}
}
// 閿�鍞姤浠风姸鎬佷慨鏀�
- if(approveProcess.getApproveType().equals(6)){
+ if (approveProcess.getApproveType().equals(6)) {
SalesQuotation salesQuote = salesQuotationMapper.selectOne(new LambdaQueryWrapper<SalesQuotation>()
.eq(SalesQuotation::getQuotationNo, approveProcess.getApproveReason())
.last("limit 1"));
// 鍚屾剰
- if(status.equals(2) && salesQuote != null){
+ if (status.equals(2) && salesQuote != null) {
salesQuote.setStatus("閫氳繃");
- }else if(status.equals(3) && salesQuote != null){
+ } else if (status.equals(3) && salesQuote != null) {
salesQuote.setStatus("鎷掔粷");
- }else if(status.equals(1) && salesQuote != null){
+ } else if (status.equals(1) && salesQuote != null) {
salesQuote.setStatus("瀹℃牳涓�");
}
salesQuotationMapper.updateById(salesQuote);
}
// 鍑哄簱瀹℃壒淇敼
- if(approveProcess.getApproveType().equals(7)){
+ if (approveProcess.getApproveType().equals(7)) {
String[] split = approveProcess.getApproveReason().split(":");
ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
.eq(ShippingInfo::getShippingNo, split[1])
.orderByDesc(ShippingInfo::getCreateTime)
.last("limit 1"));
- if(shippingInfo != null){
- if(status.equals(2)){
+ if (shippingInfo != null) {
+ if (status.equals(2)) {
shippingInfo.setStatus("瀹℃牳閫氳繃");
- }else if(status.equals(3)){
+ } else if (status.equals(3)) {
shippingInfo.setStatus("瀹℃牳鎷掔粷");
- }else if(status.equals(1)){
+ } else if (status.equals(1)) {
shippingInfo.setStatus("瀹℃牳涓�");
}
shippingInfoMapper.updateById(shippingInfo);
@@ -252,7 +265,7 @@
}
// 缁戝畾闄勪欢
- if(!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1){
+ if (!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1) {
tempFileService.migrateTempFilesToFormal(approveNode.getId(), approveNode.getTempFileIds(), FileNameType.ApproveNode.getValue());
}
}
@@ -260,21 +273,42 @@
@Override
public void updateApproveNode(ApproveNode approveNode) throws IOException {
// 瀹℃壒鑺傜偣鐘舵��:1鍚屾剰锛�2鎷掔粷锛�0灏氭湭瀹℃牳
- switch (approveNode.getApproveNodeStatus()){
+ switch (approveNode.getApproveNodeStatus()) {
case 1:
updateApproveProcessStatus(approveNode, Boolean.TRUE.equals(approveNode.getIsLast()) ? 2 : 1);
/*娑堟伅閫氱煡*/
Integer nodeOrder = approveNode.getApproveNodeOrder();
ApproveProcess approveProcess = approveProcessMapper.selectList(Wrappers.<ApproveProcess>lambdaQuery()
.eq(ApproveProcess::getApproveId, approveNode.getApproveProcessId())).get(0);
- if (approveProcess.getApproveUserIds().split(",").length > nodeOrder){
+ if (approveProcess.getApproveUserIds().split(",").length > nodeOrder) {
String id = approveProcess.getApproveUserIds().split(",")[nodeOrder];
- if (approveProcess.getApproveType()==8){
+ if (approveProcess.getApproveType() == 8) {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
"/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
- }else {
+ } else if (approveProcess.getApproveType() == 9) {
+ StockInRecord stockInRecord = stockInRecordService.getById(approveNode.getRecordId());
+ if (approveNode.isInventoryReview()) {
+ if ("涓嶅悎鏍煎叆搴�".equals(approveNode.getStorageType())) {
+ stockUninventoryService.updateOrCreateStockUninventory(stockInRecord);
+ } else if ("鍚堟牸鍏ュ簱".equals(approveNode.getStorageType())) {
+ stockInventoryService.updateOrCreateStockInventory(stockInRecord);
+ }
+ stockInRecord.setApproveStatus(2);
+ stockInRecordService.updateById(stockInRecord);
+ sysNoticeService.simpleNoticeByUser(
+ approveProcessType(approveProcess.getApproveType()),
+ approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
+ Arrays.asList(Long.valueOf(id)),
+ "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType()
+ + "&approveId=" + approveProcess.getApproveId()
+ );
+ }else {
+ stockInRecord.setApproveStatus(3);
+ stockInRecordService.updateById(stockInRecord);
+ }
+ } else {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
@@ -307,8 +341,8 @@
}
//瀹℃壒绫诲瀷鑾峰彇(涓庡墠绔〉闈㈠搴�)
- private String approveProcessType(Integer approveType){
- switch (approveType){
+ private String approveProcessType(Integer approveType) {
+ switch (approveType) {
case 1:
return "鍏嚭绠$悊";
case 2:
@@ -325,6 +359,8 @@
return "鍙戣揣瀹℃壒";
case 8:
return "鍗遍櫓浣滀笟瀹℃壒";
+ case 9:
+ return "鍏ュ簱瀹℃壒";
}
return null;
}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
index a624661..af8fe1d 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -16,8 +16,6 @@
import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.common.enums.FileNameType;
-import com.ruoyi.common.utils.OrderUtils;
-import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.other.service.impl.TempFileServiceImpl;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysNotice;
@@ -32,25 +30,20 @@
import com.ruoyi.sales.pojo.CommonFile;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
-import lombok.AllArgsConstructor;
-import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.io.IOException;
-import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -60,25 +53,25 @@
private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd");
@Autowired
- private StringRedisTemplate redisTemplate;
+ private StringRedisTemplate redisTemplate;
@Autowired
- private DailyRedisCounter dailyRedisCounter;
+ private DailyRedisCounter dailyRedisCounter;
@Autowired
- private SysDeptMapper sysDeptMapper;
+ private SysDeptMapper sysDeptMapper;
@Autowired
- private IApproveNodeService approveNodeService;
+ private IApproveNodeService approveNodeService;
@Autowired
- private SysUserMapper sysUserMapper;
+ private SysUserMapper sysUserMapper;
@Autowired
- private ApproveProcessMapper approveProcessMapper;
+ private ApproveProcessMapper approveProcessMapper;
@Autowired
- private TempFileServiceImpl tempFileService;
+ private TempFileServiceImpl tempFileService;
@Autowired
- private CommonFileMapper commonFileMapper;
+ private CommonFileMapper commonFileMapper;
@Autowired
- private CommonFileServiceImpl commonFileService;
+ private CommonFileServiceImpl commonFileService;
@Autowired
- private ISysNoticeService sysNoticeService;
+ private ISysNoticeService sysNoticeService;
@Override
public void addApprove(ApproveProcessVO approveProcessVO) throws Exception {
@@ -125,6 +118,10 @@
.collect(Collectors.toList())
.get(0)
.getNickName());
+ approveProcess.setStorageType(approveProcessVO.getStorageType());
+ approveProcess.setInventoryReview(approveProcessVO.isInventoryReview());
+ approveProcess.setInventoryReview(approveProcessVO.isInventoryReview());
+ approveProcess.setRecordId(approveProcessVO.getRecordId());
// 璁剧疆鐘舵�佷负閲嶆柊鎻愪氦
if (approveProcessVO.getId() != null) {
ApproveProcess approveProcess1 = approveProcessMapper.selectById(approveProcessVO.getId());
@@ -138,12 +135,12 @@
tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue());
/*娑堟伅閫氱煡*/
String id = approveProcessVO.getApproveUserIds().split(",")[0];
- if (approveProcess.getApproveType()==8){
+ if (approveProcess.getApproveType() == 8) {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
"/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
- }else {
+ } else {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
@@ -286,9 +283,9 @@
// 鍒犻櫎瀵瑰簲鐨勬秷鎭�氱煡
sysNoticeService.remove(new LambdaQueryWrapper<SysNotice>()
- .eq(SysNotice::getNoticeTitle, approveProcessType(latestProcess.getApproveType()))
- .eq(SysNotice::getSenderId, latestProcess.getApproveUser())
- .apply("CAST(notice_content AS CHAR) LIKE CONCAT('%', {0}, '%')", latestProcess.getApproveId()));
+ .eq(SysNotice::getNoticeTitle, approveProcessType(latestProcess.getApproveType()))
+ .eq(SysNotice::getSenderId, latestProcess.getApproveUser())
+ .apply("CAST(notice_content AS CHAR) LIKE CONCAT('%', {0}, '%')", latestProcess.getApproveId()));
}
}
@@ -296,8 +293,8 @@
@Override
public ApproveProcess getApproveById(String id) {
ApproveProcess one = approveProcessMapper.selectList(Wrappers.<ApproveProcess>lambdaQuery()
- .eq(ApproveProcess::getApproveId,id)
- .eq(ApproveProcess::getApproveDelete,0)).get(0);
+ .eq(ApproveProcess::getApproveId, id)
+ .eq(ApproveProcess::getApproveDelete, 0)).get(0);
one.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
.eq(CommonFile::getCommonId, one.getId())
.eq(CommonFile::getType, FileNameType.ApproveProcess.getValue())));
@@ -342,12 +339,12 @@
approveNodeService.initApproveNodes(approveGetAndUpdateVo.getApproveUserIds(), approveProcess.getApproveId(), approveProcess.getTenantId());
/*娑堟伅閫氱煡*/
String id = approveProcess.getApproveUserIds().split(",")[0];
- if (approveProcess.getApproveType()==8){
+ if (approveProcess.getApproveType() == 8) {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
"/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId());
- }else {
+ } else {
sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()),
approveProcess.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
@@ -407,12 +404,12 @@
tempFileService.migrateTempFilesToFormal(approve.getId(), approveGetAndUpdateVo.getTempFileIds(), FileNameType.ApproveProcess.getValue());
/*娑堟伅閫氱煡*/
String id = approve.getApproveUserIds().split(",")[0];
- if (approve.getApproveType()==8){
+ if (approve.getApproveType() == 8) {
sysNoticeService.simpleNoticeByUser(approveProcessType(approve.getApproveType()),
approve.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
"/safeProduction/safeWorkApproval?approveType=" + approve.getApproveType() + "&approveId=" + approve.getApproveId());
- }else {
+ } else {
sysNoticeService.simpleNoticeByUser(approveProcessType(approve.getApproveType()),
approve.getApproveId() + "娴佺▼缂栧彿鐨勫鎵归渶瑕佹偍瀹℃牳!!!!!",
Arrays.asList(Long.valueOf(id)),
@@ -441,6 +438,8 @@
return "鍙戣揣瀹℃壒";
case 8:
return "鍗遍櫓浣滀笟瀹℃壒";
+ case 9:
+ return "鍏ュ簱瀹℃壒";
}
return null;
}
diff --git a/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java b/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
index bf8edae..2d9ae4e 100644
--- a/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
+++ b/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
@@ -2,12 +2,10 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.sales.pojo.CommonFile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
-import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@@ -75,4 +73,21 @@
* 鎶ヤ慨閲戦
*/
private BigDecimal maintenancePrice;
+ /**
+ * 鏄惁鍏ュ簱瀹℃牳閫氳繃
+ */
+ @ApiModelProperty(value = "鏄惁鍏ュ簱瀹℃牳閫氳繃")
+ private boolean inventoryReview;
+
+ /**
+ * 鍏ュ簱绫诲瀷锛堝悎鏍�/涓嶅悎鏍硷級
+ */
+ @ApiModelProperty(value = "鍏ュ簱绫诲瀷")
+ private String storageType;
+
+ /**
+ * 鍏ュ簱id
+ */
+ @ApiModelProperty(value = "鍏ュ簱id")
+ private Long recordId;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 819ce65..3db55b2 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -4,7 +4,6 @@
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
-import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
import com.ruoyi.stock.pojo.StockInRecord;
@@ -13,15 +12,11 @@
import com.ruoyi.stock.service.StockInventoryService;
import com.ruoyi.stock.service.StockOutRecordService;
import com.ruoyi.stock.service.StockUninventoryService;
-import com.ruoyi.stock.service.impl.StockInRecordServiceImpl;
-import com.ruoyi.stock.service.impl.StockOutRecordServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
@Component
@RequiredArgsConstructor
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 8a1e066..ed6c4cf 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -9,7 +9,6 @@
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
index b12fc67..2b036e5 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
@@ -5,6 +5,7 @@
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.web.domain.R;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.service.StockInRecordService;
import io.swagger.annotations.Api;
@@ -32,11 +33,30 @@
}
+ @GetMapping("/getById")
+ @ApiOperation(value = "鏍规嵁ID鏌ヨ鍏ュ簱璁板綍")
+ public AjaxResult getById(@RequestParam("id") Long id) {
+ if (id == null || id <= 0) {
+ return AjaxResult.error("鍙傛暟id涓嶈兘涓虹┖");
+ }
+ StockInRecordDto stockInRecordDto = stockInRecordService.selectByRecord(id);
+ if (stockInRecordDto == null) {
+ return AjaxResult.error("璁板綍涓嶅瓨鍦�");
+ }
+ return AjaxResult.success(stockInRecordDto);
+ }
+
+ @PostMapping("/updateStockInRecord")
+ @ApiOperation("鍏ュ簱璁板綍瀹℃牳")
+ public R updateStockInRecord(@RequestBody StockInRecordDto stockInRecordDto) {
+ return R.ok(stockInRecordService.updateStockInRecord(stockInRecordDto));
+ }
+
@DeleteMapping("")
@Log(title = "鍏ュ簱绠$悊-鍒犻櫎鍏ュ簱", businessType = BusinessType.DELETE)
public AjaxResult delete(@RequestBody List<Long> ids) {
- if(CollectionUtils.isEmpty(ids)){
+ if (CollectionUtils.isEmpty(ids)) {
return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
}
return AjaxResult.success(stockInRecordService.batchDelete(ids));
@@ -45,7 +65,7 @@
@PostMapping("/exportStockInRecord")
@ApiOperation("瀵煎嚭鍏ュ簱璁板綍")
public void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto) {
- stockInRecordService.exportStockInRecord(response,stockInRecordDto);
+ stockInRecordService.exportStockInRecord(response, stockInRecordDto);
}
}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java
index afc30ae..f9d52d2 100644
--- a/src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java
@@ -14,4 +14,6 @@
IPage<StockInRecordDto> listPage(Page page, @Param("params") StockInRecordDto stockInRecordDto);
List<StockInRecordExportData> listStockInRecordExportData(@Param("params") StockInRecordDto stockInRecordDto);
+
+ StockInRecordDto selectByRecord(@Param("id")Long id);
}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java b/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
index 395d18f..5769540 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -62,4 +63,16 @@
@ApiModelProperty(value = "淇敼鐢ㄦ埛")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Integer updateUser;
+
+ @ApiModelProperty("琚鍗曢攣瀹氭暟閲�")
+ private BigDecimal lockedQuantity;
+
+ @ApiModelProperty("棰勮鏁伴噺")
+ private BigDecimal warnNum;
+ /**
+ * 瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 3瀹℃牳鏈�氳繃 4宸查噸鏂版彁浜�
+ */
+ @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 3瀹℃牳鏈�氳繃 4宸查噸鏂版彁浜�")
+ @Excel(name = "瀹℃壒鐘舵��", readConverterExp = "0=寰呭鏍�,1=瀹℃牳涓�,2=瀹℃牳瀹屾垚,3=瀹℃牳鏈�氳繃,4=宸查噸鏂版彁浜�")
+ private Integer approveStatus;
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
index 29ba7e5..7e56494 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
@@ -19,4 +19,8 @@
int batchDelete(List<Long> ids);
void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto);
+
+ StockInRecordDto selectByRecord(Long id);
+
+ int updateStockInRecord(StockInRecordDto stockInRecordDto);
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
index 65dcca3..24c7053 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
@@ -3,9 +3,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.pojo.StockInRecord;
import com.ruoyi.stock.pojo.StockInventory;
import org.springframework.web.multipart.MultipartFile;
@@ -38,4 +40,8 @@
Boolean frozenStock(StockInventoryDto stockInventoryDto);
Boolean thawStock(StockInventoryDto stockInventoryDto);
+
+ void updateOrCreateStockInventory(StockInRecord stockInRecord);
+
+ void addApproveByPurchase(LoginUser loginUser, StockInRecordDto stockInRecordDto) throws Exception;
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java b/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java
index 0d6ba6d..92fc0ab 100644
--- a/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockUninventoryService.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
+import com.ruoyi.stock.pojo.StockInRecord;
import com.ruoyi.stock.pojo.StockUninventory;
import javax.servlet.http.HttpServletResponse;
@@ -30,4 +31,6 @@
Boolean frozenStock(StockInventoryDto stockInventoryDto);
Boolean thawStock(StockInventoryDto stockInventoryDto);
+
+ void updateOrCreateStockUninventory(StockInRecord stockInRecord);
}
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 30e545f..73b3a42 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -4,13 +4,15 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.EnumUtil;
import com.ruoyi.common.utils.OrderUtils;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
@@ -22,7 +24,8 @@
import com.ruoyi.stock.pojo.StockInventory;
import com.ruoyi.stock.pojo.StockUninventory;
import com.ruoyi.stock.service.StockInRecordService;
-import lombok.AllArgsConstructor;
+import com.ruoyi.stock.service.StockInventoryService;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -30,12 +33,16 @@
import java.util.List;
@Service
-@AllArgsConstructor
public class StockInRecordServiceImpl extends ServiceImpl<StockInRecordMapper, StockInRecord> implements StockInRecordService {
+ @Autowired
private StockInRecordMapper stockInRecordMapper;
+ @Autowired
private StockInventoryMapper stockInventoryMapper;
+ @Autowired
private StockUninventoryMapper stockUninventoryMapper;
+ @Autowired
+ private StockInventoryService stockInventoryService;
@Override
public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) {
@@ -58,7 +65,7 @@
public int update(Long id, StockInRecordDto stockInRecordDto) {
// 鍒ゆ柇瀵硅薄鏄惁瀛樺湪
StockInRecord stockInRecord = stockInRecordMapper.selectById(id);
- if (stockInRecord == null){
+ if (stockInRecord == null) {
throw new BaseException("璇ュ叆搴撹褰曚笉瀛樺湪,鏃犳硶鏇存柊!!!");
}
@@ -76,17 +83,17 @@
StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, stockInRecord.getProductModelId()));
if (stockInventory == null) {
throw new BaseException("搴撳瓨璁板綍涓病鏈夊搴旂殑浜у搧,鏃犳硶鍒犻櫎!!!");
- }else {
+ } else {
StockInventoryDto stockInRecordDto = new StockInventoryDto();
stockInRecordDto.setProductModelId(stockInventory.getProductModelId());
stockInRecordDto.setQualitity(stockInRecord.getStockInNum());
stockInventoryMapper.updateSubtractStockInventory(stockInRecordDto);
}
- }else if (stockInRecord.getType().equals("1")) {
+ } else if (stockInRecord.getType().equals("1")) {
StockUninventory stockUninventory = stockUninventoryMapper.selectOne(new LambdaQueryWrapper<StockUninventory>().eq(StockUninventory::getProductModelId, stockInRecord.getProductModelId()));
if (stockUninventory == null) {
throw new BaseException("搴撳瓨璁板綍涓病鏈夊搴旂殑浜у搧,鏃犳硶鍒犻櫎!!!");
- }else {
+ } else {
StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId());
stockUninventoryDto.setQualitity(stockInRecord.getStockInNum());
@@ -103,11 +110,28 @@
for (StockInRecordExportData stockInRecordExportData : list) {
if (stockInRecordExportData.getType().equals("0")) {
stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockOutQualifiedRecordTypeEnum.class, Integer.parseInt(stockInRecordExportData.getRecordType())).getValue());
- }else {
+ } else {
stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockInUnQualifiedRecordTypeEnum.class, Integer.parseInt(stockInRecordExportData.getRecordType())).getValue());
}
}
ExcelUtil<StockInRecordExportData> util = new ExcelUtil<>(StockInRecordExportData.class);
- util.exportExcel(response,list, "鍏ュ簱璁板綍淇℃伅");
+ util.exportExcel(response, list, "鍏ュ簱璁板綍淇℃伅");
+ }
+
+ @Override
+ public StockInRecordDto selectByRecord(Long id) {
+ return stockInRecordMapper.selectByRecord(id);
+ }
+
+ @Override
+ public int updateStockInRecord(StockInRecordDto stockInRecordDto) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ try {
+ stockInventoryService.addApproveByPurchase(loginUser, stockInRecordDto);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ stockInRecordDto.setApproveStatus(2);
+ return stockInRecordMapper.updateById(stockInRecordDto);
}
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index 5cb6dda..e6aa3c3 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -1,13 +1,17 @@
package com.ruoyi.stock.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
+import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
@@ -16,18 +20,21 @@
import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.execl.StockInventoryExportData;
import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.pojo.StockInRecord;
import com.ruoyi.stock.pojo.StockInventory;
import com.ruoyi.stock.service.StockInRecordService;
import com.ruoyi.stock.service.StockInventoryService;
import com.ruoyi.stock.service.StockOutRecordService;
-import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
+import java.time.LocalDate;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
/**
@@ -39,19 +46,25 @@
* @since 2026-01-21 04:16:36
*/
@Service
-@AllArgsConstructor
public class StockInventoryServiceImpl extends ServiceImpl<StockInventoryMapper, StockInventory> implements StockInventoryService {
- private StockInventoryMapper stockInventoryMapper;
+ @Autowired
+ private StockInventoryMapper stockInventoryMapper;
+ @Autowired
private StockInRecordService stockInRecordService;
+ @Autowired
private StockOutRecordService stockOutRecordService;
+ @Autowired
private SalesLedgerProductMapper salesLedgerProductMapper;
+ @Autowired
+ private ApproveProcessServiceImpl approveProcessService;
+
@Override
public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) {
return stockInventoryMapper.pagestockInventory(page, stockInventoryDto);
}
- //鍏ュ簱璋冪敤
+ //鍏ュ簱璋冪敤-娣诲姞鍏ュ簱璁板綍
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addstockInventory(StockInventoryDto stockInventoryDto) {
@@ -61,24 +74,76 @@
stockInRecordDto.setRecordType(stockInventoryDto.getRecordType());
stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity());
stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
+ stockInRecordDto.setRemark(stockInventoryDto.getRemark());
+ stockInRecordDto.setWarnNum(stockInventoryDto.getWarnNum());
+ stockInRecordDto.setLockedQuantity(stockInventoryDto.getLockedQuantity());
stockInRecordDto.setType("0");
- stockInRecordService.add(stockInRecordDto);
- //鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
- //鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
- StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
- if (ObjectUtils.isEmpty(oldStockInventory)) {
- StockInventory newStockInventory = new StockInventory();
- newStockInventory.setProductModelId(stockInventoryDto.getProductModelId());
- newStockInventory.setQualitity(stockInventoryDto.getQualitity());
- newStockInventory.setVersion(1);
- newStockInventory.setRemark(stockInventoryDto.getRemark());
- newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
- newStockInventory.setWarnNum(stockInventoryDto.getWarnNum());
- stockInventoryMapper.insert(newStockInventory);
- }else {
- stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
+ int add = stockInRecordService.add(stockInRecordDto);
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (add > 0) {
+ try {
+ addApproveByPurchase(loginUser, stockInRecordDto);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
return true;
+ }
+
+ public void addApproveByPurchase(LoginUser loginUser, StockInRecordDto stockInRecordDto) throws Exception {
+ ApproveProcessVO approveProcessVO = new ApproveProcessVO();
+ approveProcessVO.setApproveType(9);
+ approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
+ approveProcessVO.setApproveReason(stockInRecordDto.getInboundBatches());
+ approveProcessVO.setApproveUserIds(String.valueOf(1));
+ approveProcessVO.setApproveUser(loginUser.getUserId());
+ approveProcessVO.setApproveTime(LocalDate.now().toString());
+ approveProcessVO.setInventoryReview(false);
+ approveProcessVO.setStorageType("鍚堟牸鍏ュ簱");
+ approveProcessVO.setRecordId(stockInRecordDto.getId());
+ approveProcessService.addApprove(approveProcessVO);
+ }
+
+ /**
+ * 瀹為檯鍏ュ簱
+ *
+ * @param stockInRecord
+ */
+ public void updateOrCreateStockInventory(StockInRecord stockInRecord) {
+ // 鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪
+ StockInventory oldStockInventory = stockInventoryMapper.selectOne(
+ new QueryWrapper<StockInventory>().lambda()
+ .eq(StockInventory::getProductModelId, stockInRecord.getProductModelId())
+ );
+
+ if (ObjectUtils.isEmpty(oldStockInventory)) {
+ // 涓嶅瓨鍦ㄥ垯鏂板
+ StockInventory newStockInventory = new StockInventory();
+ newStockInventory.setProductModelId(stockInRecord.getProductModelId());
+ newStockInventory.setQualitity(stockInRecord.getStockInNum());
+ newStockInventory.setVersion(1);
+ newStockInventory.setRemark(stockInRecord.getRemark());
+ newStockInventory.setLockedQuantity(stockInRecord.getLockedQuantity());
+ newStockInventory.setWarnNum(stockInRecord.getWarnNum());
+ stockInventoryMapper.insert(newStockInventory);
+ } else {
+ // 瀛樺湪鍒欐洿鏂�
+ LambdaUpdateWrapper<StockInventory> updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper
+ .eq(StockInventory::getProductModelId, stockInRecord.getProductModelId())
+ .setSql(stockInRecord.getStockInNum() != null,
+ "qualitity = qualitity + " + stockInRecord.getStockInNum())
+ .setSql(true, "version = version + 1")
+ .set(stockInRecord.getRemark() != null && !stockInRecord.getRemark().isEmpty(),
+ StockInventory::getRemark, stockInRecord.getRemark())
+ .set(stockInRecord.getWarnNum() != null,
+ StockInventory::getWarnNum, stockInRecord.getWarnNum())
+ .setSql(stockInRecord.getLockedQuantity() != null,
+ "locked_quantity = locked_quantity + " + stockInRecord.getLockedQuantity())
+ .set(StockInventory::getUpdateTime, new Date());
+
+ stockInventoryMapper.update(null, updateWrapper);
+ }
}
//鍑哄簱璋冪敤
@@ -132,7 +197,7 @@
stockInventoryDto.setQualitity(dto.getQualitity());
stockInventoryDto.setRemark(dto.getRemark());
stockInventoryDto.setWarnNum(dto.getWarnNum());
- if (ObjectUtils.isNotEmpty(dto.getLockedQuantity())&&dto.getLockedQuantity().compareTo(dto.getQualitity())>0) {
+ if (ObjectUtils.isNotEmpty(dto.getLockedQuantity()) && dto.getLockedQuantity().compareTo(dto.getQualitity()) > 0) {
throw new RuntimeException("鍐荤粨鏁伴噺涓嶈兘瓒呰繃鏈瀵煎叆鐨勫簱瀛樻暟閲�");
}
stockInventoryDto.setLockedQuantity(dto.getLockedQuantity());
@@ -171,28 +236,28 @@
List<StockInventoryExportData> list = stockInventoryMapper.listStockInventoryExportData(stockInventoryDto);
ExcelUtil<StockInventoryExportData> util = new ExcelUtil<>(StockInventoryExportData.class);
- util.exportExcel(response,list, "搴撳瓨淇℃伅");
+ util.exportExcel(response, list, "搴撳瓨淇℃伅");
}
@Override
public IPage<StockInRecordDto> stockInventoryPage(StockInventoryDto stockInventoryDto, Page page) {
- return stockInventoryMapper.stockInventoryPage(stockInventoryDto,page);
+ return stockInventoryMapper.stockInventoryPage(stockInventoryDto, page);
}
@Override
public IPage<StockInventoryDto> stockInAndOutRecord(StockInventoryDto stockInventoryDto, Page page) {
- return stockInventoryMapper.stockInAndOutRecord(stockInventoryDto,page);
+ return stockInventoryMapper.stockInAndOutRecord(stockInventoryDto, page);
}
@Override
public Boolean frozenStock(StockInventoryDto stockInventoryDto) {
StockInventory stockInventory = stockInventoryMapper.selectById(stockInventoryDto.getId());
- if (stockInventory.getQualitity().compareTo(stockInventoryDto.getLockedQuantity())<0) {
+ if (stockInventory.getQualitity().compareTo(stockInventoryDto.getLockedQuantity()) < 0) {
throw new RuntimeException("鍐荤粨鏁伴噺涓嶈兘瓒呰繃搴撳瓨鏁伴噺");
}
if (ObjectUtils.isEmpty(stockInventory.getLockedQuantity())) {
stockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
- }else {
+ } else {
stockInventory.setLockedQuantity(stockInventory.getLockedQuantity().add(stockInventoryDto.getLockedQuantity()));
}
return this.updateById(stockInventory);
@@ -201,7 +266,7 @@
@Override
public Boolean thawStock(StockInventoryDto stockInventoryDto) {
StockInventory stockInventory = stockInventoryMapper.selectById(stockInventoryDto.getId());
- if (stockInventory.getLockedQuantity().compareTo(stockInventoryDto.getLockedQuantity())<0) {
+ if (stockInventory.getLockedQuantity().compareTo(stockInventoryDto.getLockedQuantity()) < 0) {
throw new RuntimeException("瑙e喕鏁伴噺涓嶈兘瓒呰繃鍐荤粨鏁伴噺");
}
stockInventory.setLockedQuantity(stockInventory.getLockedQuantity().subtract(stockInventoryDto.getLockedQuantity()));
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
index 2d5b8f5..ab630bb 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
@@ -1,17 +1,23 @@
package com.ruoyi.stock.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
+import com.ruoyi.approve.vo.ApproveProcessVO;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
import com.ruoyi.stock.execl.StockUnInventoryExportData;
import com.ruoyi.stock.mapper.StockUninventoryMapper;
+import com.ruoyi.stock.pojo.StockInRecord;
import com.ruoyi.stock.pojo.StockUninventory;
import com.ruoyi.stock.service.StockInRecordService;
import com.ruoyi.stock.service.StockOutRecordService;
@@ -21,6 +27,8 @@
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDate;
+import java.util.Date;
import java.util.List;
/**
@@ -38,6 +46,7 @@
private StockUninventoryMapper stockUninventoryMapper;
private StockOutRecordService stockOutRecordService;
private StockInRecordService stockInRecordService;
+ private ApproveProcessServiceImpl approveProcessService;
@Override
public IPage<StockUninventoryDto> pageStockUninventory(Page page, StockUninventoryDto stockUninventoryDto) {
@@ -53,24 +62,71 @@
stockInRecordDto.setRecordType(stockUninventoryDto.getRecordType());
stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity());
stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
+ stockInRecordDto.setRemark(stockUninventoryDto.getRemark());
stockInRecordDto.setType("1");
- stockInRecordService.add(stockInRecordDto);
- //鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
- //鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
- StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()));
- if (ObjectUtils.isEmpty(oldStockUnInventory)) {
- StockUninventory newStockUnInventory = new StockUninventory();
- newStockUnInventory.setProductModelId(stockUninventoryDto.getProductModelId());
- newStockUnInventory.setQualitity(stockUninventoryDto.getQualitity());
- newStockUnInventory.setVersion(1);
- newStockUnInventory.setRemark(stockUninventoryDto.getRemark());
- stockUninventoryMapper.insert(newStockUnInventory);
- }else {
- stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto);
+ int add = stockInRecordService.add(stockInRecordDto);
+
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (add > 0){
+ try {
+ addApproveByPurchase(loginUser,stockInRecordDto);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
}
+
return 1;
}
+ public void addApproveByPurchase(LoginUser loginUser, StockInRecordDto stockInRecordDto) throws Exception {
+ ApproveProcessVO approveProcessVO = new ApproveProcessVO();
+ approveProcessVO.setApproveType(9);
+ approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
+ approveProcessVO.setApproveReason(stockInRecordDto.getInboundBatches());
+ approveProcessVO.setApproveUserIds(String.valueOf(1));
+ approveProcessVO.setApproveUser(loginUser.getUserId());
+ approveProcessVO.setApproveTime(LocalDate.now().toString());
+ approveProcessVO.setInventoryReview(false);
+ approveProcessVO.setStorageType("涓嶅悎鏍煎叆搴�");
+ approveProcessVO.setRecordId(stockInRecordDto.getId());
+ approveProcessService.addApprove(approveProcessVO);
+ }
+
+ /**
+ * 鏇存柊鎴栧垱寤洪潪鑹搧搴撳瓨淇℃伅
+ * @param stockInRecord 闈炶壇鍝佸簱瀛楧TO瀵硅薄
+ */
+ public void updateOrCreateStockUninventory(StockInRecord stockInRecord) {
+ // 鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪
+ StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(
+ new QueryWrapper<StockUninventory>().lambda()
+ .eq(StockUninventory::getProductModelId, stockInRecord.getProductModelId())
+ );
+
+ if (ObjectUtils.isEmpty(oldStockUnInventory)) {
+ // 涓嶅瓨鍦ㄥ垯鏂板
+ StockUninventory newStockUnInventory = new StockUninventory();
+ newStockUnInventory.setProductModelId(stockInRecord.getProductModelId());
+ newStockUnInventory.setQualitity(stockInRecord.getStockInNum());
+ newStockUnInventory.setVersion(1);
+ newStockUnInventory.setRemark(stockInRecord.getRemark());
+ stockUninventoryMapper.insert(newStockUnInventory);
+ } else {
+ LambdaUpdateWrapper<StockUninventory> updateWrapper = new LambdaUpdateWrapper<>();
+ if (stockInRecord.getStockInNum() != null) {
+ updateWrapper.setSql("qualitity = qualitity + " + stockInRecord.getStockInNum());
+ }
+ updateWrapper.setSql("version = version + 1");
+ String remark = stockInRecord.getRemark();
+ if (remark != null && !remark.isEmpty()) {
+ updateWrapper.set(StockUninventory::getRemark, remark);
+ }
+ updateWrapper.set(StockUninventory::getUpdateTime, new Date());
+ updateWrapper.eq(StockUninventory::getProductModelId, stockInRecord.getProductModelId());
+ stockUninventoryMapper.update(null, updateWrapper);
+ }
+ }
+
@Override
@Transactional(rollbackFor = Exception.class)
public Integer subtractStockUninventory(StockUninventoryDto stockUninventoryDto) {
diff --git a/src/main/resources/mapper/stock/StockInRecordMapper.xml b/src/main/resources/mapper/stock/StockInRecordMapper.xml
index d5c3f38..7dd8377 100644
--- a/src/main/resources/mapper/stock/StockInRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -56,4 +56,18 @@
</where>
order by sir.id desc
</select>
+ <select id="selectByRecord" resultType="com.ruoyi.stock.dto.StockInRecordDto">
+ SELECT
+ sir.*,
+ p.product_name as product_name,
+ pm.model,
+ pm.unit,
+ u.nick_name as createBy
+ FROM stock_in_record as sir
+ LEFT JOIN product_model as pm on sir.product_model_id = pm.id
+ LEFT JOIN product as p on pm.product_id = p.id
+ LEFT JOIN sys_user as u on sir.create_user = u.user_id
+ WHERE sir.id= #{id}
+ order by sir.id desc
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.3