src/main/java/com/ruoyi/approve/bean/dto/ApproveProcessConfigNodeDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package com.ruoyi.approve.bean.dto; import com.ruoyi.approve.pojo.ApproveProcessConfigNode; import lombok.Data; import java.util.List; @Data public class ApproveProcessConfigNodeDto extends ApproveProcessConfigNode { private List<ApproveProcessConfigNode> approveProcessConfigNodes; } src/main/java/com/ruoyi/approve/bean/vo/ApproveGetAndUpdateVo.java
ÎļþÃû´Ó src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java ÐÞ¸Ä @@ -1,7 +1,8 @@ package com.ruoyi.approve.vo; package com.ruoyi.approve.bean.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import com.ruoyi.sales.pojo.CommonFile; import io.swagger.annotations.ApiModelProperty; import lombok.Data; src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessConfigNodeVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,9 @@ package com.ruoyi.approve.bean.vo; import com.ruoyi.approve.pojo.ApproveProcessConfigNode; import lombok.Data; @Data public class ApproveProcessConfigNodeVo extends ApproveProcessConfigNode { } src/main/java/com/ruoyi/approve/bean/vo/ApproveProcessVO.java
ÎļþÃû´Ó src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java ÐÞ¸Ä @@ -1,7 +1,8 @@ package com.ruoyi.approve.vo; package com.ruoyi.approve.bean.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import com.ruoyi.sales.pojo.CommonFile; import io.swagger.annotations.ApiModelProperty; import lombok.Data; src/main/java/com/ruoyi/approve/bean/vo/KnowledgeBaseVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.ruoyi.approve.bean.vo; import com.ruoyi.approve.pojo.KnowledgeBase; import com.ruoyi.approve.pojo.KnowledgeBaseFile; import lombok.Data; import java.util.List; @Data public class KnowledgeBaseVo extends KnowledgeBase { private List<KnowledgeBaseFile> files; } src/main/java/com/ruoyi/approve/controller/ApproveProcessConfigNodeController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ package com.ruoyi.approve.controller; import com.ruoyi.approve.pojo.ApproveProcessConfigNode; import com.ruoyi.approve.service.ApproveProcessConfigNodeService; import com.ruoyi.framework.web.domain.R; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; /** * <p> * å®¡æ¹æµç¨é ç½®èç¹è¡¨ å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-23 10:21:41 */ @RestController @RequestMapping("/approveProcessConfigNode") @AllArgsConstructor public class ApproveProcessConfigNodeController { private final ApproveProcessConfigNodeService approveProcessConfigNodeService; /** * æ¥è¯¢å®¡æ¹ä¸é¢çèç¹ * @param type * @return */ @GetMapping("/list") public R listNode(Integer type) { return R.ok(approveProcessConfigNodeService.listNode(type)); } /** * æ·»å 审æ¹èç¹ * @param approveProcessConfigNodes * @return */ @ApiOperation("æ·»å 审æ¹èç¹") @PostMapping("/add") public R addApproveProcessConfigNodes(@RequestBody List<ApproveProcessConfigNode> approveProcessConfigNodes) { return R.ok(approveProcessConfigNodeService.addApproveProcessConfigNodes(approveProcessConfigNodes)); } } src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
@@ -5,8 +5,8 @@ import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.IApproveProcessService; import com.ruoyi.approve.vo.ApproveGetAndUpdateVo; import com.ruoyi.approve.vo.ApproveProcessVO; import com.ruoyi.approve.bean.vo.ApproveGetAndUpdateVo; import com.ruoyi.approve.bean.vo.ApproveProcessVO; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.security.LoginUser; src/main/java/com/ruoyi/approve/controller/KnowledgeBaseController.java
@@ -3,8 +3,11 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.mapper.KnowledgeBaseMapper; import com.ruoyi.approve.bean.vo.KnowledgeBaseVo; import com.ruoyi.approve.pojo.KnowledgeBase; import com.ruoyi.approve.pojo.RpaProcessAutomation; import com.ruoyi.approve.pojo.KnowledgeBaseFile; import com.ruoyi.approve.service.KnowledgeBaseFileService; import com.ruoyi.approve.service.KnowledgeBaseService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.AjaxResult; src/main/java/com/ruoyi/approve/mapper/ApproveProcessConfigNodeMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.approve.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.approve.pojo.ApproveProcessConfigNode; import org.apache.ibatis.annotations.Mapper; /** * <p> * å®¡æ¹æµç¨é ç½®èç¹è¡¨ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-23 10:21:41 */ @Mapper public interface ApproveProcessConfigNodeMapper extends BaseMapper<ApproveProcessConfigNode> { } src/main/java/com/ruoyi/approve/mapper/KnowledgeBaseMapper.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.bean.vo.KnowledgeBaseVo; import com.ruoyi.approve.pojo.KnowledgeBase; import org.apache.ibatis.annotations.Mapper; src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -1,11 +1,5 @@ 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.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; @@ -15,6 +9,11 @@ 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; /** * å®¡æ¹æµç¨è¡¨ * @TableName approve_process src/main/java/com/ruoyi/approve/pojo/ApproveProcessConfigNode.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,118 @@ package com.ruoyi.approve.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; 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 io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import lombok.ToString; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * å®¡æ¹æµç¨é ç½®èç¹è¡¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-23 10:21:41 */ @Getter @Setter @ToString @TableName("approve_process_config_node") @ApiModel(value = "ApproveProcessConfigNode对象", description = "å®¡æ¹æµç¨é ç½®èç¹è¡¨") public class ApproveProcessConfigNode implements Serializable { private static final long serialVersionUID = 1L; /** * 主é®ID */ @ApiModelProperty("主é®ID") @TableId(value = "id", type = IdType.AUTO) private Long id; // '审æ¹ç±»åï¼1å ¬åºç®¡çï¼2请å管çï¼3åºå·®ç®¡çï¼4æ¥é管çï¼5éè´å®¡æ¹ï¼6æ¥ä»·å®¡æ¹ï¼7å货审æ¹ï¼8å±é©ä½ä¸å®¡æ¹', @ApiModelProperty("审æ¹ç±»åï¼1å ¬åºç®¡çï¼2请å管çï¼3åºå·®ç®¡çï¼4æ¥é管çï¼5éè´å®¡æ¹ï¼6æ¥ä»·å®¡æ¹ï¼7å货审æ¹ï¼8å±é©ä½ä¸å®¡æ¹") private Integer approveType; /** * èç¹é¡ºåº */ @ApiModelProperty("èç¹é¡ºåº") private Integer nodeOrder; /** * 审æ¹äººIDsï¼å¤ä¸ªç¨éå·åéï¼ */ @ApiModelProperty("审æ¹äººID") private Long approverId; /** * 审æ¹äººåç§° */ @ApiModelProperty("审æ¹äººåç§°") private String approverName; /** * è¶ æ¶æ¶é¿ï¼å°æ¶ï¼ */ @ApiModelProperty("è¶ æ¶æ¶é¿ï¼å°æ¶ï¼") private Integer timeoutHours; /** * ç§æ·ID */ @ApiModelProperty("ç§æ·ID") private Long tenantId; /** * åå»ºç¨æ·ID */ @ApiModelProperty("åå»ºç¨æ·ID") @TableField(fill = FieldFill.INSERT) private Long createUser; /** * å建æ¶é´ */ @ApiModelProperty("å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; /** * ä¿®æ¹ç¨æ·ID */ @ApiModelProperty("ä¿®æ¹ç¨æ·ID") @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateUser; /** * ä¿®æ¹æ¶é´ */ @ApiModelProperty("ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; /** * å 餿 è®°ï¼0æ£å¸¸ï¼1å é¤ */ @ApiModelProperty("å 餿 è®°ï¼0æ£å¸¸ï¼1å é¤") private Boolean deleteFlag; /** * é¨é¨ID */ @ApiModelProperty("é¨é¨ID") @TableField(fill = FieldFill.INSERT) private Long deptId; } src/main/java/com/ruoyi/approve/service/ApproveProcessConfigNodeService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package com.ruoyi.approve.service; import com.ruoyi.approve.bean.vo.ApproveProcessConfigNodeVo; import com.ruoyi.approve.pojo.ApproveProcessConfigNode; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** * <p> * å®¡æ¹æµç¨é ç½®èç¹è¡¨ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-23 10:21:41 */ public interface ApproveProcessConfigNodeService extends IService<ApproveProcessConfigNode> { List<ApproveProcessConfigNodeVo> listNode(Integer type); Boolean addApproveProcessConfigNodes(List<ApproveProcessConfigNode> approveProcessConfigNodes); } src/main/java/com/ruoyi/approve/service/IApproveProcessService.java
@@ -3,14 +3,12 @@ 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.approve.pojo.ApproveNode; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.vo.ApproveGetAndUpdateVo; import com.ruoyi.approve.vo.ApproveProcessVO; import com.ruoyi.approve.bean.vo.ApproveGetAndUpdateVo; import com.ruoyi.approve.bean.vo.ApproveProcessVO; import com.ruoyi.project.system.domain.SysDept; import java.io.IOException; import java.text.ParseException; import java.util.List; public interface IApproveProcessService extends IService<ApproveProcess> { src/main/java/com/ruoyi/approve/service/KnowledgeBaseService.java
@@ -3,8 +3,10 @@ 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.approve.bean.vo.KnowledgeBaseVo; import com.ruoyi.approve.pojo.KnowledgeBase; public interface KnowledgeBaseService extends IService<KnowledgeBase> { IPage<KnowledgeBase> listpage(Page page, KnowledgeBase knowledgeBase); } src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -24,14 +24,24 @@ import com.ruoyi.project.system.service.ISysNoticeService; 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.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.mapper.QualityInspectParamMapper; import com.ruoyi.quality.mapper.QualityTestStandardMapper; import com.ruoyi.quality.mapper.QualityTestStandardParamMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectParam; import com.ruoyi.quality.pojo.QualityTestStandard; import com.ruoyi.quality.pojo.QualityTestStandardParam; 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 org.springframework.beans.factory.annotation.Autowired; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -43,44 +53,26 @@ import java.util.List; @Service //@RequiredArgsConstructor @RequiredArgsConstructor public class ApproveNodeServiceImpl extends ServiceImpl<ApproveNodeMapper, ApproveNode> implements IApproveNodeService { @Autowired private ApproveNodeMapper approveNodeMapper; @Autowired private ApproveProcessMapper approveProcessMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private TempFileServiceImpl tempFileService; @Autowired private ISysNoticeService sysNoticeService; @Autowired private CommonFileMapper fileMapper; @Autowired private DeviceRepairMapper deviceRepairMapper; @Autowired private PurchaseLedgerMapper purchaseLedgerMapper; @Autowired private SalesQuotationMapper salesQuotationMapper; @Autowired private ShippingInfoMapper shippingInfoMapper; @Autowired private CommonFileServiceImpl commonFileService; @Autowired private StockUtils stockUtils; @Autowired private SalesLedgerProductMapper salesLedgerProductMapper; @Autowired private PurchaseLedgerServiceImpl purchaseLedgerServiceImpl; private final ApproveNodeMapper approveNodeMapper; private final ApproveProcessMapper approveProcessMapper; private final SysUserMapper sysUserMapper; private final TempFileServiceImpl tempFileService; private final ISysNoticeService sysNoticeService; private final CommonFileMapper fileMapper; private final DeviceRepairMapper deviceRepairMapper; private final PurchaseLedgerMapper purchaseLedgerMapper; private final SalesQuotationMapper salesQuotationMapper; private final ShippingInfoMapper shippingInfoMapper; private final CommonFileServiceImpl commonFileService; private final StockUtils stockUtils; private final SalesLedgerProductMapper salesLedgerProductMapper; private final QualityInspectMapper qualityInspectMapper; private final QualityTestStandardMapper qualityTestStandardMapper; private final QualityTestStandardParamMapper qualityTestStandardParamMapper; private final QualityInspectParamMapper qualityInspectParamMapper; public ApproveProcess getApproveById(String id) { @@ -94,7 +86,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 +94,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 +124,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 +143,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,26 +158,14 @@ .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)){ // åæ deviceRepair.setStatus(1); }else if(approveProcess.getApproveStatus().equals(3)){ // æç» deviceRepair.setStatus(2); } deviceRepairMapper.updateById(deviceRepair); } //éè´å®¡æ ¸ if(approveProcess.getApproveType().equals(5)){ @@ -201,8 +181,7 @@ for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) { // è´¨æ£ if (salesLedgerProduct.getIsChecked()) { purchaseLedgerServiceImpl.addQualityInspect(purchaseLedger, salesLedgerProduct); }else { addQualityInspect(purchaseLedger, salesLedgerProduct); }else { //ç´æ¥å ¥åº stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId()); } @@ -329,4 +308,32 @@ return null; } private void addQualityInspect(PurchaseLedger purchaseLedger, SalesLedgerProduct saleProduct) { QualityInspect qualityInspect = new QualityInspect(); qualityInspect.setInspectType(0); qualityInspect.setSupplier(purchaseLedger.getSupplierName()); qualityInspect.setPurchaseLedgerId(purchaseLedger.getId()); qualityInspect.setProductId(saleProduct.getProductId()); qualityInspect.setProductName(saleProduct.getProductCategory()); qualityInspect.setModel(saleProduct.getSpecificationModel()); qualityInspect.setProductModelId(saleProduct.getProductModelId()); qualityInspect.setUnit(saleProduct.getUnit()); qualityInspect.setQuantity(saleProduct.getQuantity()); qualityInspectMapper.insert(qualityInspect); List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null); if (qualityTestStandard.size()>0){ qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId()); qualityInspectMapper.updateById(qualityInspect); qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery() .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandard.get(0).getId())) .forEach(qualityTestStandardParam -> { QualityInspectParam param = new QualityInspectParam(); com.ruoyi.common.utils.bean.BeanUtils.copyProperties(qualityTestStandardParam, param); param.setId(null); param.setInspectId(qualityInspect.getId()); qualityInspectParamMapper.insert(param); }); } } } src/main/java/com/ruoyi/approve/service/impl/ApproveProcessConfigNodeServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,50 @@ package com.ruoyi.approve.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.approve.bean.vo.ApproveProcessConfigNodeVo; import com.ruoyi.approve.mapper.ApproveProcessConfigNodeMapper; import com.ruoyi.approve.pojo.ApproveProcessConfigNode; import com.ruoyi.approve.service.ApproveProcessConfigNodeService; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.List; /** * <p> * å®¡æ¹æµç¨é ç½®èç¹è¡¨ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-23 10:21:41 */ @Service @RequiredArgsConstructor public class ApproveProcessConfigNodeServiceImpl extends ServiceImpl<ApproveProcessConfigNodeMapper, ApproveProcessConfigNode> implements ApproveProcessConfigNodeService { private final ApproveProcessConfigNodeMapper approveProcessConfigNodeMapper; @Override public List<ApproveProcessConfigNodeVo> listNode(Integer type) { List<ApproveProcessConfigNode> approveProcessConfigNodes = approveProcessConfigNodeMapper.selectList(new QueryWrapper<ApproveProcessConfigNode>().lambda().eq(ApproveProcessConfigNode::getApproveType, type).orderByAsc(ApproveProcessConfigNode::getNodeOrder)); return approveProcessConfigNodes.stream() .map(node -> { ApproveProcessConfigNodeVo vo = new ApproveProcessConfigNodeVo(); BeanUtils.copyProperties(node, vo); return vo; }) .collect(java.util.stream.Collectors.toList()); } @Override public Boolean addApproveProcessConfigNodes(List<ApproveProcessConfigNode> approveProcessConfigNodes) { //å 餿§æ°æ® approveProcessConfigNodeMapper.delete(new QueryWrapper<ApproveProcessConfigNode>().lambda().eq(ApproveProcessConfigNode::getApproveType, approveProcessConfigNodes.get(0).getApproveType())); //æ°å¢ æ°æ® for (ApproveProcessConfigNode node : approveProcessConfigNodes) { approveProcessConfigNodeMapper.insert(node); } return true; } } src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -6,15 +6,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.approve.bean.vo.ApproveGetAndUpdateVo; import com.ruoyi.approve.bean.vo.ApproveProcessConfigNodeVo; import com.ruoyi.approve.bean.vo.ApproveProcessVO; import com.ruoyi.approve.mapper.ApproveNodeMapper; import com.ruoyi.approve.mapper.ApproveProcessMapper; import com.ruoyi.approve.pojo.ApproveNode; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.ApproveProcessConfigNodeService; import com.ruoyi.approve.service.IApproveNodeService; import com.ruoyi.approve.service.IApproveProcessService; import com.ruoyi.approve.utils.DailyRedisCounter; 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; @@ -32,63 +33,46 @@ 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.*; import java.util.stream.Collectors; @Service //@RequiredArgsConstructor @RequiredArgsConstructor public class ApproveProcessServiceImpl extends ServiceImpl<ApproveProcessMapper, ApproveProcess> implements IApproveProcessService { private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd"); @Autowired private StringRedisTemplate redisTemplate; @Autowired private DailyRedisCounter dailyRedisCounter; @Autowired private SysDeptMapper sysDeptMapper; @Autowired private IApproveNodeService approveNodeService; @Autowired private SysUserMapper sysUserMapper; @Autowired private ApproveProcessMapper approveProcessMapper; @Autowired private TempFileServiceImpl tempFileService; @Autowired private CommonFileMapper commonFileMapper; @Autowired private CommonFileServiceImpl commonFileService; @Autowired private ISysNoticeService sysNoticeService; private final SysDeptMapper sysDeptMapper; private final IApproveNodeService approveNodeService; private final SysUserMapper sysUserMapper; private final ApproveProcessMapper approveProcessMapper; private final TempFileServiceImpl tempFileService; private final CommonFileMapper commonFileMapper; private final CommonFileServiceImpl commonFileService; private final ISysNoticeService sysNoticeService; private final PurchaseLedgerMapper purchaseLedgerMapper; private final ShippingInfoMapper shippingInfoMapper; private final ApproveNodeMapper approveNodeMapper; private final ApproveProcessConfigNodeService approveProcessConfigNodeService; @Override public void addApprove(ApproveProcessVO approveProcessVO) throws Exception { SysUser sysUser = sysUserMapper.selectUserById(approveProcessVO.getApproveUser()); SysDept sysDept = sysDeptMapper.selectDeptById(approveProcessVO.getApproveDeptId()); String[] split = approveProcessVO.getApproveUserIds().split(","); List<Long> longList = Arrays.stream(split) .map(Long::valueOf) // å°æ¯ä¸ª String 转æ¢ä¸º Long SysUser sysUser = SecurityUtils.getLoginUser().getUser(); SysDept sysDept = sysDeptMapper.selectDeptById(SecurityUtils.getLoginUser().getCurrentDeptId()); List<ApproveProcessConfigNodeVo> list = approveProcessConfigNodeService.listNode( approveProcessVO.getApproveType()); List<Long> nodeIds = list.stream() .map(ApproveProcessConfigNodeVo::getApproverId) .collect(Collectors.toList()); List<SysUser> sysUsers = sysUserMapper.selectUserByIds(longList); List<SysUser> sysUsers = sysUserMapper.selectUserByIds(nodeIds); if (CollectionUtils.isEmpty(sysUsers)) throw new RuntimeException("å®¡æ ¸ç¨æ·ä¸åå¨"); if (sysDept == null) throw new RuntimeException("é¨é¨ä¸åå¨"); if (sysUser == null) throw new RuntimeException("ç³è¯·äººä¸åå¨"); @@ -99,14 +83,15 @@ // String approveID = today + formattedCount; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); ApproveProcess approveProcess = new ApproveProcess(); String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "","approve_id"); String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "approve_id"); approveProcess.setApproveId(no); approveProcess.setApproveUser(approveProcessVO.getApproveUser()); approveProcess.setApproveUser(sysUser.getUserId()); approveProcess.setApproveUserName(sysUser.getNickName()); approveProcess.setApproveDeptId(approveProcessVO.getApproveDeptId()); approveProcess.setApproveDeptId(sysDept.getDeptId()); approveProcess.setApproveUserIds(nodeIds.stream().map(String::valueOf).collect(Collectors.joining(","))); approveProcess.setApproveDeptName(sysDept.getDeptName()); approveProcess.setApproveUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(","))); approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? null : dateFormat.parse(approveProcessVO.getApproveTime())); approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? new Date(): dateFormat.parse(approveProcessVO.getApproveTime())); approveProcess.setApproveReason(approveProcessVO.getApproveReason()); approveProcess.setDeviceRepairId(approveProcessVO.getDeviceRepairId()); approveProcess.setMaintenancePrice(approveProcessVO.getMaintenancePrice()); @@ -118,11 +103,10 @@ approveProcess.setApproveType(approveProcessVO.getApproveType()); approveProcess.setCreateTime(LocalDateTime.now()); approveProcess.setTenantId(approveProcessVO.getApproveDeptId()); approveProcess.setApproveUserIds(approveProcessVO.getApproveUserIds()); approveProcess.setApproveUserCurrentId(longList.get(0)); approveProcess.setApproveUserCurrentId(nodeIds.get(0)); approveProcess.setApproveUserCurrentName(sysUsers .stream() .filter(SysUser -> SysUser.getUserId().equals(longList.get(0))) .filter(SysUser -> SysUser.getUserId().equals(nodeIds.get(0))) .collect(Collectors.toList()) .get(0) .getNickName()); @@ -134,20 +118,23 @@ } save(approveProcess); //åå§å审æ¹èç¹ approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(), no, approveProcessVO.getApproveDeptId()); String nodeIdStr = nodeIds.stream() .map(String::valueOf) .collect(Collectors.joining(",")); approveNodeService.initApproveNodes(nodeIdStr, no, approveProcessVO.getApproveDeptId()); // éä»¶ç»å® tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue()); /*æ¶æ¯éç¥*/ String id = approveProcessVO.getApproveUserIds().split(",")[0]; Long id = nodeIds.get(0); if (approveProcess.getApproveType()==8){ sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveProcess.getApproveId() + "æµç¨ç¼å·ç审æ¹éè¦æ¨å®¡æ ¸!!!!!", Arrays.asList(Long.valueOf(id)), Collections.singletonList(id), "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId()); }else { sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveProcess.getApproveId() + "æµç¨ç¼å·ç审æ¹éè¦æ¨å®¡æ ¸!!!!!", Arrays.asList(Long.valueOf(id)), Collections.singletonList(id), "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId()); } } @@ -162,11 +149,6 @@ return sysDeptList; } @Autowired private PurchaseLedgerMapper purchaseLedgerMapper; @Autowired private ShippingInfoMapper shippingInfoMapper; @Override public IPage<ApproveProcess> listAll(Page page, ApproveProcess approveProcess) { @@ -305,8 +287,6 @@ return one; } @Autowired private ApproveNodeMapper approveNodeMapper; // æ¥ä»·å®¡æ¹ç¼è¾å®¡æ ¸äºº public void updateApproveUser(ApproveGetAndUpdateVo approveGetAndUpdateVo) { src/main/java/com/ruoyi/approve/utils/ApproveProcessConfigNodeUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,9 @@ package com.ruoyi.approve.utils; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class ApproveProcessConfigNodeUtils { } src/main/java/com/ruoyi/collaborativeApproval/service/impl/MeetingServiceImpl.java
@@ -3,7 +3,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java
@@ -20,7 +20,7 @@ /** * èªå®ä¹éåºå¤çç±» è¿åæå * * * @author ruoyi */ @Configuration @@ -31,7 +31,7 @@ /** * éåºå¤ç * * * @return */ @Override src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -13,7 +13,7 @@ import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl; import com.ruoyi.approve.vo.ApproveProcessVO; import com.ruoyi.approve.bean.vo.ApproveProcessVO; import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.mapper.SupplierManageMapper; @@ -171,15 +171,23 @@ @Override @Transactional(rollbackFor = Exception.class) public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception { PurchaseLedger purchaseLedger = new PurchaseLedger(); SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId()); //å½å ¥äºº SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId()); if (ObjectUtils.isNotEmpty(sysUser)) { purchaseLedger.setRecorderName(sysUser.getNickName()); purchaseLedger.setPhoneNumber(sysUser.getPhonenumber()); }else { purchaseLedger.setRecorderName(SecurityUtils.getLoginUser().getNickName()); SysUser sysUser1 = userMapper.selectUserById(SecurityUtils.getUserId()); purchaseLedger.setPhoneNumber(sysUser1.getPhonenumber()); } SupplierManage supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId()); // DTO转Entity PurchaseLedger purchaseLedger = new PurchaseLedger(); BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger); LoginUser loginUser = SecurityUtils.getLoginUser(); if (ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) { @@ -189,8 +197,7 @@ purchaseLedger.setSalesLedgerId(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getId() : -1); purchaseLedger.setSupplierName(supplierManage.getSupplierName()); purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId()); purchaseLedger.setRecorderName(sysUser.getNickName()); purchaseLedger.setPhoneNumber(sysUser.getPhonenumber()); purchaseLedger.setApprovalStatus(1); // 3. æ°å¢ææ´æ°ä¸»è¡¨ if (purchaseLedger.getId() == null) { src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -1,12 +1,9 @@ package com.ruoyi.sales.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.mapper.ApproveProcessMapper; import com.ruoyi.approve.bean.vo.ApproveProcessVO; import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl; 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.common.utils.poi.ExcelUtil; @@ -15,22 +12,14 @@ import com.ruoyi.framework.security.LoginUser; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.other.service.impl.TempFileServiceImpl; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.sales.dto.ShippingInfoDto; import com.ruoyi.sales.mapper.ShipmentApprovalMapper; import com.ruoyi.sales.mapper.ShippingInfoMapper; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.pojo.ShipmentApproval; import com.ruoyi.sales.pojo.ShippingInfo; import com.ruoyi.sales.service.ISalesLedgerProductService; import com.ruoyi.sales.service.ISalesLedgerService; import com.ruoyi.sales.service.ShippingInfoService; import com.ruoyi.sales.service.impl.CommonFileServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; src/main/java/com/ruoyi/sales/service/impl/SalesQuotationServiceImpl.java
@@ -9,8 +9,10 @@ import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.IApproveProcessService; import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl; import com.ruoyi.approve.vo.ApproveGetAndUpdateVo; import com.ruoyi.approve.vo.ApproveProcessVO; import com.ruoyi.approve.bean.vo.ApproveGetAndUpdateVo; import com.ruoyi.approve.bean.vo.ApproveProcessVO; import com.ruoyi.basic.dto.CustomerPrivatePoolDto; import com.ruoyi.basic.mapper.CustomerPrivatePoolMapper; import com.ruoyi.common.utils.OrderUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; src/main/resources/application-dev.yml
@@ -154,7 +154,7 @@ database: 0 # å¯ç # password: root2022! password: password: 123456 # è¿æ¥è¶ æ¶æ¶é´ timeout: 10s src/main/resources/mapper/approve/ApproveProcessConfigNodeMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.approve.mapper.ApproveProcessConfigNodeMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.ApproveProcessConfigNode"> <id column="id" property="id" /> <result column="node_order" property="nodeOrder" /> <result column="approver_type" property="approverType" /> <result column="is_required" property="isRequired" /> <result column="timeout_hours" property="timeoutHours" /> <result column="tenant_id" property="tenantId" /> <result column="create_user" property="createUser" /> <result column="create_time" property="createTime" /> <result column="update_user" property="updateUser" /> <result column="update_time" property="updateTime" /> <result column="delete_flag" property="deleteFlag" /> <result column="dept_id" property="deptId" /> </resultMap> </mapper>