Java基于springboot办公OA管理系统源码

JavaOa系统

Springboot OA源码

代码下载地址

https://download.csdn.net/download/zhou9898/85243858https://download.csdn.net/download/zhou9898/85243858

发展历史

早在20世纪90年代,国外就开始了对办公自动化设计的探索。并且设计了一个简单的自动化体系,虽然当时该体系十分简单但是却直接掀起了人们对自动化办公的探索之路。

办公自动化理论与技术的研究兴起于20世纪70年代末期的美、英、日等经济发达、科技领先的国家,其中,美国是推行办公自动化最早的国家之一,其办公自动化发展历程可分为四个阶段:一是1975年前的单机设备阶段,以采用单机设备、完成单项工作为目标,这一阶段的办公自动化技术又被称为“秘书级别”;二是1975年-1982年的局域网阶段,通过采用专用交换机、局域网等部分综合设备,将很多单机设备融入到局域网络中,进而实现数据和设备的共享,这一阶段的办公自动化技术又被称为“主任级别”;三是1983年-1990年的一体化阶段,采用数据、文字、声音、图像等多媒体信息,通过广域网作为传输、处理、存储手段,这一阶段的办公自动化技术又被称为“决策级别”;四是1990年以后的多媒体信息传输阶段,将语音、图像、音视频等技术更好地运用到办公自动化系统中,实现更加先进的办公自动化。

技术栈:

OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,
mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,
集成了jpa、mybatis等框架。作为初学springboot的同学是一个很不错的项目,
如果想在此基础上面进行OA的增强,也是一个不错的方案。
 

功能列表

系统管理
用户管理
角色列表
考勤管理
流程管理
公告管理
邮件管理
任务管理
日程管理
工作计划
文件管理
笔记管理
讨论区
菜单管理
类型管理
状态管理
部门管理
职位管理
用户管理
在线用户
角色列表
考勤管理
考勤周报表
考勤月报表
我的申请
流程审核
通知管理
通知列表
账号管理
邮件管理
任务管理
我的任务
日程管理
我的日历
计划管理
计划报表
文件管理
笔记管理
通讯录
通讯录
我的管理
讨论区列表
考勤列表

超级管理员
新建流程

package cn.gson.oasys;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class OasysApplication {

	public static void main(String[] args) {
		SpringApplication.run(OasysApplication.class, args);
	}
}

package cn.gson.oasys.controller.attendce;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.ibatis.annotations.Param;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import ch.qos.logback.core.joran.action.IADataForComplexProperty;
import ch.qos.logback.core.net.SyslogOutputStream;
import cn.gson.oasys.common.StringtoDate;
import cn.gson.oasys.model.dao.attendcedao.AttendceDao;
import cn.gson.oasys.model.dao.attendcedao.AttendceService;
import cn.gson.oasys.model.dao.system.StatusDao;
import cn.gson.oasys.model.dao.system.TypeDao;
import cn.gson.oasys.model.dao.user.UserDao;
import cn.gson.oasys.model.dao.user.UserService;
import cn.gson.oasys.model.entity.attendce.Attends;
import cn.gson.oasys.model.entity.system.SystemStatusList;
import cn.gson.oasys.model.entity.system.SystemTypeList;
import cn.gson.oasys.model.entity.user.User;

@Controller
@RequestMapping("/")
public class AttendceController {

	Logger log = LoggerFactory.getLogger(getClass());

	@Autowired
	AttendceDao attenceDao;
	@Autowired
	AttendceService attendceService;
	@Autowired
	UserDao uDao;
	@Autowired
	UserService userService;
	@Autowired
	TypeDao typeDao;
	@Autowired
	StatusDao statusDao;

	List<Attends> alist;
	List<User> uList;
    Date start,end;
    String month_;
	// 格式转化导入
	DefaultConversionService service = new DefaultConversionService();

	// 考勤 前面的签到
	@RequestMapping("singin")
	public String Datag(HttpSession session, Model model, HttpServletRequest request) throws InterruptedException, UnknownHostException {
		//首先获取ip
		InetAddress ia=null;
		ia=ia.getLocalHost();
		String attendip=ia.getHostAddress();
		// 时间规范
		String start = "08:00:00", end = "17:00:00";
		service.addConverter(new StringtoDate());
		// 状态默认是正常
		long typeId, statusId = 10;
		Attends attends = null;
		Long userId = Long.parseLong(session.getAttribute("userId") + "");
		User user = uDao.findOne(userId);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = new Date();
		String nowdate = sdf.format(date);
		// 星期 判断该日期是星期几
		SimpleDateFormat sdf3 = new SimpleDateFormat("EEEE");
		// 截取时分
		SimpleDateFormat sdf4 = new SimpleDateFormat("HH:mm");
		// 截取时分秒
		SimpleDateFormat sdf5 = new SimpleDateFormat("HH:mm:ss");

		// 一周当中的星期几
		String weekofday = sdf3.format(date);
		// 时分
		String hourmin = sdf4.format(date);

		// 时分秒
		String hourminsec = sdf5.format(date);
		//System.out.println("星期" + weekofday + "时分" + hourmin + "时分秒" + hourminsec);
		//System.out.println(date);
		Long aid = null;

		// 查找用户当天的所有记录
		Integer count = attenceDao.countrecord(nowdate, userId);
		if (hourminsec.compareTo(end) > 0) {
			// 在17之后签到无效
			System.out.println("----不能签到");
			model.addAttribute("error", "1");
		}
		if(hourminsec.compareTo("05:00:00") <0){
			//在凌晨5点之前不能签到
			System.out.println("----不能签到");
			model.addAttribute("error", "2");
		}
		else if((hourminsec.compareTo("05:00:00") >0)&&(hourminsec.compareTo(end) <0)){
		// 明确一点就是一个用户一天只能产生两条记录
		if (count == 0) {
			  if (hourminsec.compareTo(end) < 0) {
				// 没有找到当天的记录就表示此次点击是上班 就是用来判断该记录的类型
				// 上班id8
				typeId = 8;
				// 上班就只有迟到和正常
				if (hourminsec.compareTo(start) > 0) {
					// 迟于规定时间 迟到
					statusId = 11;
				} else if (hourminsec.compareTo(start) < 0) {
					statusId = 10;
				}
				attends = new Attends(typeId, statusId, date, hourmin, weekofday, attendip, user);
				attenceDao.save(attends);
			}
		}
		if (count == 1) {
			// 找到当天的一条记录就表示此次点击是下班
			// 下班id9
			typeId = 9;
			// 下班就只有早退和正常
			if (hourminsec.compareTo(end) > 0) {
				// 在规定时间晚下班正常
				statusId = 10;
			} else if (hourminsec.compareTo(end) < 0) {
				// 在规定时间早下班早退
				statusId = 12;
			}
			attends = new Attends(typeId, statusId, date, hourmin, weekofday, attendip, user);
			attenceDao.save(attends);
		}
		if (count >= 2) {
			// 已经是下班的状态了 大于2就是修改考勤时间了
			// 下班id9
			if (hourminsec.compareTo(end) > 0) { // 最进一次签到在规定时间晚下班正常
				statusId = 10;
			} else if (hourminsec.compareTo(end) < 0) {
				// 最进一次签到在规定时间早下班早退
				statusId = 12;
			}
			aid = attenceDao.findoffworkid(nowdate, userId);
			Attends attends2=attenceDao.findOne(aid);
			attends2.setAttendsIp(attendip);
			attenceDao.save(attends2);
			attendceService.updatetime(date, hourmin, statusId, aid);
			Attends aList = attenceDao.findlastest(nowdate, userId);
		}
		}
		// 显示用户当天最新的记录
		Attends aList = attenceDao.findlastest(nowdate, userId);
		if (aList != null) {
			String type = typeDao.findname(aList.getTypeId());
			model.addAttribute("type", type);
		}
		model.addAttribute("alist", aList);
		return "systemcontrol/signin";
	}

	// 考情列表 给单个用户使用
	@RequestMapping(value="attendcelist",method=RequestMethod.GET)
	public String test(HttpServletRequest request,  Model model,HttpSession session,
			@RequestParam(value = "page", defaultValue = "0") int page,
			@RequestParam(value = "baseKey", required = false) String baseKey,
			@RequestParam(value = "type", required = false) String type,
			@RequestParam(value = "status", required = false) String status,
			@RequestParam(value = "time", required = false) String time,
			@RequestParam(value = "icon", required = false) String icon) {
		signsortpaging(request, model, session, page, null, type, status, time, icon);
		return "attendce/attendcelist";
	}

	@RequestMapping(value="attendcelisttable",method=RequestMethod.GET)
	public String testdf(HttpServletRequest request,  Model model,HttpSession session,
			@RequestParam(value = "page", defaultValue = "0") int page,
			@RequestParam(value = "baseKey", required = false) String baseKey,
			@RequestParam(value = "type", required = false) String type,
			@RequestParam(value = "status", required = false) String status,
			@RequestParam(value = "time", required = false) String time,
			@RequestParam(value = "icon", required = false) String icon) {
		signsortpaging(request, model, session, page, baseKey, type, status, time, icon);
		return "attendce/attendcelisttable";
	}

	
    // 考勤管理某个管理员下面的所有员工的信息
	@RequestMapping("attendceatt")
	public String testdasf(HttpServletRequest request, HttpSession session,
			@RequestParam(value = "page", defaultValue = "0") int page,
			@RequestParam(value = "baseKey", required = false) String baseKey,
			@RequestParam(value = "type", required = false) String type,
			@RequestParam(value = "status", required = false) String status,
			@RequestParam(value = "time", required = false) String time,
			@RequestParam(value = "icon", required = false) String icon,Model model) {
		allsortpaging(request, session, page, baseKey, type, status, time, icon, model);
		return "attendce/attendceview";
	}

	// 分頁分页
	@RequestMapping("attendcetable")
	public String table(HttpServletRequest request, HttpSession session,
			@RequestParam(value = "page", defaultValue = "0") int page,
			@RequestParam(value = "baseKey", required = false) String baseKey,
			@RequestParam(value = "type", required = false) String type,
			@RequestParam(value = "status", required = false) String status,
			@RequestParam(value = "time", required = false) String time,
			@RequestParam(value = "icon", required = false) String icon,Model model) {
		allsortpaging(request, session, page, baseKey, type, status, time, icon, model);
		return "attendce/attendcetable";
	}

	

	

	// 删除
	@RequestMapping("attdelete")
	public String dsfa(HttpServletRequest request, HttpSession session) {
		long aid = Long.valueOf(request.getParameter("aid"));
		attendceService.delete(aid);
		return "redirect:/attendceatt";
	}

	// 月报表
	@RequestMapping("attendcemonth")
	public String test2(HttpServletRequest request, Model model, HttpSession session,
			@RequestParam(value = "page", defaultValue = "0") int page,
			@RequestParam(value = "baseKey", required = false) String baseKey) {
		monthtablepaging(request, model, session, page, baseKey);
		return "attendce/monthtable";
	}

	@RequestMapping("realmonthtable")
	public String dfshe(HttpServletRequest request, Model model, HttpSession session,
			@RequestParam(value = "page", defaultValue = "0") int page,
			@RequestParam(value = "baseKey", required = false) String baseKey) {
		monthtablepaging(request, model, session, page, baseKey);
		return "attendce/realmonthtable";
	}

	

	// 周报表
	@RequestMapping("attendceweek")
	public String test3(HttpServletRequest request, HttpSession session,
			@RequestParam(value = "page", defaultValue = "0") int page,
			@RequestParam(value = "baseKey", required = false) String baseKey) {
		weektablepaging(request, session, page, baseKey);
		return "attendce/weektable";
	}

	@RequestMapping("realweektable")
	public String dsaf(HttpServletRequest request, HttpSession session,
			@RequestParam(value = "page", defaultValue = "0") int page,
			@RequestParam(value = "baseKey", required = false) String baseKey) {
		weektablepaging(request, session, page, baseKey);
		return "attendce/realweektable";

	}

	

	@RequestMapping("attendceedit")
	public String test4(@Param("aid") String aid, Model model,HttpServletRequest request, HttpSession session) {
		Long userid = Long.valueOf(session.getAttribute("userId") + "");
		if (aid == null) {
			model.addAttribute("write", 0);
		} else if (aid != null) {
			long id = Long.valueOf(aid);
			Attends attends = attenceDao.findOne(id);
			model.addAttribute("write", 1);
			model.addAttribute("attends", attends);
		}
		typestatus(request);
		return "attendce/attendceedit";
	}

	@RequestMapping("attendceedit2")
	public String DSAGen(HttpServletRequest request) {
		long id = Long.valueOf(request.getParameter("id"));
		Attends attends = attenceDao.findOne(id);
		request.setAttribute("attends", attends);
		typestatus(request);
		return "attendce/attendceedit2";
	}

	@RequestMapping(value = "attendcesave", method = RequestMethod.GET)
	public void Datadf() {
	}

	// 修改保存
	@RequestMapping(value = "attendcesave", method = RequestMethod.POST)
	public String test4(Model model, HttpSession session, HttpServletRequest request) {
		Long userid = Long.parseLong(session.getAttribute("userId") + "");
		String remark = request.getParameter("remark");
		String statusname=request.getParameter("status");
		SystemStatusList statusList=  statusDao.findByStatusModelAndStatusName("aoa_attends_list", statusname);
		long id = Long.parseLong(request.getParameter("id"));
		Attends attends=attenceDao.findOne(id);
		attends.setAttendsRemark(remark);
		attends.setStatusId(statusList.getStatusId());
		attenceDao.save(attends);
		//attendceService.updatereamrk(remark, id);
		return "redirect:/attendceatt";
	}

	// 状态类型方法
	private void typestatus(HttpServletRequest request) {
		List<SystemTypeList> type = (List<SystemTypeList>) typeDao.findByTypeModel("aoa_attends_list");
		List<SystemStatusList> status = (List<SystemStatusList>) statusDao.findByStatusModel("aoa_attends_list");
		request.setAttribute("typelist", type);
		request.setAttribute("statuslist", status);
	}

	
	public void setSomething(String baseKey, Object type, Object status, Object time, Object icon, Model model) {
		if(!StringUtils.isEmpty(icon)){
			model.addAttribute("icon", icon);
			if(!StringUtils.isEmpty(type)){
				model.addAttribute("type", type);
				if("1".equals(type)){
					model.addAttribute("sort", "&type=1&icon="+icon);
				}else{
					model.addAttribute("sort", "&type=0&icon="+icon);
				}
			}
			if(!StringUtils.isEmpty(status)){
				model.addAttribute("status", status);
				if("1".equals(status)){
					model.addAttribute("sort", "&status=1&icon="+icon);
				}else{
					model.addAttribute("sort", "&status=0&icon="+icon);
				}
			}
			if(!StringUtils.isEmpty(time)){
				model.addAttribute("time", time);
				if("1".equals(time)){
					model.addAttribute("sort", "&time=1&icon="+icon);
				}else{
					model.addAttribute("sort", "&time=0&icon="+icon);
				}
			}
		}
		if(!StringUtils.isEmpty(baseKey)){
			model.addAttribute("sort", "&baseKey="+baseKey);
		}
	}
	//单个用户的排序和分页
	private void signsortpaging(HttpServletRequest request, Model model, HttpSession session, int page, String baseKey,
			String type, String status, String time, String icon) {
		Long userid = Long.valueOf(session.getAttribute("userId") + "");
		setSomething(baseKey, type, status, time, icon, model);
		Page<Attends> page2 = attendceService.singlepage(page, baseKey, userid,type, status, time);
		typestatus(request);
		request.setAttribute("alist", page2.getContent());
		for (Attends attends :page2.getContent()) {
			System.out.println(attends);
		}
		request.setAttribute("page", page2);
		request.setAttribute("url", "attendcelisttable");
	}
	//该管理下面的所有用户
	private void allsortpaging(HttpServletRequest request, HttpSession session, int page, String baseKey, String type,
			String status, String time, String icon, Model model) {
		setSomething(baseKey, type, status, time, icon, model);
		Long userId = Long.parseLong(session.getAttribute("userId") + "");
		List<Long> ids = new ArrayList<>();
		List<User> users = uDao.findByFatherId(userId);
		for (User user : users) {
			ids.add(user.getUserId());
		}
		if (ids.size() == 0) {
			ids.add(0L);
		}
		User user = uDao.findOne(userId);
		typestatus(request);
		Page<Attends> page2 = attendceService.paging(page, baseKey, ids,type, status, time);
		request.setAttribute("alist", page2.getContent());
		request.setAttribute("page", page2);
		request.setAttribute("url", "attendcetable");
	}
	
	//周报表分页
	private void weektablepaging(HttpServletRequest request, HttpSession session, int page, String baseKey) {
		String starttime = request.getParameter("starttime");
		String endtime = request.getParameter("endtime");
		// 格式转化
		service.addConverter(new StringtoDate());
		Date startdate = service.convert(starttime, Date.class);
		Date enddate = service.convert(endtime, Date.class);
		
		//用来查找该用户下面管理的所有用户信息
		Long userId = Long.parseLong(session.getAttribute("userId") + "");
		List<Long> ids = new ArrayList<>();
		Page<User> userspage =userService.findmyemployuser(page, baseKey, userId);
		for (User user : userspage) {
			ids.add(user.getUserId());
		}
		if (ids.size() == 0) {
			ids.add(0L);
		}
		
		//找到某个管理员下面的所有用户的信息 保证传过来的是正确的数据 分页之后可以使用全局变量来记住开始和结束日期
		if(startdate!=null&&enddate!=null)
			{start=startdate;end=enddate;}
		if(startdate==null&&enddate==null)
			startdate=start;enddate=end;
			System.out.println("再次获取"+startdate+"结束"+enddate);
		List<Attends> alist = attenceDao.findoneweek(startdate, enddate, ids);
		Set<Attends> attenceset = new HashSet<>();
		for (User user : userspage) {
			for (Attends attence : alist) {
				if (Objects.equals(attence.getUser().getUserId(), user.getUserId())) {
					attenceset.add(attence);
				}
			}
			user.setaSet(attenceset);
		}
		String[] weekday = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
		request.setAttribute("ulist", userspage.getContent());
		request.setAttribute("page", userspage);
		request.setAttribute("weekday", weekday);
		request.setAttribute("url", "realweektable");
	}
	//月报表
	private void monthtablepaging(HttpServletRequest request, Model model, HttpSession session, int page,
			String baseKey) {
		Integer offnum,toworknum;
		Long userId = Long.parseLong(session.getAttribute("userId") + "");
		List<Long> ids = new ArrayList<>();
		Page<User> userspage =userService.findmyemployuser(page, baseKey, userId);
		for (User user : userspage) {
			ids.add(user.getUserId());
		}
		if (ids.size() == 0) {
			ids.add(0L);
		}
		String month = request.getParameter("month");
		
		if(month!=null)
			month_=month;
		else
			month=month_;
		
		Map<String, List<Integer>> uMap = new HashMap<>();
		List<Integer> result = null;
		
		for (User user : userspage) {
			result = new ArrayList<>();
			//当月该用户下班次数
			offnum=attenceDao.countoffwork(month, user.getUserId());
			//当月该用户上班次数
			toworknum=attenceDao.counttowork(month, user.getUserId());
			for (long statusId = 10; statusId < 13; statusId++) {
				//这里面记录了正常迟到早退等状态
				if(statusId==12)
					result.add(attenceDao.countnum(month, statusId, user.getUserId())+toworknum-offnum);
				else
				result.add(attenceDao.countnum(month, statusId, user.getUserId()));
			}
			//添加请假和出差的记录//应该是查找 使用sql的sum()函数来统计出差和请假的次数
			System.out.println("请假天数"+attenceDao.countothernum(month, 46L, user.getUserId()));
			if(attenceDao.countothernum(month, 46L, user.getUserId())!=null)
			result.add(attenceDao.countothernum(month, 46L, user.getUserId()));
			else
				result.add(0);
			if(attenceDao.countothernum(month, 47L, user.getUserId())!=null)
			result.add(attenceDao.countothernum(month, 47L, user.getUserId()));
			else
				result.add(0);
			//这里记录了旷工的次数 还有请假天数没有记录 旷工次数=30-8-请假次数-某天签到次数
			//这里还有请假天数没有写
			Date date=new Date();
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM");
			String date_month=sdf.format(date);
			if(month!=null){
				if(month.compareTo(date_month)>=0)
					result.add(0);
				else
				result.add(30-8-offnum);
			}
			
			uMap.put(user.getUserName(), result);
		}
		model.addAttribute("uMap", uMap);
		model.addAttribute("ulist", userspage.getContent());
		model.addAttribute("page", userspage);
		model.addAttribute("url", "realmonthtable");
	}
}

 

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
本系统集:OA,HR,CRM,于一身。 OA部分: 个人办公:内部邮件、Internet邮件、短信息、手机短信、公告通知、新闻、投票、个人考勤、日程安排、工作日志、工作汇报、通讯录、个人文件柜、控制面板 工作流:印章管理、表单定义 、工作流管理(支持复制,WEB印章等强化应用)、新建工作、待办工作、工作查询、工作监控、归档工作、委托设置 综合行政:公告通知管理、新闻管理、物品管理、固定资产管理、图书管理、会议管理、车辆管理、组织机构信息 信息交流:内部消息、内部邮件、外部邮件、内部讨论区、互动聊天、网络硬盘、投票管理、文件传阅 、手机短信管理 人力资源管理:人事档案、考勤批示、考勤统计、薪资管理、培训记录 、奖惩记录、基础设置 销售管理:客户管理、客户忠诚度管理、产品信息、销售管理、供应商管理、统计分析、基础数据设置 项目管理:项目创建、项目浏览、项目公告、项目进度、项目资源、项目预算、任务计划、项目外包、项目利润、费用报销、报销管理、数据字典 档案管理:卷库管理、案卷管理、文件管理 、案卷借阅(案卷借阅,借阅审批)、档案统计 (借阅统计,案卷统计) 、档案销毁 知识管理:知识大类、知识小类、我的知识、知识排行、知识地图、知识检索、知识互动、知识审批、知识管理员 附件管理:万年历 、世界时间 、常用网址浏览、邮编区号、日常查询 系统管理:印章管理、红头文件管理、用户管理 、角色管理 、部门管理、职位管理、附件类型、系统日志、手机短信管理组织机构设置:包含单位管理、部门管理、用户管理、角色与权限管理 其他:工作台设置,在线人员(组织结构模式),全部人员(组织结构模式) HR人力资源部分 机构管理:分级树形管理模式,部门编制数,岗位编制数等 招聘管理:需求征集(工作流),招聘计划(工作流),招聘初选(登记),招聘面试(登记),人员录用,人才储备, 基础数据设置 人事资料: 1.人事档案:人事管理(基本信息,个人简历,学习经历,工作经历,社会关系,职称评定,执业资格) 查看明细包括(基本信息,个人简历,学习经历,工作经历,社会关系,职称评定,执业资格,证照资料,合同信息,保险记录,调动情况,奖惩情况,培训课程,培训考勤,考核记录),导入数据,生日查询,人事统计分析,部门编制分析。 群发手机短信 2.合同管理:合同信息管理,合同变更,合同续签,员工转正,合同信息报表 3.人事调动:员工调动,员工离职,员工复职,人员流动分析,离职人员分析 4.员工奖惩:奖惩管理,奖惩分析,奖惩报表。 5.证照管理:证照管理,证照分析 6.职称评定:职称管理,职称分析 7.基础数据设置 培训管理:培训计划,培训考勤,培训机构,培训课件,培训费用,培训绩效,培训协议,基础数据设置 考勤管理:考勤记录采集(采集进考勤记录),考勤记录,出勤管理,休假管理,加班管理,统计查询报表 绩效考核:考核类型,考核期间,考核等级,考核信息,考核查询,考核报表,考核统计分析 薪资福利:个人所得税 ,社会保险,计件工资,计时工资.,提成工资,工资计算,工资帐套管理,工资统计分析 企业文化:单位企业介绍,单位信息发布,劳动法规及政策, 基础数据设置 系统管理:用户管理,角色管理,附件类型,系统日志,数据备份还原,备份还原设置 系统提醒:系统提醒:正式合同到期,试用合同到期,保险到期,员工生日,证照到期,职称申报,招聘计划开始,需求计划开始,培训计划开始。 系统管理 CRM客户关系管理部分 客户管理:检测客户、我的客户、共享客户、客户联系人、客户关怀、工作报告、我的客户、回收站 客户监控:允许监控的客户、客户联系人、客户关怀、工作报告浏览、 客户转移 客户跟踪:待办事宜、交往记录、销售机会、报价记录、竞争对手、销售费用 客户跟踪监控:待办事宜、交往记录、销售机会、报价记录、竞争对手、销售费用 合同定单:合同/订单、交付计划 、交付记录 、回款计划 、回款记录 、开票记录 、销售出库 合同/订单监控:合同/订单、交付计划 、交付记录 、回款计划 、回款记录 、开票记录 、销售出库 客户服务:客服控制台 、QA库管理 、投诉处理 、客服记录 、客服数据显示方案 采购管理:采购订单 、交付计划 、交付记录 、付款计划 、付款记录 、付款发票 、采购入库 采购监控:采购订单 、交付计划 、交付记录 、付款计划 、付款记录 、付款发票 、采购入库 库存管理:库存列表 入库单 :采购入库、直接入库 ; 出库单 :销售出库、直接出库库存盘点、库间调拨、报损单、报溢单、仓库设置、库存初始化/清空/清零、库存流水账 市场管理:市场活动 、广告发布 、印刷品管理 印刷品管理 :印刷品领用 礼品管理 :礼品管理 、礼品领用 供应商:供应商管理 、联系人管理 财务管理:应收款 、应付款 、已收款 、已付款 、收款发票 、付款发票 、费用报销 统计分析 客户管理:客户种类 、客户行业 、客户关系等级、客户人员规模 、客户来源 、客户阶段 、客户价值评估 、客户信用等级 、 客户拥有人 、客户创建数量人员/月度统计 、客户创建数量种类/月度统计 、大客户top20(合同额) 、大客户top20(回款额) 销售跟踪 :交往记录类型 、交往记录人员/月度统计 、客户交往记录top10 、报价记录人员/月度统计 、销售机会月份统计 、 销售机会负责人分布 、负责人/机会状态统计 、负责人/机会阶段统计 、 机会来源分布 、机会可能性分布 、机会状态分布 、机会阶段分布 、预计签单月份统计 合同/订单:合同订单状态分布 、合同订单状态/金额分布 、合同订单拥有者/状态分布 、合同订单签约时间统计 、合同订单签约金额月份统计 、合同订单签约金额人员分布 、合同订单签约金额人员/月度统计 、合同订单签约数量人员/月度统计 、合同订单未尽收款金额按签约月份统计 、合同订单类型分布 、合同订单签约金额类型分布 、 回款月度统计 、 回款人员/月度统计 、回款分类/月度统计 、回款人员分布 、回款付款方式统计 、回款分类统计、回款计划月度统计 、回款计划人员/月度统计 、开票类型/月度统计 售后服务:投诉月度统计 、投诉紧急程度/月度统计 、投诉处理结果/月度统计 、客户投诉次数top10 、投诉类型分布 、客服类型分布、客服方式分布 、客服状态分布 、客服月度统计 、 客服类型/月度统计 、 客服方式/月度统计 、 客服状态/月度统计 、客服次数top10 采购管理:采购单数量分类分布 、采购单金额分类统计 、月度采购单数量 、月度采购单金额 、人员采购单数量 、人员采购单金额 、采购单数量人员/月度统计 、采购单金额人员/月度统计 、采购发票月度统计 、 付款月度统计 、付款人员/月度统计 、付款分类/月度统计 、付款人员分布 、付款方式统计 、付款分类统计 、付款计划月度统计 、付款计划人员/月度统计 费用管理:月度费用申报统计 、月度通过审核费用统计 、月度费用人员统计(通过审核) 、费用类别分布(通过审核) 、费用类别统计(通过审核) 、人员/费用类型统计(通过审核) 、客户费用(通过审核)top20 市场管理 :市场活动类型分布 、市场活动类型/月度分析 、广告媒体类型分布 库存管理:库存流水产品数量分布 、库存流水月度统计 系统管理 用户管理、角色管理 、 组织机构 、职位管理 、 系统日志 、产品设置 、监控设置 数据备份还原:数据备份 、数据还原 备份还原设置:备份数据库 、备份存放路径 手机短信:已发送短信 、等待发送短信 、发送失败短信 、接收短信 数据字典:客户种类 、客户行业 、客户关系等级 、客户人员规模 、客户来源 、客户阶段 、 联系人分类 、客户关怀类型 、待办事宜类型 、交往记录类型 、销售机会来源 、 销售机会阶段 、竞争对手能力 、销售费用类、付款方式 、 合同订单分类 、 采购分类 、回款记录分类 、票据类型 、QA库分类 、 投诉处理分类 、 服务类型 、服务方式 、市场活动类型 、广告投放类型 、供应商所属分类 、供应商信用等级 、 直接入库类型 、直接出库类型 其他 工作台设置,在线人员(组织结构模式),全部人员(组织结构模式)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑石课堂

请给我打钱!!!谢谢,不客气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值