liyong
7 天以前 408bab8b1c0c10514b8395cff92e47751e4dcdcd
Merge remote-tracking branch 'origin/dev_New' into dev_New
已添加8个文件
已重命名1个文件
已修改13个文件
537 ■■■■■ 文件已修改
doc/20260306_create_purchase_return_orders.sql 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/service/CustomerFollowUpFileService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/controller/PlanController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/mapper/PlanNodeMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/pojo/Plan.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/pojo/PlanNode.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/service/PlanService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/vo/PlanNodeVo.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/vo/PlanVo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/vo/SavePlanNodeVo.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/projectManagement/vo/SavePlanVo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/controller/PurchaseReturnOrdersController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/mapper/PurchaseReturnOrdersMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/pojo/PurchaseReturnOrders.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/PurchaseReturnOrdersService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/PurchaseReturnOrdersServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/vo/PurchaseReturnOrderVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/projectManagement/PlanMapper.xml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/projectManagement/PlanNodeMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/20260306_create_purchase_return_orders.sql
ÎļþÃû´Ó doc/20260306_craete_purchase_return_orders.sql ÐÞ¸Ä
@@ -12,9 +12,13 @@
    prepared_user_id   bigint  not null default 0 comment '制单人id',
    return_user_id     bigint  not null default 0 comment '退料人id',
    purchase_ledger_id bigint  not null default 0 comment '采购订单id',
    total_discount_amount decimal(10, 2) null comment '整单折扣额',
    total_discount_rate   decimal(10, 2) null comment '整单折扣率',
    total_amount decimal(10,2) null comment '成交金额',
    remark             text null comment '备注',
    create_time        datetime null comment '录入时间',
    update_time        datetime null comment '更新时间',
    index              idx_supplier_id (supplier_id),
    index              idx_purchase_ledger_id (purchase_ledger_id),
    index              idx_project_id (project_id)
);
src/main/java/com/ruoyi/basic/service/CustomerFollowUpFileService.java
@@ -4,6 +4,7 @@
import com.ruoyi.basic.pojo.CustomerFollowUpFile;
import com.ruoyi.common.vo.SimpleFileVo;
import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.util.List;
@@ -29,7 +30,7 @@
     * @param <T>
     */
    <T> void fillAttachment(
           @Null List<T> list,
           @Nullable List<T> list,
           @NotNull Function<T, String> getAttachmentIds,
           @NotNull BiConsumer<T, List<SimpleFileVo>> setAttachmentList
    );
src/main/java/com/ruoyi/projectManagement/controller/PlanController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.ruoyi.projectManagement.controller;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.projectManagement.service.PlanService;
import com.ruoyi.projectManagement.vo.SavePlanNodeVo;
import com.ruoyi.projectManagement.vo.SavePlanVo;
import com.ruoyi.projectManagement.vo.SearchPlanVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
 * @author buhuazhen
 * @date 2026/3/7
 * @email 3038525872@qq.com
 */
@RestController
@RequestMapping("/projectManagement/plan")
@Api(value = "PlanController", tags = "项目管理计划表(项目管理类型)")
@RequiredArgsConstructor
public class PlanController {
    private final PlanService planService;
    @PostMapping("/save")
    @ApiOperation("保存")
    public AjaxResult save(@RequestBody @Valid SavePlanVo savePlanVo) {
        planService.savePlan(savePlanVo);
        return AjaxResult.success();
    }
    @PostMapping("/delete/{id}")
    @ApiOperation("删除")
    public AjaxResult delete(@PathVariable Long id) {
        planService.deletePlan(id);
        return AjaxResult.success();
    }
    @PostMapping("/listPage")
    @ApiOperation("分页列表")
    public AjaxResult listPage(@RequestBody SearchPlanVo searchPlanVo) {
        return AjaxResult.success(planService.searchPlan(searchPlanVo));
    }
}
src/main/java/com/ruoyi/projectManagement/mapper/PlanNodeMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.projectManagement.mapper;
import com.ruoyi.projectManagement.pojo.PlanNode;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author buhuazhen
* @description é’ˆå¯¹è¡¨ã€project_management_plan_node(计划节点)】的数据库操作Mapper
* @createDate 2026-03-06 17:05:38
* @Entity generator.domain.ProjectManagementPlanNode
*/
public interface PlanNodeMapper extends BaseMapper<PlanNode> {
}
src/main/java/com/ruoyi/projectManagement/pojo/Plan.java
@@ -36,9 +36,9 @@
    /**
     * è®¡åˆ’描述
     */
    @TableField(value = "describe")
    @TableField(value = "description")
    @ApiModelProperty(value="计划描述")
    private String describe;
    private String description;
    /**
     * é™„ä»¶ ,进行分割
@@ -73,12 +73,12 @@
     */
    @TableField(value = "create_user",fill = FieldFill.INSERT)
    @ApiModelProperty(value="创建人")
    private String createUser;
    private Integer createUser;
    /**
     * 
     */
    @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value="更新人")
    private String updateUser;
    private Integer updateUser;
}
src/main/java/com/ruoyi/projectManagement/pojo/PlanNode.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
package com.ruoyi.projectManagement.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
/**
 * è®¡åˆ’节点
 * @TableName project_management_plan_node
 */
@TableName(value ="project_management_plan_node")
@Data
public class PlanNode implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    @TableField(value = "id")
    private Long id;
    /**
     * å¯¹åº”id
     */
    @TableField(value = "project_management_plan_id")
    private Long projectManagementPlanId;
    /**
     * æŽ’序
     */
    @TableField(value = "sort")
    private Integer sort;
    /**
     * é˜¶æ®µåç§°
     */
    @TableField(value = "name")
    private String name;
    /**
     * è´Ÿè´£ä»»ID
     */
    @TableField(value = "leader_id")
    private Long leaderId;
    /**
     * è´Ÿè´£ä»»åç§°
     */
    @TableField(value = "leader_name")
    private String leaderName;
    /**
     * é¢„计工期(天)
     */
    @TableField(value = "estimated_duration")
    private Integer estimatedDuration;
    /**
     * å·¥ä»·
     */
    @TableField(value = "hourly_rate")
    private String hourlyRate;
    /**
     * ä½œä¸šå†…容
     */
    @TableField(value = "work_content")
    private String workContent;
    /**
     *
     */
    @TableField(value = "is_delete")
    private Integer isDelete;
    /**
     *
     */
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     *
     */
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    /**
     *
     */
    @TableField(value = "create_user",fill = FieldFill.INSERT)
    private Integer createUser;
    /**
     *
     */
    @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/ruoyi/projectManagement/service/PlanService.java
@@ -4,10 +4,13 @@
import com.ruoyi.projectManagement.pojo.Plan;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.projectManagement.vo.PlanVo;
import com.ruoyi.projectManagement.vo.SavePlanNodeVo;
import com.ruoyi.projectManagement.vo.SavePlanVo;
import com.ruoyi.projectManagement.vo.SearchPlanVo;
import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.util.List;
/**
@@ -24,11 +27,19 @@
    void savePlan(@NotNull SavePlanVo savePlanVo);
    /**
     * ä¿å­˜è®¡åˆ’节点
     * @param planId
     * @param savePlanNodeVos
     */
    void savePlanNode(@NotNull Long planId,@Nullable List<SavePlanNodeVo> savePlanNodeVos);
    /**
     * åˆ é™¤é¡¹ç›®ç®¡ç†è®¡åˆ’
     * @param id
     */
    void deletePlan(@NotNull Long id);
    void deletePlanNode(@Nullable List<Long> ids);
    IPage<PlanVo> searchPlan(@NotNull SearchPlanVo searchPlanVo);
}
src/main/java/com/ruoyi/projectManagement/service/impl/PlanServiceImpl.java
@@ -1,21 +1,32 @@
package com.ruoyi.projectManagement.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
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.ruoyi.basic.service.CustomerFollowUpFileService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.projectManagement.mapper.PlanMapper;
import com.ruoyi.projectManagement.mapper.PlanNodeMapper;
import com.ruoyi.projectManagement.pojo.Plan;
import com.ruoyi.projectManagement.pojo.PlanNode;
import com.ruoyi.projectManagement.service.PlanService;
import com.ruoyi.projectManagement.vo.PlanVo;
import com.ruoyi.projectManagement.vo.SavePlanVo;
import com.ruoyi.projectManagement.vo.SearchPlanVo;
import com.ruoyi.projectManagement.vo.*;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
 * @author buhuazhen
@@ -31,6 +42,12 @@
    private final CustomerFollowUpFileService customerFollowUpFileService;
    private final PlanNodeMapper planNodeMapper;
    @Lazy
    @Autowired
    private PlanService planService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void savePlan(SavePlanVo savePlanVo) {
@@ -38,18 +55,55 @@
        // é™„件处理 , æ‹¼æŽ¥
        String attachments = String.join(",", Optional.ofNullable(savePlanVo.getAttachmentIds()).orElse(Collections.emptyList()));
        plan.setAttachment(attachments);
        if (savePlanVo.getId() == null) {
            planMapper.insert(plan);
        } else {
            planMapper.updateById(plan);
        }
        // todo@ èŠ‚ç‚¹ä¿å­˜
        planService.savePlanNode(plan.getId(), savePlanVo.getSavePlanNodeList());
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void savePlanNode(Long planId, @Nullable List<SavePlanNodeVo> savePlanNodeVos) {
        Assert.notNull(planId, () -> new ServiceException("计划ID不能为空"));
        if (CollUtil.isEmpty(savePlanNodeVos)) {
            return;
        }
        // åˆ é™¤å¤šä½™èŠ‚ç‚¹
        List<PlanNode> needDeleteNode = planNodeMapper.selectList(new LambdaQueryWrapper<PlanNode>()
                .select(PlanNode::getId)
                .eq(PlanNode::getProjectManagementPlanId, planId)
                .ne(PlanNode::getId, savePlanNodeVos.get(0).getId())
                .notIn(PlanNode::getId, savePlanNodeVos.stream().map(SavePlanNodeVo::getId).collect(Collectors.toList())));
        deletePlanNode(needDeleteNode.stream().map(PlanNode::getId).collect(Collectors.toList()));
        List<PlanNode> planNodes = BeanUtil.copyToList(savePlanNodeVos, PlanNode.class);
        // è®¾ç½®æŽ’序索引
        IntStream.range(0, savePlanNodeVos.size()).forEach(i -> {
            planNodes.get(i).setSort(i);
            planNodes.get(i).setProjectManagementPlanId(planId);
            if (planNodes.get(i).getId() == null) {
                planNodeMapper.insert(planNodes.get(i));
            } else {
                planNodeMapper.updateById(planNodes.get(i));
            }
        });
    }
    private List<PlanNode> getPlanNodeByPlanId(Long planId) {
        return planNodeMapper.selectList(new LambdaQueryWrapper<PlanNode>()
                .eq(PlanNode::getIsDelete, 0)
                .eq(PlanNode::getProjectManagementPlanId, planId));
    }
    private List<PlanNode> getPlanNodeByPlanIds(List<Long> planIds) {
        return planNodeMapper.selectList(new LambdaQueryWrapper<PlanNode>()
                .eq(PlanNode::getIsDelete, 0)
                .in(PlanNode::getProjectManagementPlanId, planIds));
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -58,9 +112,18 @@
                new LambdaUpdateWrapper<Plan>()
                        .eq(Plan::getId, id)
                        .set(Plan::getIsDelete, 1));
        // todo@ å¯¹åº”节点全部删除
        planService.deletePlanNode(getPlanNodeByPlanId(id).stream().map(PlanNode::getId).collect(Collectors.toList()));
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deletePlanNode(List<Long> ids) {
        if (CollUtil.isNotEmpty(ids)) {
            planNodeMapper.update(null,
                    new LambdaUpdateWrapper<PlanNode>()
                            .in(PlanNode::getId, ids)
                            .set(PlanNode::getIsDelete, 1));
        }
    }
    @Override
@@ -69,8 +132,11 @@
        IPage<PlanVo> resultPage = planIPage.convert(plan -> BeanUtil.copyProperties(plan, PlanVo.class));
        // æ–‡ä»¶èŽ·å–
        customerFollowUpFileService.fillAttachment(resultPage.getRecords(), PlanVo::getAttachment, PlanVo::setAttachmentList);
        // todo@ node èŠ‚ç‚¹èŽ·å–
        Map<Long, List<PlanNodeVo>> collect = getPlanNodeByPlanIds(resultPage.getRecords().stream().map(PlanVo::getId).collect(Collectors.toList()))
                .stream()
                .map(it -> BeanUtil.copyProperties(it, PlanNodeVo.class))
                .collect(Collectors.groupingBy(PlanNodeVo::getProjectManagementPlanId, Collectors.toList()));
        resultPage.getRecords().forEach(planVo -> planVo.setPlanNodeList(collect.getOrDefault(planVo.getId(), Collections.emptyList())));
        return resultPage;
    }
src/main/java/com/ruoyi/projectManagement/vo/PlanNodeVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.projectManagement.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * @author buhuazhen
 * @date 2026/3/7
 * @email 3038525872@qq.com
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PlanNodeVo implements Serializable {
    private Long id;
    private Long projectManagementPlanId;
    private Integer sort;
    private String name;
    private Long leaderId;
    private String leaderName;
    private Integer estimatedDuration;
    private String hourlyRate;
    private String workContent;
}
src/main/java/com/ruoyi/projectManagement/vo/PlanVo.java
@@ -1,10 +1,12 @@
package com.ruoyi.projectManagement.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ruoyi.common.vo.SimpleFileVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
@@ -25,7 +27,7 @@
    private String name;
    private String describe;
    private String description;
    // é™„ä»¶
    private List<SimpleFileVo> attachmentList;
@@ -33,8 +35,14 @@
    @JsonIgnore
    private String attachment;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    private List<PlanNodeVo> planNodeList;
}
src/main/java/com/ruoyi/projectManagement/vo/SavePlanNodeVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.ruoyi.projectManagement.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
 * @author buhuazhen
 * @date 2026/3/7
 * @email 3038525872@qq.com
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SavePlanNodeVo implements Serializable {
    private Long id;
    private Long projectManagementPlanId;
    private Integer sort;
    @NotBlank
    private String name;
    @NotNull
    private Long leaderId;
    @NotBlank
    private String leaderName;
    private Integer estimatedDuration;
    private String hourlyRate;
    private String workContent;
}
src/main/java/com/ruoyi/projectManagement/vo/SavePlanVo.java
@@ -4,6 +4,7 @@
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
@@ -22,10 +23,11 @@
    @NotBlank
    private String name;
    @NotBlank
    private String describe;
    private String description;
    private List<String> attachmentIds;
    @Valid
    private List<SavePlanNodeVo> savePlanNodeList;
}
src/main/java/com/ruoyi/purchase/controller/PurchaseReturnOrdersController.java
@@ -1,7 +1,16 @@
package com.ruoyi.purchase.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.OrderUtils;
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.projectManagement.mapper.RolesMapper;
import com.ruoyi.purchase.dto.PurchaseReturnOrderDto;
import com.ruoyi.purchase.mapper.PurchaseReturnOrdersMapper;
import com.ruoyi.purchase.service.PurchaseReturnOrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * <p>
@@ -14,5 +23,25 @@
@RestController
@RequestMapping("/purchaseReturnOrders")
public class PurchaseReturnOrdersController {
    @Autowired
    private PurchaseReturnOrdersService purchaseReturnOrdersService;
    @Autowired
    private PurchaseReturnOrdersMapper purchaseReturnOrdersMapper;
    @GetMapping("/listPage")
    public AjaxResult listPage(Page page, PurchaseReturnOrderDto purchaseReturnOrderDto) {
        return AjaxResult.success(purchaseReturnOrdersService.listPage(page, purchaseReturnOrderDto));
    }
    // æ–°å¢ž
    @Log(title = "采购退货单", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    public AjaxResult add(@RequestBody PurchaseReturnOrderDto purchaseReturnOrderDto) throws Exception {
        if (purchaseReturnOrderDto.getIsDefaultNo()) {
            purchaseReturnOrderDto.setNo(OrderUtils.countTodayByCreateTime(purchaseReturnOrdersMapper, "CGTL"));
        }
        return AjaxResult.success(purchaseReturnOrdersService.save(purchaseReturnOrderDto));
    }
}
src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.ruoyi.purchase.dto;
import com.ruoyi.purchase.pojo.PurchaseReturnOrders;
import lombok.Data;
@Data
public class PurchaseReturnOrderDto extends PurchaseReturnOrders {
    // æ˜¯å¦ä½¿ç”¨ç³»ç»Ÿå•号
    private Boolean isDefaultNo;
}
src/main/java/com/ruoyi/purchase/mapper/PurchaseReturnOrdersMapper.java
@@ -1,8 +1,12 @@
package com.ruoyi.purchase.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.purchase.pojo.PurchaseReturnOrders;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.purchase.vo.PurchaseReturnOrderVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
@@ -14,5 +18,5 @@
 */
@Mapper
public interface PurchaseReturnOrdersMapper extends BaseMapper<PurchaseReturnOrders> {
    IPage<PurchaseReturnOrderVo> listPage(Page page, @Param("params") PurchaseReturnOrders purchaseReturnOrder);
}
src/main/java/com/ruoyi/purchase/pojo/PurchaseReturnOrders.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -61,6 +62,15 @@
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("'整单折扣额'")
    private BigDecimal totalDiscountAmount;
    @ApiModelProperty("'整单折扣率'")
    private BigDecimal totalDiscountRate;
    @ApiModelProperty("'成交金额'")
    private BigDecimal totalAmount;
    @ApiModelProperty("录入时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
src/main/java/com/ruoyi/purchase/service/PurchaseReturnOrdersService.java
@@ -1,7 +1,11 @@
package com.ruoyi.purchase.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.purchase.dto.PurchaseReturnOrderDto;
import com.ruoyi.purchase.pojo.PurchaseReturnOrders;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.purchase.vo.PurchaseReturnOrderVo;
/**
 * <p>
@@ -12,5 +16,5 @@
 * @since 2026-03-06 11:44:38
 */
public interface PurchaseReturnOrdersService extends IService<PurchaseReturnOrders> {
    IPage<PurchaseReturnOrderVo> listPage(Page page, PurchaseReturnOrderDto purchaseReturnOrderDto);
}
src/main/java/com/ruoyi/purchase/service/impl/PurchaseReturnOrdersServiceImpl.java
@@ -1,9 +1,14 @@
package com.ruoyi.purchase.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.purchase.dto.PurchaseReturnOrderDto;
import com.ruoyi.purchase.pojo.PurchaseReturnOrders;
import com.ruoyi.purchase.mapper.PurchaseReturnOrdersMapper;
import com.ruoyi.purchase.service.PurchaseReturnOrdersService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.purchase.vo.PurchaseReturnOrderVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
@@ -16,5 +21,11 @@
 */
@Service
public class PurchaseReturnOrdersServiceImpl extends ServiceImpl<PurchaseReturnOrdersMapper, PurchaseReturnOrders> implements PurchaseReturnOrdersService {
    @Autowired
    private PurchaseReturnOrdersMapper purchaseReturnOrdersMapper;
    @Override
    public IPage<PurchaseReturnOrderVo> listPage(Page page, PurchaseReturnOrderDto purchaseReturnOrderDto) {
        return purchaseReturnOrdersMapper.listPage(page, purchaseReturnOrderDto);
    }
}
src/main/java/com/ruoyi/purchase/vo/PurchaseReturnOrderVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.purchase.vo;
import com.ruoyi.purchase.pojo.PurchaseReturnOrders;
public class PurchaseReturnOrderVo extends PurchaseReturnOrders {
    //供应商名称
    private String supplierName;
    // é‡‡è´­åˆåŒå·
    private String purchaseContractNumber;
    //退料人姓名
    private String returnUserName;
     //制单人姓名
    private String createUserName;
}
src/main/resources/mapper/projectManagement/PlanMapper.xml
@@ -7,17 +7,17 @@
    <resultMap id="BaseResultMap" type="com.ruoyi.projectManagement.pojo.Plan">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="describe" column="describe" jdbcType="VARCHAR"/>
            <result property="description" column="description" jdbcType="VARCHAR"/>
            <result property="attachment" column="attachment" jdbcType="VARCHAR"/>
            <result property="is_delete" column="is_delete" jdbcType="INTEGER"/>
            <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="update_time" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="create_user" column="create_user" jdbcType="VARCHAR"/>
            <result property="update_user" column="update_user" jdbcType="VARCHAR"/>
            <result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="createUser" column="create_user" jdbcType="VARCHAR"/>
            <result property="updateUser" column="update_user" jdbcType="VARCHAR"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,name,describe,
        id,name,description,
        attachment,is_delete,create_time,
        update_time,create_user,update_user
    </sql>
@@ -25,6 +25,7 @@
    <select id="selectPlanPage" resultMap="BaseResultMap">
        select t1.*
        from project_management_plan as t1
            where t1.is_delete = 0
        order by t1.create_time desc
    </select>
</mapper>
src/main/resources/mapper/projectManagement/PlanNodeMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
<?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.projectManagement.mapper.PlanNodeMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.projectManagement.pojo.PlanNode">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="projectManagementPlanId" column="project_management_plan_id" jdbcType="BIGINT"/>
            <result property="sort" column="sort" jdbcType="INTEGER"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="leaderId" column="leader_id" jdbcType="BIGINT"/>
            <result property="leaderName" column="leader_name" jdbcType="VARCHAR"/>
            <result property="estimatedDuration" column="estimated_duration" jdbcType="INTEGER"/>
            <result property="hourlyRate" column="hourly_rate" jdbcType="VARCHAR"/>
            <result property="workContent" column="work_content" jdbcType="VARCHAR"/>
            <result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="createUser" column="create_user" jdbcType="VARCHAR"/>
            <result property="updateUser" column="update_user" jdbcType="VARCHAR"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,project_management_plan_id,sort,
        name,leader_id,leader_name,
        estimated_duration,hourly_rate,work_content,
        is_delete,create_time,update_time,
        create_user,update_user
    </sql>
</mapper>
src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
@@ -19,4 +19,21 @@
        <result column="update_time" property="updateTime" />
    </resultMap>
    <select id="listPage" resultType="com.ruoyi.purchase.vo.PurchaseReturnOrderVo">
        SELECT
        pro.*,
        sm.supplier_name as supplierName,
        pl.purchase_contract_number as purchaseContractNumber,
        su.user_name as returnUserName,
        su1.user_name as createUserName
        FROM purchase_return_orders pro
        LEFT JOIN supplier_manage sm ON pro.supplier_id = sm.id
        LEFT JOIN purchase_ledger pl ON pl.id = pro.purchase_ledger_id
        LEFT JOIN sys_user su ON su.user_id = pro.return_user_id
        LEFT JOIN sys_user su1 ON su1.user_id = pro.prepared_user_id
        where 1=1
        <if test="params.no != null and params.no != '' ">
            AND pro.no LIKE CONCAT('%',#{params.no},'%')
        </if>
    </select>
</mapper>