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; } 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; } 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; } 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; } 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; } 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 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; 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); } } 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); } 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; } 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); } 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; } 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); } 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); } } 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("解冻数量不能超过冻结数量"); } stockInventory.setLockedQuantity(stockInventory.getLockedQuantity().subtract(stockInventoryDto.getLockedQuantity())); 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 非良品库存DTO对象 */ 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) { 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>