xiangpei
2024-11-26 9a1eb07f890b6a69812c6c1d62a305b06b18fb73
Merge remote-tracking branch 'origin/master'
12个文件已修改
3个文件已添加
342 ■■■■■ 已修改文件
business/src/main/java/com/ycl/controller/FlowableTypeController.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/controller/ProjectPlanInfoController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/entity/FlowableType.java 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoRequest.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoResponseVO.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/mapper/FlowableTypeMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/mapper/ProjectPlanInfoMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/FlowableTypeService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/ProjectPlanInfoService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/FlowableTypeServiceImpl.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/resources/mapper/FlowableTypeMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/resources/mapper/ProjectPlanInfoMapper.xml 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/controller/FlowableTypeController.java
@@ -3,6 +3,10 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ycl.common.base.Result;
import com.ycl.common.constant.UserConstants;
import com.ycl.common.core.controller.BaseController;
import com.ycl.common.core.domain.AjaxResult;
import com.ycl.common.core.domain.entity.SysMenu;
import com.ycl.common.group.Add;
import com.ycl.common.group.Update;
import com.ycl.domain.entity.FlowableType;
@@ -21,6 +25,7 @@
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import java.util.Date;
import java.util.List;
/**
@@ -31,7 +36,7 @@
@Api(value = "工作流分类", tags = "工作流分类管理")
@RestController
@RequestMapping("/flowable_type")
public class FlowableTypeController {
public class FlowableTypeController extends BaseController {
    private final FlowableTypeService flowableTypeService;
@@ -39,6 +44,10 @@
    @ApiOperation(value = "添加", notes = "添加")
//    @PreAuthorize("hasAuthority('flowableType:add')")
    public Result add(@RequestBody @Validated(Add.class) FlowableType form) {
        form.setCreateBy(getUsername());
        form.setCreateTime(new Date());
        form.setUpdateBy(getUsername());
        form.setUpdateTime(new Date());
        flowableTypeService.save(form);
        return Result.ok();
    }
@@ -60,13 +69,15 @@
    }
    @GetMapping("/page")
    @ApiOperation(value = "分页", notes = "分页")
    @GetMapping("/list")
//    @PreAuthorize("hasAuthority('flowableType:page')")
    public Result page(AbsQuery query) {
        IPage<FlowableType> page = PageUtil.getPage(query, FlowableType.class);
        flowableTypeService.page(page);
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    public Result list(FlowableType flowableType) {
        List<FlowableType> list = flowableTypeService.selectTypeList(flowableType);
        return Result.ok().data(list);
    }
    @GetMapping("/tree_select")
    public AjaxResult treeSelect(FlowableType flowableType) {
        List<FlowableType> list = flowableTypeService.selectTypeList(flowableType);
        return success(flowableTypeService.buildTreeSelect(list));
    }
}
business/src/main/java/com/ycl/controller/ProjectPlanInfoController.java
@@ -4,8 +4,10 @@
import com.ycl.common.base.Result;
import com.ycl.common.group.Add;
import com.ycl.common.group.Update;
import com.ycl.domain.entity.ProjectPlanInfo;
import com.ycl.domain.form.ProjectPlanInfoForm;
import com.ycl.domain.query.ProjectPlanInfoQuery;
import com.ycl.domain.vo.ProjectPlanInfoRequest;
import com.ycl.service.ProjectPlanInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -34,7 +36,7 @@
    @PostMapping
    @ApiOperation(value = "添加", notes = "添加")
    @PreAuthorize("hasAuthority('projectPlanInfo:add')")
//    @PreAuthorize("hasAuthority('projectPlanInfo:add')")
    public Result add(@RequestBody @Validated(Add.class) ProjectPlanInfoForm form) {
        return projectPlanInfoService.add(form);
    }
@@ -69,7 +71,7 @@
    @GetMapping("/{id}")
    @ApiOperation(value = "详情", notes = "详情")
    @PreAuthorize("hasAuthority('projectPlanInfo:detail')")
//    @PreAuthorize("hasAuthority('projectPlanInfo:detail')")
    public Result detail(@PathVariable("id") Integer id) {
        return projectPlanInfoService.detail(id);
    }
@@ -80,4 +82,15 @@
    public Result list() {
        return projectPlanInfoService.all();
    }
    @PostMapping("/addPlanInfo")
    public Result addPlanInfo(@RequestBody ProjectPlanInfoRequest request) {
        return projectPlanInfoService.addPlanInfo(request);
    }
    @PostMapping("/savePlanInfo")
    public Result savePlanInfo(@RequestBody ProjectPlanInfo item) {
        return projectPlanInfoService.savePlanInfo(item);
    }
}
business/src/main/java/com/ycl/domain/entity/FlowableType.java
@@ -1,21 +1,28 @@
package com.ycl.domain.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ycl.common.core.domain.BaseEntity;
import com.ycl.common.core.domain.entity.SysMenu;
import com.ycl.system.domain.base.AbsEntity;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 流程分类
 */
@Data
@TableName("t_flowable_type")
public class FlowableType extends AbsEntity {
public class FlowableType implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Integer id;
    @TableField(value = "name")
    private String name;
@@ -23,17 +30,43 @@
    @TableField(value = "parent_id")
    private Integer parentId;
    @TableField(value = "level")
    private Integer level;
    @TableField(value = "order_num")
    private Integer orderNum;
    @TableField(value = "leaf")
    private Boolean leaf;
//    @TableField(value = "level")
//    private Integer level;
//
//    @TableField(value = "leaf")
//    private Boolean leaf;
    /**
     * 菜单状态(0正常 1停用)
     */
    @TableField(value = "status")
    private String status;
    /** 创建者 */
    @TableField(value = "create_by")
    private String createBy;
    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "create_time")
    private Date createTime;
    /** 更新者 */
    @TableField(value = "update_by")
    private String updateBy;
    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "update_time")
    private Date updateTime;
    /** 备注 */
    @TableField(value = "remark")
    private String remark;
    @TableField(exist = false)
    private List<FlowableType> children = new ArrayList<FlowableType>();
}
business/src/main/java/com/ycl/domain/entity/ProjectPlanInfo.java
@@ -1,11 +1,13 @@
package com.ycl.domain.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ycl.system.domain.base.AbsEntity;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * 项目计划项
@@ -33,11 +35,20 @@
    @TableField("start_time")
    /** 计划开始时间 */
    private LocalDateTime startTime;
    private Date startTime;
    @TableField("end_time")
    /** 计划完成时间 */
    private LocalDateTime endTime;
    private Date endTime;
    /** 创建时间 */
    @TableField(exist = false)
    private Date gmtCreate;
    /** 修改时间 */
    @TableField(exist = false)
    private Date gmtUpdate;
    @TableField(exist = false)
    private Integer deleted;
}
business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoItem.java
New file
@@ -0,0 +1,16 @@
package com.ycl.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProjectPlanInfoItem {
    private String title;
    private Date startTime;
    private Date endTime;
}
business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoRequest.java
New file
@@ -0,0 +1,17 @@
package com.ycl.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProjectPlanInfoRequest {
    private Integer projectPlanRecordId;
    private BigDecimal actualInvest;
    private List<ProjectPlanInfoItem> addList;
}
business/src/main/java/com/ycl/domain/vo/ProjectPlanInfoResponseVO.java
New file
@@ -0,0 +1,17 @@
package com.ycl.domain.vo;
import com.ycl.domain.entity.ProjectPlanInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProjectPlanInfoResponseVO {
    private List<ProjectPlanInfo> list;
    private BigDecimal actualInvest;
}
business/src/main/java/com/ycl/mapper/FlowableTypeMapper.java
@@ -4,8 +4,10 @@
import com.ycl.domain.entity.FlowableType;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface FlowableTypeMapper extends BaseMapper<FlowableType> {
    List<FlowableType> selectTypeList(FlowableType flowableType);
}
business/src/main/java/com/ycl/mapper/ProjectPlanInfoMapper.java
@@ -31,4 +31,7 @@
    */
    IPage getPage(IPage page, @Param("query") ProjectPlanInfoQuery query);
    void batchInsert(@Param("list") List<ProjectPlanInfo> list);
    void insertOne(ProjectPlanInfo item);
}
business/src/main/java/com/ycl/service/FlowableTypeService.java
@@ -9,4 +9,7 @@
public interface FlowableTypeService extends IService<FlowableType> {
    List<FlowableType> selectTypeList(FlowableType flowableType);
    List<FlowableType> buildTreeSelect(List<FlowableType> list);
}
business/src/main/java/com/ycl/service/ProjectPlanInfoService.java
@@ -5,6 +5,7 @@
import com.ycl.domain.entity.ProjectPlanInfo;
import com.ycl.domain.form.ProjectPlanInfoForm;
import com.ycl.domain.query.ProjectPlanInfoQuery;
import com.ycl.domain.vo.ProjectPlanInfoRequest;
import java.util.List;
@@ -59,8 +60,20 @@
    Result detail(Integer id);
    /**
     * 列表
     * 新增计划项
     * @return
     */
    Result all();
    /**
     * 新增计划项
     * @return
     */
    Result addPlanInfo(ProjectPlanInfoRequest request);
    /**
     * 保存计划项
     * @return
     */
    Result savePlanInfo(ProjectPlanInfo item);
}
business/src/main/java/com/ycl/service/impl/FlowableTypeServiceImpl.java
@@ -1,17 +1,14 @@
package com.ycl.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.common.base.Result;
import com.ycl.domain.entity.FlowableType;
import com.ycl.framework.utils.PageUtil;
import com.ycl.mapper.FlowableTypeMapper;
import com.ycl.service.FlowableTypeService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
@@ -20,4 +17,70 @@
@RequiredArgsConstructor
public class FlowableTypeServiceImpl extends ServiceImpl<FlowableTypeMapper, FlowableType> implements FlowableTypeService {
    @Override
    public List<FlowableType> selectTypeList(FlowableType flowableType) {
        return baseMapper.selectTypeList(flowableType);
    }
    @Override
    public List<FlowableType> buildTreeSelect(List<FlowableType> list) {
        List<FlowableType> returnList = new ArrayList<FlowableType>();
        List<Integer> tempList = list.stream().map(FlowableType::getId).collect(Collectors.toList());
        for (Iterator<FlowableType> iterator = list.iterator(); iterator.hasNext();)
        {
            FlowableType type = (FlowableType) iterator.next();
            // 如果是顶级节点, 遍历该父节点的所有子节点
            if (!tempList.contains(type.getParentId()))
            {
                recursionFn(list, type);
                returnList.add(type);
            }
        }
        if (returnList.isEmpty())
        {
            returnList = list;
        }
        return returnList;
    }
    private void recursionFn(List<FlowableType> list, FlowableType t)
    {
        // 得到子节点列表
        List<FlowableType> childList = getChildList(list, t);
        t.setChildren(childList);
        for (FlowableType tChild : childList)
        {
            if (hasChild(list, tChild))
            {
                recursionFn(list, tChild);
            }
        }
    }
    /**
     * 得到子节点列表
     */
    private List<FlowableType> getChildList(List<FlowableType> list, FlowableType t)
    {
        List<FlowableType> tlist = new ArrayList<FlowableType>();
        Iterator<FlowableType> it = list.iterator();
        while (it.hasNext())
        {
            FlowableType n = (FlowableType) it.next();
            if (n.getParentId().longValue() == t.getId().longValue())
            {
                tlist.add(n);
            }
        }
        return tlist;
    }
    /**
     * 判断是否有子节点
     */
    private boolean hasChild(List<FlowableType> list, FlowableType t)
    {
        return getChildList(list, t).size() > 0;
    }
}
business/src/main/java/com/ycl/service/impl/ProjectPlanInfoServiceImpl.java
@@ -1,20 +1,27 @@
package com.ycl.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.common.base.Result;
import com.ycl.domain.entity.ProjectPlanInfo;
import com.ycl.domain.entity.ProjectPlanRecord;
import com.ycl.domain.form.ProjectPlanInfoForm;
import com.ycl.domain.query.ProjectPlanInfoQuery;
import com.ycl.domain.vo.ProjectPlanInfoRequest;
import com.ycl.domain.vo.ProjectPlanInfoResponseVO;
import com.ycl.domain.vo.ProjectPlanInfoVO;
import com.ycl.framework.utils.PageUtil;
import com.ycl.mapper.ProjectPlanInfoMapper;
import com.ycl.mapper.ProjectPlanRecordMapper;
import com.ycl.service.ProjectPlanInfoService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -29,6 +36,7 @@
public class ProjectPlanInfoServiceImpl extends ServiceImpl<ProjectPlanInfoMapper, ProjectPlanInfo> implements ProjectPlanInfoService {
    private final ProjectPlanInfoMapper projectPlanInfoMapper;
    private final ProjectPlanRecordMapper projectPlanRecordMapper;
    /**
     * 添加
@@ -99,8 +107,9 @@
     */
    @Override
    public Result detail(Integer id) {
        ProjectPlanInfoVO vo = baseMapper.getById(id);
        Assert.notNull(vo, "记录不存在");
        ProjectPlanInfoResponseVO vo = new ProjectPlanInfoResponseVO();
        vo.setList(new LambdaQueryChainWrapper<>(baseMapper).eq(ProjectPlanInfo::getProjectPlanRecordId, id).list());
        vo.setActualInvest(new LambdaQueryChainWrapper<>(projectPlanRecordMapper).eq(ProjectPlanRecord::getId, id).one().getActualInvest());
        return Result.ok().data(vo);
    }
@@ -116,4 +125,48 @@
                .collect(Collectors.toList());
        return Result.ok().data(vos);
    }
    @Override
    public Result addPlanInfo(ProjectPlanInfoRequest request) {
        if (request.getAddList() == null || request.getAddList().isEmpty()) {{
            return Result.error("请选择要添加的计划项");
        }}
        // 删除原有记录
        new LambdaUpdateChainWrapper<>(baseMapper).eq(ProjectPlanInfo::getProjectPlanRecordId, request.getProjectPlanRecordId()).remove();
        // 批量插入新记录
        List<ProjectPlanInfo> list = new ArrayList<>();
        request.getAddList().forEach(item -> {
            ProjectPlanInfo projectPlanInfo = new ProjectPlanInfo();
            projectPlanInfo.setProjectPlanRecordId(request.getProjectPlanRecordId().longValue());
            projectPlanInfo.setTitle(item.getTitle());
            projectPlanInfo.setProgressStatus(0);
            projectPlanInfo.setStartTime(item.getStartTime());
            projectPlanInfo.setEndTime(item.getEndTime());
            list.add(projectPlanInfo);
        });
        baseMapper.batchInsert(list);
        // 更新计划记录的投资,以及上报状态
        new LambdaUpdateChainWrapper<>(projectPlanRecordMapper)
                .eq(ProjectPlanRecord::getId, request.getProjectPlanRecordId())
                .set(ProjectPlanRecord::getActualInvest, request.getActualInvest())
                .set(ProjectPlanRecord::getReportStatus, 0)
                .update();
        return Result.ok("添加成功");
    }
    @Override
    public Result savePlanInfo(ProjectPlanInfo item) {
        item.setProgressStatus(0);
        // 判断id是否存在,存在则更新,不存在则新增
        if (item.getId() == null) {
            baseMapper.insertOne(item);
        } else {
            new LambdaUpdateChainWrapper<>(baseMapper).eq(ProjectPlanInfo::getId, item.getId())
                    .set(ProjectPlanInfo::getTitle, item.getTitle())
                    .set(ProjectPlanInfo::getStartTime, item.getStartTime())
                    .set(ProjectPlanInfo::getEndTime, item.getEndTime())
                    .update();
        }
        return Result.ok("保存成功");
    }
}
business/src/main/resources/mapper/FlowableTypeMapper.xml
@@ -53,5 +53,17 @@
        WHERE
            TP.deleted = 0
    </select>
    <select id="selectTypeList" parameterType="com.ycl.domain.entity.FlowableType" resultType="com.ycl.domain.entity.FlowableType">
        select * from t_flowable_type
        <where>
            <if test="name != null and name != ''">
                AND name like concat('%', #{name}, '%')
            </if>
            <if test="status != null and status != ''">
                AND status = #{status}
            </if>
        </where>
        order by parent_id, order_num
    </select>
</mapper>
business/src/main/resources/mapper/ProjectPlanInfoMapper.xml
@@ -10,11 +10,18 @@
        <result column="start_time" property="startTime" />
        <result column="end_time" property="endTime" />
    </resultMap>
    <insert id="batchInsert">
        insert into t_project_plan_info(project_plan_record_id, title, progress_status, start_time, end_time)
        values
        <foreach collection="list" item="item" separator=",">
            (#{item.projectPlanRecordId}, #{item.title}, #{item.progressStatus}, #{item.startTime}, #{item.endTime})
        </foreach>
    </insert>
    <insert id="insertOne">
        insert into t_project_plan_info(project_plan_record_id, title, progress_status, start_time, end_time)
        values
        (#{projectPlanRecordId}, #{title}, #{progressStatus}, #{startTime}, #{endTime})
    </insert>
    <select id="getById" resultMap="BaseResultMap">