whycxzp
2022-07-21 cf7f2a00eb4e5fbfe90a403f6543d67daf447ff8
src/main/java/com/whyc/service/WorksheetMainService.java
@@ -1,12 +1,24 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.whyc.dto.WorksheetMainDTO;
import com.whyc.mapper.DocUserMapper;
import com.whyc.mapper.WorksheetLinkMapper;
import com.whyc.mapper.WorksheetMainMapper;
import com.whyc.pojo.DocUser;
import com.whyc.pojo.ProductBomApproving;
import com.whyc.pojo.WorksheetLink;
import com.whyc.pojo.WorksheetMain;
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 sun.print.PSPrinterJob;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class WorksheetMainService {
@@ -17,18 +29,189 @@
    @Resource
    private WorksheetLinkMapper linkMapper;
    public void submit(WorksheetMain main) {
        //提交工单主表
        mainMapper.insert(main);
        //提交工单子表
        WorksheetLink link =new WorksheetLink();
        link.setMainId(main.getId());
        link.setParentId(0);
        link.setDealUserId(main.getNextUser());
        link.setDealType(1);
        link.setDealDesc(main.getDealDesc());
        link.setLinkStatus(0);
        link.setEnableArchive(0);
        linkMapper.insert(link);
    @Autowired
    @Lazy
    private WorksheetLinkService linkService;
    @Resource
    private DocUserMapper userMapper;
    @Autowired
    private ProductBomApprovingService approvingService;
    @Transactional
    public boolean submit(WorksheetMainDTO mainDTO, DocUser user) {
        WorksheetMain main = mainDTO.getMain();
        List<ProductBomApproving> bomList = mainDTO.getBomList();
        //提交主表
        main.setCreateUserId(user.getId());
        //提交人角色来判断工作流层级
        if(user.getRoleId().equals("1001")){
            main.setLevel(2);
            main.setStatus(1);
            mainMapper.insert(main);
            //提交子表
            WorksheetLink link =new WorksheetLink();
            link.setMainId(main.getId());
            link.setParentId(0);
            link.setDealUserId(main.getNextUser());
            link.setDealType(1);
            link.setDealDesc(main.getDealDesc());
            link.setLinkStatus(0);
            link.setEnableArchive(0);
            linkMapper.insert(link);
        }
        else if(user.getRoleId().equals("1002")){
            main.setLevel(1);
            main.setStatus(2);
            mainMapper.insert(main);
            //提交子表
            WorksheetLink link =new WorksheetLink();
            link.setMainId(main.getId());
            link.setParentId(0);
            link.setDealUserId(main.getNextUser());
            link.setDealType(2);
            link.setDealDesc(main.getDealDesc());
            link.setLinkStatus(0);
            link.setEnableArchive(1);
            linkMapper.insert(link);
        }
        else if(user.getRoleId().equals("1003")){
            main.setLevel(0);
            main.setStatus(5);
            mainMapper.insert(main);
        }else{
            return false;
        }
        //产品bom/图纸图片提交
        bomList.forEach(bom->bom.setMainId(main.getId()));
        approvingService.insert(bomList);
        return true;
    }
    public WorksheetMain getInfoById(Integer id) {
        return mainMapper.selectById(id);
    }
    public void updateStatusById(Integer id,Integer status) {
        WorksheetMain main = new WorksheetMain();
        main.setId(id);
        main.setStatus(status);
        mainMapper.updateById(main);
    }
    public void updateEndStatusById(Integer id,String endReason,Integer status) {
        WorksheetMain main = new WorksheetMain();
        main.setId(id);
        main.setStatus(status);
        main.setEndReason(endReason);
        mainMapper.updateById(main);
    }
    /**
     * 用户对应的工作台数据分类
     * @param user
     * */
    public Map<String, List<WorksheetMain>> getList(DocUser user) {
        Map<String,List<WorksheetMain>> map = new HashMap<>();
        switch (user.getRoleId()){
            //普通员工
            case "1001":
                {
                    //未处理(审批中)/已驳回/已审批
                    QueryWrapper<WorksheetMain> query = Wrappers.query();
                    query.eq("create_user_id",user.getId());
                    List<WorksheetMain> worksheetMainList = mainMapper.selectList(query);
                    Map<Integer, List<WorksheetMain>> groupingList = worksheetMainList.stream().collect(Collectors.groupingBy(WorksheetMain::getStatus));
                    groupingList.forEach((status,mainList)->{
                        switch (status){
                            case 0:{
                                map.put("rejected",mainList);
                            }break;
                            case 1:
                            case 2:{
                                List<WorksheetMain> addedMainList = map.get("approving");
                                if(addedMainList ==null){
                                    map.put("approving",mainList);
                                }else{
                                    addedMainList.addAll(mainList);
                                    map.put("approving",addedMainList);
                                }
                            }break;
                            case 5:{
                                map.put("approved",mainList);
                            }break;
                        }
                    });
                }
                break;
            //项目经理
            case "1002":
                {
                    //待处理/已处理/属于自己-审批中/已驳回/已审批
                    //属于自己-审批中/已驳回/已审批
                    QueryWrapper<WorksheetMain> query = Wrappers.query();
                    query.eq("create_user_id",user.getId());
                    List<WorksheetMain> worksheetMainList = mainMapper.selectList(query);
                    Map<Integer, List<WorksheetMain>> groupingList = worksheetMainList.stream().collect(Collectors.groupingBy(WorksheetMain::getStatus));
                    groupingList.forEach((status,mainList)->{
                        switch (status){
                            case 0:{
                                map.put("rejected",mainList);
                            }break;
                            case 2:{
                                map.put("approving",mainList);
                            }break;
                            case 5:{
                                map.put("approved",mainList);
                            }break;
                        }
                    });
                    //待处理/已处理
                    List<WorksheetLink> WorksheetLinkList = linkService.getInfoList(user.getId());
                    Map<Integer, List<WorksheetLink>> groupingLinkList = WorksheetLinkList.stream().collect(Collectors.groupingBy(WorksheetLink::getLinkStatus));
                    groupingLinkList.forEach((linkStatus,linkList)->{
                        List<WorksheetMain> mainList = new LinkedList<>();
                        linkList.forEach(link -> {mainList.add(link.getMain());});
                        switch (linkStatus){
                            case 0:{
                                map.put("handling",mainList);
                            }break;
                            case 1:
                            case 2:{
                                map.put("handled",mainList);
                            }break;
                        }
                    });
                }
                break;
            //总经理
            case "1003":
                {
                    //待处理/已审批
                    List<WorksheetLink> WorksheetLinkList = linkService.getInfoList(user.getId());
                    Map<Integer, List<WorksheetLink>> groupingLinkList = WorksheetLinkList.stream().collect(Collectors.groupingBy(WorksheetLink::getLinkStatus));
                    groupingLinkList.forEach((linkStatus,linkList)->{
                        List<WorksheetMain> mainList = new LinkedList<>();
                        linkList.forEach(link -> {mainList.add(link.getMain());});
                        switch (linkStatus){
                            case 0:{
                                map.put("handling",mainList);
                            }break;
                            case 1:
                            case 2:{
                                map.put("handled",mainList);
                            }break;
                        }
                    });
                }
                break;
        }
        return map;
    }
    public WorksheetMain getLinkList(int id) {
        return mainMapper.getLinkList(id);
    }
}