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,4 +1,4 @@ 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; 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/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/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/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; @@ -24,14 +23,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 +52,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) { @@ -175,18 +166,6 @@ } 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)){ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>() @@ -201,7 +180,7 @@ for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) { // è´¨æ£ if (salesLedgerProduct.getIsChecked()) { purchaseLedgerServiceImpl.addQualityInspect(purchaseLedger, salesLedgerProduct); 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,48 @@ 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())); //æ°å¢ æ°æ® approveProcessConfigNodes.forEach(approveProcessConfigNodeMapper::insert); 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("ç³è¯·äººä¸åå¨"); @@ -101,12 +85,13 @@ ApproveProcess approveProcess = new ApproveProcess(); 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()); } } @@ -161,12 +148,6 @@ } return sysDeptList; } @Autowired private PurchaseLedgerMapper purchaseLedgerMapper; @Autowired private ShippingInfoMapper shippingInfoMapper; @Override public IPage<ApproveProcess> listAll(Page page, ApproveProcess approveProcess) { @@ -305,8 +286,6 @@ return one; } @Autowired private ApproveNodeMapper approveNodeMapper; // æ¥ä»·å®¡æ¹ç¼è¾å®¡æ ¸äºº public void updateApproveUser(ApproveGetAndUpdateVo approveGetAndUpdateVo) { @@ -315,7 +294,7 @@ .eq(ApproveProcess::getApproveReason, approveGetAndUpdateVo.getApproveReason()) .last("limit 1"); ApproveProcess approveProcess = approveProcessMapper.selectOne(approveProcessLambdaQueryWrapper); if (approveProcess == null) throw new RuntimeException("è¯·éæ©å®¡æ¹äºº"); if (approveProcess == null) throw new RuntimeException("â"); String[] split = approveGetAndUpdateVo.getApproveUserIds().split(","); if (split.length == 0) { throw new RuntimeException("è¯·éæ©å®¡æ¹äºº"); 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
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
@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.CustomerMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Customer; src/main/resources/application-dev.yml
@@ -74,9 +74,9 @@ druid: # ä¸»åºæ°æ®æº master: url: jdbc:mysql://localhost:3306/product-inventory-management-new?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://localhost:3300/product-inventory-management-jghg?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 123456 password: root # ä»åºæ°æ®æº slave: # 仿°æ®æºå¼å ³/é»è®¤å ³é @@ -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> src/main/resources/mapper/basic/CustomerPrivatePoolMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,101 @@ <?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.basic.mapper.CustomerPrivatePoolMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.CustomerPrivatePool"> <id column="id" property="id" /> <result column="customer_id" property="customerId" /> <result column="bound_id" property="boundId" /> <result column="create_user" property="createUser" /> <result column="update_user" property="updateUser" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> </resultMap> <select id="listPage" resultType="com.ruoyi.basic.dto.CustomerPrivatePoolDto"> select cpp.id, cpp.bound_id, cpp.type, coalesce(c.id, cp.id) as customer_id, coalesce(c.customer_name, cp.customer_name) as customer_name, coalesce(c.customer_type, cp.customer_type) as customer_type, coalesce(c.taxpayer_identification_number, cp.taxpayer_identification_number) as taxpayer_identification_number, coalesce(c.company_address, cp.company_address) as company_address, coalesce(c.company_phone, cp.company_phone) as company_phone, coalesce(c.contact_person, cp.contact_person) as contact_person, coalesce(c.contact_phone, cp.contact_phone) as contact_phone, coalesce(c.maintainer, cp.maintainer) as maintainer, coalesce(c.maintenance_time, cp.maintenance_time) as maintenance_time, coalesce(c.tenant_id, cp.tenant_id) as tenant_id, coalesce(c.basic_bank_account, cp.basic_bank_account) as basic_bank_account, coalesce(c.bank_account, cp.bank_account) as bank_account, coalesce(c.bank_code, cp.bank_code) as bank_code from customer_private_pool cpp left join customer c on c.id = cpp.customer_id and cpp.type = 1 left join customer_private cp on cp.id = cpp.customer_id and cpp.type = 0 <where> cpp.delete_flag = 0 <if test="c.customerName != null and c.customerName != ''"> and (c.customer_name like concat('%', #{c.customerName}, '%') or cp.customer_name like concat('%', #{c.customerName}, '%')) </if> <if test="c.customerType != null"> and c.customer_type = #{c.customerType} </if> <if test="c.bound_id != null"> and cpp.bound_id = #{c.boundId} </if> </where> order by cpp.id desc </select> <select id="selectInfo" resultType="com.ruoyi.basic.dto.CustomerPrivatePoolDto"> select cpp.id, cpp.bound_id, cpp.type, coalesce(c.id, cp.id) as customer_id, coalesce(c.customer_name, cp.customer_name) as customer_name, coalesce(c.customer_type, cp.customer_type) as customer_type, coalesce(c.taxpayer_identification_number, cp.taxpayer_identification_number) as taxpayer_identification_number, coalesce(c.company_address, cp.company_address) as company_address, coalesce(c.company_phone, cp.company_phone) as company_phone, coalesce(c.contact_person, cp.contact_person) as contact_person, coalesce(c.contact_phone, cp.contact_phone) as contact_phone, coalesce(c.maintainer, cp.maintainer) as maintainer, coalesce(c.maintenance_time, cp.maintenance_time) as maintenance_time, coalesce(c.tenant_id, cp.tenant_id) as tenant_id, coalesce(c.basic_bank_account, cp.basic_bank_account) as basic_bank_account, coalesce(c.bank_account, cp.bank_account) as bank_account, coalesce(c.bank_code, cp.bank_code) as bank_code from customer_private_pool cpp left join customer c on c.id = cpp.customer_id and cpp.type = 1 left join customer_private cp on cp.id = cpp.customer_id and cpp.type = 0 <where> <if test="id != null"> and cpp.id = #{id} </if> </where> </select> <select id="selectInfos" resultType="com.ruoyi.basic.dto.CustomerPrivatePoolDto"> select cpp.id, cpp.bound_id, cpp.type, coalesce(c.id, cp.id) as customer_id, coalesce(c.customer_name, cp.customer_name) as customer_name, coalesce(c.customer_type, cp.customer_type) as customer_type, coalesce(c.taxpayer_identification_number, cp.taxpayer_identification_number) as taxpayer_identification_number, coalesce(c.company_address, cp.company_address) as company_address, coalesce(c.company_phone, cp.company_phone) as company_phone, coalesce(c.contact_person, cp.contact_person) as contact_person, coalesce(c.contact_phone, cp.contact_phone) as contact_phone, coalesce(c.maintainer, cp.maintainer) as maintainer, coalesce(c.maintenance_time, cp.maintenance_time) as maintenance_time, coalesce(c.tenant_id, cp.tenant_id) as tenant_id, coalesce(c.basic_bank_account, cp.basic_bank_account) as basic_bank_account, coalesce(c.bank_account, cp.bank_account) as bank_account, coalesce(c.bank_code, cp.bank_code) as bank_code from customer_private_pool cpp left join customer c on c.id = cpp.customer_id and cpp.type = 1 left join customer_private cp on cp.id = cpp.customer_id and cpp.type = 0 </select> </mapper> src/main/resources/mapper/sales/SalesLedgerMapper.xml