| | |
| | | package com.whyc.service; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.whyc.mapper.WorkflowLinkMapper; |
| | | import com.whyc.pojo.WorkflowLink; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.whyc.constant.RoleEnum; |
| | | import com.whyc.constant.WorkflowDischargePlanEnum; |
| | | import com.whyc.constant.WorkflowEnum; |
| | | import com.whyc.dto.Response; |
| | | import com.whyc.dto.WorkflowLinkDTO; |
| | | import com.whyc.mapper.*; |
| | | import com.whyc.pojo.*; |
| | | import com.whyc.util.ActionUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | import javax.annotation.Resource; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | | public class WorkflowLinkService { |
| | | |
| | | @Autowired |
| | | @Resource |
| | | private WorkflowLinkMapper mapper; |
| | | |
| | | @Autowired |
| | | private WorkflowMainService mainService; |
| | | |
| | | @Autowired |
| | | private BattDischargePlanTempService battDischargePlanTempService; |
| | | |
| | | @Autowired |
| | | private BattdischargePlanService planService; |
| | | |
| | | @Autowired(required = false) |
| | | private Fbs9100SetParamTempMapper tmpMapper; |
| | | |
| | | @Autowired(required = false) |
| | | private BatttestdataInfMapper testInfMapper; |
| | | |
| | | @Autowired(required = false) |
| | | private BattInfMapper binfMapper; |
| | | |
| | | @Autowired(required = false) |
| | | private WorkflowMainMapper mainMapper; |
| | | |
| | | public void addBatch(List<WorkflowLink> links) { |
| | | mapper.insertBatchSomeColumn(links); |
| | | } |
| | | |
| | | public List<WorkflowLink> getWorkflowInfo(Integer mainId) { |
| | | QueryWrapper<WorkflowLink> wrapper = Wrappers.query(); |
| | | wrapper.eq("main_id",mainId); |
| | | wrapper.eq("main_id", mainId); |
| | | return mapper.selectList(wrapper); |
| | | } |
| | | |
| | | |
| | | public void update(WorkflowLink link) { |
| | | /**传入id,mainId,processLevel,status,dealReason或者dealRejectReason |
| | | * @param linkDTO 节点数据传输类 |
| | | * */ |
| | | public Response updateLinkOfDischargePlanTemp(WorkflowLinkDTO linkDTO) { |
| | | WorkflowLink link = linkDTO.getLink(); |
| | | List<BattDischargePlanTemp> tempList = linkDTO.getTempList(); |
| | | String processLevel = link.getProcessLevel(); |
| | | Date now = new Date(); |
| | | int userId = ActionUtil.getUser().getUId().intValue(); |
| | | switch (processLevel){ |
| | | case "P1"://当前节点为过程1-会签,本场景没有拒绝选项 |
| | | { |
| | | battDischargePlanTempService.updateList(tempList); |
| | | updateLinkField(link); |
| | | //判断会签是否完成,完成则新建下一步的节点 |
| | | int leftAssignNum = getLeftAssignNum(link.getMainId(),link.getProcessLevel()); |
| | | if(leftAssignNum == 0){ //剩余会签数量为0,说明会签已经完成 |
| | | WorkflowLink linkNew = new WorkflowLink(); |
| | | linkNew.setMainId(link.getMainId()); |
| | | linkNew.setParentId(link.getId()); |
| | | linkNew.setProcessLevel(WorkflowDischargePlanEnum.PROCESS_MANAGER1SIGN.getProcessLevel()); |
| | | linkNew.setProcessLevelName(WorkflowDischargePlanEnum.PROCESS_MANAGER1SIGN.getProcessLevelName()); |
| | | linkNew.setCreateTime(now); |
| | | linkNew.setDealRoleId(RoleEnum.ADMIN.getId()); |
| | | linkNew.setDealType(WorkflowEnum.TYPE_TRANSFER_DISPATCH.getValue()); |
| | | linkNew.setDealDesc("班组会签完成"); |
| | | linkNew.setStatus(WorkflowEnum.STATUS_TAKING.getValue()); |
| | | mapper.insert(linkNew); |
| | | } |
| | | break; |
| | | } |
| | | case "P2"://当前节点为过程2-管理审核 |
| | | { |
| | | link.setDealUserId(userId); |
| | | if(link.getStatus() == WorkflowEnum.STATUS_REJECT.getValue().intValue()){ //驳回 |
| | | updateLinkFieldAndFinish(link); |
| | | }else{ //通过 |
| | | updateLinkField(link); |
| | | //新建下一节点-领导层 |
| | | WorkflowLink linkNew = new WorkflowLink(); |
| | | linkNew.setMainId(link.getMainId()); |
| | | linkNew.setParentId(link.getId()); |
| | | linkNew.setProcessLevel(WorkflowDischargePlanEnum.PROCESS_MANAGER2SIGN.getProcessLevel()); |
| | | linkNew.setProcessLevelName(WorkflowDischargePlanEnum.PROCESS_MANAGER2SIGN.getProcessLevelName()); |
| | | linkNew.setCreateTime(now); |
| | | linkNew.setDealRoleId(RoleEnum.LEADER.getId()); |
| | | linkNew.setDealType(WorkflowEnum.TYPE_TRANSFER_DISPATCH.getValue()); |
| | | String dealUserName = ActionUtil.getUser().getUName(); |
| | | linkNew.setDealDesc(dealUserName+"审核完成"); |
| | | linkNew.setStatus(WorkflowEnum.STATUS_TAKING.getValue()); |
| | | mapper.insert(linkNew); |
| | | } |
| | | break; |
| | | } |
| | | case "P3"://当前节点为过程3-领导审批 |
| | | { |
| | | link.setDealUserId(userId); |
| | | updateLinkFieldAndFinish(link); |
| | | |
| | | Integer mainId = link.getMainId(); |
| | | WorkflowMain main = mainService.getOne(mainId); |
| | | if(main.getType()==1){ //将计划转移到正式表 |
| | | List<BattDischargePlanTemp> tempListByMain = battDischargePlanTempService.getListByMainId(mainId); |
| | | planService.insertConfirmDischargePlan(tempListByMain); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | return new Response().setII(1,"更新完成"); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param mainId 特定的单据 |
| | | * @param processLevel 特定的过程 |
| | | * @return 特定单据,特定过程,未完成的会签的数量 |
| | | */ |
| | | private int getLeftAssignNum(Integer mainId, String processLevel) { |
| | | QueryWrapper<WorkflowLink> query = Wrappers.query(); |
| | | query.select("count(*) as id").eq("main_id",mainId).eq("process_level",processLevel).ne("status",WorkflowEnum.STATUS_FINISH.getValue()); |
| | | return mapper.selectOne(query).getId(); |
| | | } |
| | | |
| | | /** |
| | | * 更新节点,主节点不完结 |
| | | * @param link 参数id,status,dealReason或者dealRejectReason |
| | | */ |
| | | private void updateLinkField(WorkflowLink link) { |
| | | Date now = new Date(); |
| | | link.setDealTime(now); |
| | | link.setDealDesc("管理员处理通过"); |
| | | mapper.updateById(link); |
| | | } |
| | | |
| | | /** |
| | | * 更新节点,主节点完结,单据完结 |
| | | * @param link 参数id,mainId,status,dealReason或者dealRejectReason |
| | | */ |
| | | private void updateLinkFieldAndFinish(WorkflowLink link) { |
| | | updateLinkField(link); |
| | | Date now = link.getDealTime(); |
| | | if(link.getStatus() == WorkflowEnum.STATUS_FINISH.getValue().intValue()){ //通过 |
| | | mainService.updateStatus(link.getMainId(),WorkflowEnum.MAIN_STATUS_END_PASS.getValue(),link.getDealReason(),now); |
| | | }else{ //驳回 |
| | | mainService.updateStatus(link.getMainId(),WorkflowEnum.MAIN_STATUS_END_REJECT.getValue(),link.getDealRejectReason(),now); |
| | | } |
| | | } |
| | | |
| | | public Map<Integer, Integer> getReceivedStatistics(int type, UserInf user) { |
| | | Map<Integer,Integer> statistics = new HashMap<>(); |
| | | statistics.put(1,0); |
| | | statistics.put(6,0); |
| | | statistics.put(58,0); |
| | | List<WorkflowLink> links = mapper.getReceivedList(type,user); |
| | | Map<Integer, List<WorkflowLink>> receivedListMap = links.stream().collect(Collectors.groupingBy(WorkflowLink::getStatus)); |
| | | Set<Integer> statusSet = receivedListMap.keySet(); |
| | | for (Integer status : statusSet) { |
| | | if (status == 5 || status == 8) { |
| | | statistics.put(58, statistics.get(58) + receivedListMap.get(status).size()); |
| | | } else { |
| | | statistics.put(status, receivedListMap.get(status).size()); |
| | | } |
| | | } |
| | | return statistics; |
| | | } |
| | | |
| | | public void add(WorkflowLink link) { |
| | | mapper.insert(link); |
| | | } |
| | | |
| | | //更新节点(除放电计划之外的) |
| | | public Response linkOfTemp(WorkflowLink link) { |
| | | Date now = new Date(); |
| | | int userId = ActionUtil.getUser().getUId().intValue(); |
| | | int roleId = ActionUtil.getUser().getURole(); |
| | | switch (roleId) { |
| | | case 0://当前节点为过程0-管理员审批 |
| | | { |
| | | link.setDealUserId(userId); |
| | | if (link.getStatus() == WorkflowEnum.STATUS_REJECT.getValue().intValue()) { //驳回 |
| | | updateLinkFieldAndFinish(link); |
| | | } else { //通过 |
| | | updateLinkField(link); |
| | | //新建下一节点-领导层 |
| | | WorkflowLink linkNew = new WorkflowLink(); |
| | | linkNew.setMainId(link.getMainId()); |
| | | linkNew.setParentId(link.getId()); |
| | | linkNew.setCreateTime(now); |
| | | linkNew.setDealRoleId(RoleEnum.LEADER.getId()); |
| | | linkNew.setDealType(WorkflowEnum.TYPE_TRANSFER_DISPATCH.getValue()); |
| | | String dealUserName = ActionUtil.getUser().getUName(); |
| | | linkNew.setDealDesc("领导层处理中"); |
| | | linkNew.setStatus(WorkflowEnum.STATUS_WAIT_FOR_APPROVE.getValue()); |
| | | mapper.insert(linkNew); |
| | | } |
| | | break; |
| | | } |
| | | case 10://当前节点为过程10-领导层审批 |
| | | { |
| | | link.setDealUserId(userId); |
| | | link.setDealDesc("领导层审批通过"); |
| | | updateLinkFieldAndFinish(link); |
| | | } |
| | | } |
| | | return new Response().set(1, true); |
| | | } |
| | | |
| | | //查询节点(除放电计划之外的) |
| | | public Response searchTmp(int type, int status, int pageNum, int pageSize) { |
| | | UserInf uinf = ActionUtil.getUser(); |
| | | //查询自己需要处理或者审批的 |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | List<WorkflowLink> list = mapper.searchTmp(uinf.getUId().intValue(), uinf.getURole(), type, status); |
| | | PageInfo pageInfo = new PageInfo(list); |
| | | return new Response().setII(1, list == null ? false : true, list, "查询节点(除放电计划之外的)"); |
| | | } |
| | | |
| | | //节点为二次放电时查询二次放电参数和本年上一次有效核容数据 |
| | | public Response searchLastHrById(int mid) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | //查询二次放电参数 |
| | | QueryWrapper tmpWrapper = Wrappers.query(); |
| | | tmpWrapper.eq("main_id", mid); |
| | | tmpWrapper.last("limit 1"); |
| | | Fbs9100SetParamTemp tmp = tmpMapper.selectOne(tmpWrapper); |
| | | map.put("paramTmp", tmp); |
| | | //main表单信息 |
| | | QueryWrapper mainWrapper = Wrappers.query(); |
| | | mainWrapper.eq("id", mid); |
| | | mainWrapper.last("limit 1"); |
| | | WorkflowMain main = mainMapper.selectOne(mainWrapper); |
| | | map.put("main", main); |
| | | //本年上一次有效核容数据 |
| | | if (tmp != null) { |
| | | BatttestdataInf tinf = testInfMapper.searchHrYear(tmp.getBattGroupId()); |
| | | map.put("testInf", tinf); |
| | | QueryWrapper infWrapper = new QueryWrapper(); |
| | | infWrapper.eq("battGroupId", tmp.getBattGroupId()); |
| | | infWrapper.last("limit 1"); |
| | | Battinf binf = binfMapper.selectOne(infWrapper); |
| | | map.put("binf", binf); |
| | | } |
| | | |
| | | return new Response().setII(1, true, map, "节点为二次放电时查询二次放电参数和本年上一次有效核容数据"); |
| | | } |
| | | |
| | | //查询自己申请的工单(去除放电计划) |
| | | public Response getFlowMainByUid(int type, int status, int pageNum, int pageSize) { |
| | | UserInf uinf = ActionUtil.getUser(); |
| | | //查询自己需要处理或者审批的 |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | List<WorkflowMain> list = mapper.getFlowMainByUid(uinf.getUId().intValue(), type, status); |
| | | PageInfo pageInfo = new PageInfo(list); |
| | | return new Response().setII(1, list == null ? false : true, list, "查询自己申请的工单(去除放电计划)"); |
| | | } |
| | | } |