whycxzp
2022-08-11 5c3f8c8a3e36ab34fe614a8790b0fc7b3e15e1b5
src/main/java/com/whyc/service/WorksheetMainService.java
@@ -2,19 +2,19 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.config.EnumWorksheetType;
import com.whyc.dto.Response;
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 com.whyc.pojo.*;
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.*;
@@ -37,19 +37,118 @@
    private DocUserMapper userMapper;
    @Autowired
    @Lazy
    private ProductBomApprovingService approvingService;
    @Autowired
    private ComponentProductApprovingService cpApprovingService;
    @Autowired
    private ComponentApprovingService cApprovingService;
    @Autowired
    private ComponentService cService;
    @Transactional
    public boolean submit(WorksheetMainDTO mainDTO, DocUser user) {
        WorksheetMain main = mainDTO.getMain();
        List<ProductBomApproving> bomList = mainDTO.getBomList();
    public boolean submit(WorksheetMain main, DocUser user) {
        main.setType(1);
        List<ProductBomApproving> bomList = main.getApprovingBomList();
        int rejectVersion=-1;
        //提交主表
        main.setCreateUserId(user.getId());
        //提交人角色来判断工作流层级
        if(user.getRoleId().equals("1001")){
            main.setLevel(2);
            main.setStatus(1);
            if(main.getId()==null) {
                main.setLevel(2);
                main.setStatus(1);
                mainMapper.insert(main);
            }else {
                rejectVersion = approvingService.getRejectVersion(main.getId());
            }
            //提交子表
            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);
            link.setRejectVersion(rejectVersion+1);
            linkMapper.insert(link);
        }
        else if(user.getRoleId().equals("1002")){
            if(main.getId()==null) {
                main.setLevel(1);
                main.setStatus(2);
                mainMapper.insert(main);
            }else {
                rejectVersion = approvingService.getRejectVersion(main.getId());
            }
            //提交子表
            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);
            link.setRejectVersion(rejectVersion+1);
            linkMapper.insert(link);
        }
        else if(user.getRoleId().equals("1003")){
            main.setLevel(0);
            main.setStatus(5);
            mainMapper.insert(main);
        }else{
            return false;
        }
        //产品bom/图纸图片提交
        //查询当前驳回版本
        int nextRejectVersion = rejectVersion+1;
        bomList.forEach(bom->{
            bom.setMainId(main.getId());
            bom.setUpUserId(user.getId());
            bom.setRejectVersion(nextRejectVersion);
            bom.setCreateDate(new Date());
            if(bom.getDwgUrl()==null){
                bom.setDwgUrl("");
            }else {
                bom.setDwgUrl(bom.getDwgUrl());
            }
            if(bom.getFileUrl()==null){
                bom.setFileUrl("");
            }else {
                bom.setFileUrl(bom.getFileUrl());
            }
            if(bom.getPictureUrl()==null){
                bom.setPictureUrl("");
            }else{
                bom.setPictureUrl(bom.getPictureUrl());
            }
        });
        approvingService.insert(bomList);
        return true;
    }
    public boolean componentProductSubmit(WorksheetMainDTO mainDTO, DocUser user) {
        List<ComponentProductApproving> approvingList = new LinkedList<>();
        WorksheetMain main = mainDTO.getMain();
        List<ComponentProductApproving> addedList = mainDTO.getAddedList();
        List<ComponentProductApproving> replacedList = mainDTO.getReplacedList();
        List<ComponentProductApproving> removedList = mainDTO.getRemovedList();
        main.setType(EnumWorksheetType.ComponentProduct.getType());
        //提交主表
        main.setCreateUserId(user.getId());
        //提交人角色来判断工作流层级
        if(user.getRoleId().equals("1001")){
            if(main.getId()==null) {
                main.setLevel(2);
                main.setStatus(1);
                mainMapper.insert(main);
            }
            //提交子表
            WorksheetLink link =new WorksheetLink();
            link.setMainId(main.getId());
@@ -62,9 +161,11 @@
            linkMapper.insert(link);
        }
        else if(user.getRoleId().equals("1002")){
            main.setLevel(1);
            main.setStatus(2);
            mainMapper.insert(main);
            if(main.getId()==null) {
                main.setLevel(1);
                main.setStatus(2);
                mainMapper.insert(main);
            }
            //提交子表
            WorksheetLink link =new WorksheetLink();
            link.setMainId(main.getId());
@@ -83,10 +184,129 @@
        }else{
            return false;
        }
        //产品bom/图纸图片提交
        bomList.forEach(bom->bom.setMainId(main.getId()));
        approvingService.insert(bomList);
        //散装件-产品审批提交
        if(addedList!=null && addedList.size()!=0){
            addedList.forEach(item->{
                item.setMainId(main.getId());
                item.setLinkType(1);
            });
            approvingList.addAll(addedList);
        }
        if(replacedList!=null && replacedList.size()!=0){
            replacedList.forEach(item->{
                item.setMainId(main.getId());
                item.setLinkType(2);
            });
            approvingList.addAll(replacedList);
        }
        if(removedList!=null && removedList.size()!=0){
            removedList.forEach(item->{
                item.setMainId(main.getId());
                item.setLinkType(-1);
            });
            approvingList.addAll(removedList);
        }
        cpApprovingService.insert(approvingList);
        return true;
    }
    public Response componentSubmit(WorksheetMain main, DocUser user) {
        Response<Object> response = new Response<>();
        List<ComponentApproving> cApprovingList = main.getCApprovingList();
        //查询是否有 已生效或者已提交审批的 相同的散装件
        List<Component> existComponentList = new LinkedList<>();
        List<ComponentApproving> existCAList = cApprovingService.getList();
        List<Component> componentList = cService.getList();
        List<ComponentApproving> cAList = cApprovingService.getList();
        for (int i = 0; i < cApprovingList.size(); i++) {
            ComponentApproving componentApproving = cApprovingList.get(i);
            for (int j = 0; j < componentList.size(); j++) {
                if(componentApproving.getSubCode().equals(componentList.get(j).getSubCode())
                    && componentApproving.getSubName().equals(componentList.get(j).getSubName())
                    && componentApproving.getSubModel().equals(componentList.get(j).getSubModel())
                ){
                    existComponentList.add(componentList.get(j));
                }
            }
            for (int j = 0; j < cAList.size(); j++) {
                if(componentApproving.getSubCode().equals(cAList.get(j).getSubCode())
                        && componentApproving.getSubName().equals(cAList.get(j).getSubName())
                        && componentApproving.getSubModel().equals(cAList.get(j).getSubModel())
                ){
                    existCAList.add(cAList.get(j));
                }
            }
        }
        int existCASize = existCAList.size();
        int existComponentSize = existComponentList.size();
        if(existCASize!=0){
            if(existComponentSize!=0){
                response.setII(21,existCAList,existComponentList,"重复提交:现有散装件及正在进行审批的散装件中,存在当前提交上传的散装件");
            }else{
                response.set(22,existCAList,"重复提交:正在进行审批的散装件中,存在当前提交上传的散装件");
            }
            return response;
        }else{
            if(existComponentSize!=0){
                return response.setII(23,null,existComponentList,"重复提交:现有散装件中,存在当前提交上传的散装件");
            }
        }
        main.setType(EnumWorksheetType.Component.getType());
        //提交主表
        main.setCreateUserId(user.getId());
        //提交人角色来判断工作流层级
        if(user.getRoleId().equals("1001")){
            if(main.getId()==null) {
                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")){
            if(main.getId()==null) {
                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 response.set(3);
        }
        //散装件-审批提交
        cApprovingList.forEach(cApproving->{
            cApproving.setMainId(main.getId());
        });
        cApprovingService.insert(cApprovingList);
        return response.set(1);
    }
    public WorksheetMain getInfoById(Integer id) {
@@ -105,20 +325,24 @@
        main.setId(id);
        main.setStatus(status);
        main.setEndReason(endReason);
        main.setEndTime(new Date());
        mainMapper.updateById(main);
    }
    /**
     * 用户对应的工作台数据分类
     * @param user
     * */
    public Map<String, List<WorksheetMain>> getList(DocUser user) {
        Map<String,List<WorksheetMain>> map = new HashMap<>();
     * @return*/
    public Map<String, Integer> getStatusStatistic(DocUser user) {
        Map<String,Integer> map = new HashMap<>();
        switch (user.getRoleId()){
            //普通员工
            case "1001":
                {
                    //未处理(审批中)/已驳回/已审批
                    map.put("rejected",0);
                    map.put("approving",0);
                    map.put("approved",0);
                    QueryWrapper<WorksheetMain> query = Wrappers.query();
                    query.eq("create_user_id",user.getId());
                    List<WorksheetMain> worksheetMainList = mainMapper.selectList(query);
@@ -126,20 +350,19 @@
                    groupingList.forEach((status,mainList)->{
                        switch (status){
                            case 0:{
                                map.put("rejected",mainList);
                                map.put("rejected",mainList.size());
                            }break;
                            case 1:
                            case 2:{
                                List<WorksheetMain> addedMainList = map.get("approving");
                                if(addedMainList ==null){
                                    map.put("approving",mainList);
                                Integer addedMainCount= map.get("approving");
                                if(addedMainCount ==0){
                                    map.put("approving",mainList.size());
                                }else{
                                    addedMainList.addAll(mainList);
                                    map.put("approving",addedMainList);
                                    map.put("approving",addedMainCount+mainList.size());
                                }
                            }break;
                            case 5:{
                                map.put("approved",mainList);
                                map.put("approved",mainList.size());
                            }break;
                        }
                    });
@@ -150,6 +373,12 @@
                {
                    //待处理/已处理/属于自己-审批中/已驳回/已审批
                    //属于自己-审批中/已驳回/已审批
                    map.put("rejected",0);
                    map.put("approving",0);
                    map.put("approved",0);
                    map.put("handling",0);
                    map.put("handled",0);
                    QueryWrapper<WorksheetMain> query = Wrappers.query();
                    query.eq("create_user_id",user.getId());
                    List<WorksheetMain> worksheetMainList = mainMapper.selectList(query);
@@ -157,13 +386,13 @@
                    groupingList.forEach((status,mainList)->{
                        switch (status){
                            case 0:{
                                map.put("rejected",mainList);
                                map.put("rejected",mainList.size());
                            }break;
                            case 2:{
                                map.put("approving",mainList);
                                map.put("approving",mainList.size());
                            }break;
                            case 5:{
                                map.put("approved",mainList);
                                map.put("approved",mainList.size());
                            }break;
                        }
                    });
@@ -175,11 +404,16 @@
                        linkList.forEach(link -> {mainList.add(link.getMain());});
                        switch (linkStatus){
                            case 0:{
                                map.put("handling",mainList);
                                map.put("handling",mainList.size());
                            }break;
                            case 1:
                            case 2:{
                                map.put("handled",mainList);
                                Integer addedMainCount= map.get("handled");
                                if(addedMainCount ==0){
                                    map.put("handled",mainList.size());
                                }else{
                                    map.put("handled",addedMainCount+mainList.size());
                                }
                            }break;
                        }
                    });
@@ -189,6 +423,8 @@
            case "1003":
                {
                    //待处理/已审批
                    map.put("handling",0);
                    map.put("approved",0);
                    List<WorksheetLink> WorksheetLinkList = linkService.getInfoList(user.getId());
                    Map<Integer, List<WorksheetLink>> groupingLinkList = WorksheetLinkList.stream().collect(Collectors.groupingBy(WorksheetLink::getLinkStatus));
                    groupingLinkList.forEach((linkStatus,linkList)->{
@@ -196,17 +432,27 @@
                        linkList.forEach(link -> {mainList.add(link.getMain());});
                        switch (linkStatus){
                            case 0:{
                                map.put("handling",mainList);
                                map.put("handling",mainList.size());
                            }break;
                            case 1:
                            case 2:{
                                map.put("handled",mainList);
                                Integer addedMainCount= map.get("approved");
                                if(addedMainCount ==0){
                                    map.put("approved",mainList.size());
                                }else{
                                    map.put("approved",addedMainCount+mainList.size());
                                }
                            }break;
                        }
                    });
                }
                break;
        }
        //查询我的工单数量
        QueryWrapper<WorksheetMain> query = Wrappers.query();
        query.eq("create_user_id",user.getId());
        Integer count = mainMapper.selectCount(query);
        map.put("my",count);
        return map;
    }
@@ -214,4 +460,73 @@
    public WorksheetMain getLinkList(int id) {
        return mainMapper.getLinkList(id);
    }
    public Response<PageInfo<WorksheetMain>> getApprovingListPage(DocUser user, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum,pageSize);
        QueryWrapper<WorksheetMain> query = Wrappers.query();
        query.eq("create_user_id",user.getId()).in("status",1,2).orderByDesc("id");
        List<WorksheetMain> worksheetMainList = mainMapper.selectList(query);
        //查询主表状态对应的子表
        worksheetMainList.forEach(main -> {
            main.setApprovingUser(linkService.getApprovingUser(main.getId()));
        });
        PageInfo<WorksheetMain> pageInfo = new PageInfo<>(worksheetMainList);
        return new Response<PageInfo<WorksheetMain>>().set(1,pageInfo);
    }
    public Response<PageInfo<WorksheetMain>> getRejectedListPage(DocUser user, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum,pageSize);
        QueryWrapper<WorksheetMain> query = Wrappers.query();
        query.eq("create_user_id",user.getId()).in("status",0).orderByDesc("id");
        List<WorksheetMain> worksheetMainList = mainMapper.selectList(query);
        PageInfo<WorksheetMain> pageInfo = new PageInfo<>(worksheetMainList);
        return new Response<PageInfo<WorksheetMain>>().set(1,pageInfo);
    }
    public Response<PageInfo<WorksheetMain>> getApprovedListPage(DocUser user, int pageNum, int pageSize) {
        Response<PageInfo<WorksheetMain>> response = new Response<>();
        PageHelper.startPage(pageNum,pageSize);
        List<WorksheetMain> worksheetMainList = null;
        //自己的工单
        if(!user.getRoleId().equals("1003")){
            QueryWrapper<WorksheetMain> query = Wrappers.query();
            query.eq("create_user_id",user.getId()).in("status",5).orderByDesc("id");
            worksheetMainList = mainMapper.selectList(query);
        }else{
            //总经理,节点审批人为自己
            worksheetMainList = linkService.getInfoList2(user.getId(),1);
        }
        PageInfo<WorksheetMain> pageInfo = new PageInfo<>(worksheetMainList);
        return response.set(1,pageInfo);
    }
    public Response<PageInfo<WorksheetMain>> getHandlingListPage(DocUser user, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum,pageSize);
        List<WorksheetMain> worksheetMainList = linkService.getInfoList3(user.getId(),0);
        PageInfo<WorksheetMain> pageInfo = new PageInfo<>(worksheetMainList);
        return new Response<PageInfo<WorksheetMain>>().set(1,pageInfo);
    }
    public Response<PageInfo<WorksheetMain>> getHandledListPage(DocUser user, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum,pageSize);
        List<WorksheetMain> worksheetMainList = linkService.getInfoList3(user.getId(),1);
        PageInfo<WorksheetMain> pageInfo = new PageInfo<>(worksheetMainList);
        return new Response<PageInfo<WorksheetMain>>().set(1,pageInfo);
    }
    public WorksheetMain getInfo(int id) {
         return mainMapper.selectById(id);
    }
    public Response<PageInfo<WorksheetMain>> getMyList(int pageNum, int pageSize, DocUser user) {
        PageHelper.startPage(pageNum,pageSize);
        QueryWrapper<WorksheetMain> query = Wrappers.query();
        query.eq("create_user_id",user.getId()).orderByDesc("id");
        List<WorksheetMain> worksheetMainList = mainMapper.selectList(query);
        PageInfo<WorksheetMain> pageInfo = new PageInfo<>(worksheetMainList);
        return new Response<PageInfo<WorksheetMain>>().set(1,pageInfo);
    }
}