package com.goafanti.organization.service.impl; import com.goafanti.admin.bo.AdminListBo; import com.goafanti.common.dao.DepartmentMapper; import com.goafanti.common.dao.ExpenseConfigDetailsMapper; import com.goafanti.common.dao.TOrderMidMapper; import com.goafanti.common.dao.TOrderNewMapper; import com.goafanti.common.model.Department; import com.goafanti.common.model.ExpenseConfigDetails; import com.goafanti.common.utils.AsyncUtils; import com.goafanti.common.utils.StringUtils; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.organization.bo.DepOut; import com.goafanti.organization.bo.InputDep; import com.goafanti.organization.bo.OrganizationListOut; import com.goafanti.organization.service.OrganizationService; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; @Service public class OrganizationServiceImpl extends BaseMybatisDao implements OrganizationService { @Autowired private DepartmentMapper departmentMapper; @Autowired private ExpenseConfigDetailsMapper expenseConfigDetailsMapper; @Autowired private TOrderNewMapper torderNewMapper; @Autowired private TOrderMidMapper torderMidMapper; @Autowired private AsyncUtils asyncUtils; @Override public Pagination listOrganizationManagement(OrganizationListOut olo, Integer pageNo, Integer pageSize) { /*olo.setCreateId(TokenManager.getAdminId());*/ Map params =disposeParams(olo); @SuppressWarnings("unchecked") Pagination p=(Pagination)findPage("selectOrganizationList","selectOrganizationCount",params,pageNo,pageSize); return p; } private Map disposeParams(OrganizationListOut olo){ Map params = new HashMap(); if(StringUtils.isNotBlank(olo.getId())) params.put("id", olo.getId()); if(StringUtils.isNotBlank(olo.getCreateId())) params.put("createId", olo.getCreateId()); if(StringUtils.isNotBlank(olo.getCreateTime())) params.put("createTime", olo.getCreateTime()); if(StringUtils.isNotBlank(olo.getUpdateTime())) params.put("updateTime", olo.getUpdateTime()); if(StringUtils.isNotBlank(olo.getDeletedSign())) params.put("deletedSign", olo.getDeletedSign()); if(StringUtils.isNotBlank(olo.getName())) params.put("name", olo.getName()); if(StringUtils.isNotBlank(olo.getType())) params.put("type", olo.getType()); if(StringUtils.isNotBlank(olo.getManagerId())) params.put("managerId", olo.getManagerId()); if(StringUtils.isNotBlank(olo.getDepNo())) params.put("depNo", olo.getDepNo()); if(StringUtils.isNotBlank(olo.getSuperId())) params.put("superId", olo.getSuperId()); if(StringUtils.isNotBlank(olo.getRemarks())) params.put("remarks", olo.getRemarks()); if(StringUtils.isNotBlank(olo.getStatus())) params.put("status", olo.getStatus()); return params; } @Override public List selectSuperId(Integer hideSign) { if(hideSign==null){ hideSign=1; } //此处理用于前端不批量改接口 if (hideSign>1){ hideSign=null; } List depList=departmentMapper.selectSuperId(hideSign,null,null); return listSort(depList); } private List listSort(List depList) { HanyuPinyinOutputFormat format=new HanyuPinyinOutputFormat(); Collections.sort(depList, (o1, o2) -> { String str1=null; String str2=null; try { str1= PinyinHelper.toHanYuPinyinString(o1.getName(),format," ",true); str2= PinyinHelper.toHanYuPinyinString(o2.getName(),format," ",true); } catch (BadHanyuPinyinOutputFormatCombination e) { throw new RuntimeException(e); } return str1.compareTo(str2); }); return depList; } @Override public List getAllDep(Integer hideSign) { if(hideSign==null){ hideSign=1; } //此处理用于前端不批量改接口 if (hideSign>1){ hideSign=null; } List allDep=departmentMapper.selectSuperId(hideSign,null,null); List dep1=new ArrayList<>(); Integer x=3;//设置顶级 for (DepOut e : allDep) { if (e.getLvl()==x){ e.setList(selectDepLvl(allDep,e.getId(),x+1)); dep1.add(e); } } return dep1; } private List selectDepLvl(List allDep,String id, Integer i) { List newDep=new ArrayList<>(); for (DepOut depOut : allDep) { if (depOut.getLvl()==i&&depOut.getSuperId().equals(id)){ if (i<7)depOut.setList(selectDepLvl(allDep,depOut.getId(),i+1)); newDep.add(depOut); } } return newDep; } /** * XXIn form 提交 ,bo包中 * xxOut 输出 bo包中 * domain 类 model中 * */ @Override public int addOrganization( String name, String managerId, String type, String superId, String remarks, Integer workingHoursType,Integer hideSign,String depNo) { Department superDep=departmentMapper.selectByPrimaryKey(superId); String id = UUID.randomUUID().toString(); Date now = new Date(); Department dep=new Department(); dep.setId(id); String createId =departmentMapper.selectAdminNameById(TokenManager.getAdminId()); dep.setCreateId(createId); dep.setCreateTime(now); dep.setUpdateTime(now); dep.setDeletedSign(0); dep.setName(name); dep.setLvl(superDep.getLvl()+1); dep.setType(type); dep.setManagerId(managerId); dep.setDepNo(depNo); // superId=departmentMapper.selectIdByName(superId); dep.setSuperId(superId); dep.setRemarks(remarks); dep.setStatus("0"); dep.setHideSign(hideSign); dep.setWorkingHoursType(workingHoursType); departmentMapper.insertSelective(dep); return 1; } private String getMaxDep(Department superDep) { String sdepNo=superDep.getDepNo(); Department maxDep=departmentMapper.selectByDepNo(superDep.getId()); String depNo=new String(); if (maxDep==null){ depNo= sdepNo +"01"; }else { String maxDepNo=maxDep.getDepNo(); Integer countNo=Integer.valueOf(maxDepNo.substring(maxDepNo.length()-2)); countNo++; if (countNo<10){ depNo= sdepNo +"0"+countNo; }else { depNo= sdepNo +countNo; } } return depNo; } @Override public List selectName(String name) { List list=departmentMapper.selectName(name); return list; } @Override public OrganizationListOut selectAllById(String id) { OrganizationListOut olo=departmentMapper.selectAllById(id); List list = expenseConfigDetailsMapper.selectByDepId(id); olo.setExpenseRetrialFinanceExamineList(list.stream().filter(e ->e.getType()==1).collect(Collectors.toList())); olo.setCeoExamineList(list.stream().filter(e ->e.getType()==2).collect(Collectors.toList())); olo.setCfoExamineList(list.stream().filter(e ->e.getType()==3).collect(Collectors.toList())); olo.setViceCeoExamineList(list.stream().filter(e ->e.getType()==4).collect(Collectors.toList())); olo.setCashierExamineList(list.stream().filter(e ->e.getType()==5).collect(Collectors.toList())); olo.setSuperId(departmentMapper.selectNameById(olo.getSuperId())); return olo; } @Override public int deleteById(String id) { departmentMapper.deleteById(id); return 1; } @Override public int updateOrganization(InputDep in) { //获取上级编号 Department superDep=departmentMapper.selectByPrimaryKey(in.getSuperId()); Department useDep = departmentMapper.selectByPrimaryKey(in.getId()); Date now=new Date(); Department dep=new Department(); dep.setLvl(superDep.getLvl()+1); dep.setName(in.getName()); dep.setType(in.getType()); dep.setUpdateTime(now); dep.setManagerId(in.getManagerId()); dep.setStatus(in.getStatus()); dep.setRemarks(in.getRemarks()); dep.setId(in.getId()); dep.setSuperId(in.getSuperId()); dep.setDepNo(in.getDepNo()); dep.setAbbreviation(in.getAbbreviation()); dep.setProvince(in.getProvince()); dep.setHideSign(in.getHideSign()); dep.setWorkingHoursType(in.getWorkingHoursType()); dep.setApproval(in.getApproval()); dep.setApprovalAid(in.getApprovalAid()); //财务与复审切换的时候要切换所有未审核的财务 boolean updateFinance=false; boolean updateRetrialFinance=false; if(StringUtils.isNotBlank(in.getFinanceId())&&!in.getFinanceId().equals(useDep.getFinanceId())){ dep.setFinanceId(in.getFinanceId()); //处理订单 departmentMapper.updateOrderDepFinanceNotExamine(in.getFinanceId(),useDep.getFinanceId()); List list = torderNewMapper.selectByFinanceNotExamine(in.getFinanceId()); if (!list.isEmpty()){ torderNewMapper.updateOrderDepFinanceExamineName(list); } updateFinance=true; } if (StringUtils.isNotBlank(in.getRetrialFinanceId())&& !in.getRetrialFinanceId().equals(useDep.getRetrialFinanceId())){ dep.setRetrialFinanceId(in.getRetrialFinanceId()); departmentMapper.updateOrderDepFinanceNotExamine(in.getRetrialFinanceId(),useDep.getRetrialFinanceId()); List list = torderNewMapper.selectByFinanceNotExamine(in.getRetrialFinanceId()); if (!list.isEmpty()){ torderNewMapper.updateOrderDepFinanceExamineName(list); } updateRetrialFinance=true; } dep.setExpenseFinanceId(in.getExpenseFinanceId()); //获取需要重新刷新的财务 List aids =new ArrayList<>(); if (updateFinance){ if (aids.contains(in.getFinanceId())){ aids.add(in.getFinanceId()); } if(!aids.contains(useDep.getFinanceId())){ aids.add(useDep.getFinanceId()); } torderMidMapper.updateFinanceId(in.getId(),in.getFinanceId()); asyncUtils.updateFinanceExamine(in.getFinanceId()); } if(updateRetrialFinance){ if (aids.contains(in.getRetrialFinanceId())){ aids.add(in.getRetrialFinanceId()); } if(!aids.contains(useDep.getRetrialFinanceId())){ aids.add(useDep.getRetrialFinanceId()); } } // checkFinaceUpdate(aids); if (in.getExpenseRetrialFinanceExamine()==1){ dep.setExpenseRetrialFinanceExamine(in.getExpenseRetrialFinanceExamine()); } if (in.getCeoExamine()==1){ dep.setCeoExamine(in.getCeoExamine()); } if (in.getCfoExamine()==1){ dep.setCfoExamine(in.getCfoExamine()); } if (in.getViceCeoExamine()==1){ dep.setViceCeoExamine(in.getViceCeoExamine()); } if (in.getCashierExamine()==1){ dep.setCashierExamine(in.getCashierExamine()); } int x=departmentMapper.updateByPrimaryKeySelective(dep); return x; } /** * 如果更换了负责人刷新中间表 */ private void checkFinaceUpdate(List aids) { asyncUtils.financeCoutSwitch(aids); } @Override public boolean checkDepNo(String depNo,Integer type) { String useDepNo=departmentMapper.selectIdByDepNo(depNo); if (StringUtils.isNotBlank(useDepNo)){ if (type==1){ if (!depNo.equals(useDepNo)){ return false; }else { return true; } }else { return true; } } return false; } private String countDepNo(String sdepNo, Integer count) { String dep=null; if(count<10){ dep=sdepNo+"0"+count; String sid=departmentMapper.selectIdByDepNo(dep); while(sid!=null){ count=(count+1)%100; if(count>=10){ dep=sdepNo+count; }else{ dep=sdepNo+"0"+count; } sid=departmentMapper.selectIdByDepNo(dep); } }else if(count>=10){ dep=sdepNo+count; String sid=departmentMapper.selectIdByDepNo(dep); while(sid!=null){ count=(count+1)%100; dep=sdepNo+count; sid=departmentMapper.selectIdByDepNo(dep); } } return dep; } private void updateLowerLevelNo(String id,String depNo,Integer lvl) { List Nos =departmentMapper.selectIDNBySuperId(id); int i=1; for (OrganizationListOut o : Nos) { o.setLvl(lvl+1); if(i<10){ String dep=depNo+"0"+i; if(i>=10){ dep=depNo+i; }else{ dep=depNo+"0"+i; } o.setDepNo(dep); } else if(i>=10){ String dep=depNo+i; dep=depNo+i; o.setDepNo(dep); } departmentMapper.updateByNumber(o); updateLowerLevelNo(o.getId(),o.getDepNo(),o.getLvl()); i++; } } }