LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

钉钉考勤接口调用与OA系统数据对接

admin
2020年4月27日 17:45 本文热度 3530
公司由原来的指纹打卡更换为钉钉打卡,需要钉钉和现有的OA考勤数据对接(合并钉钉打卡数据和OA上的请假,外出,出差数据)

1.查看钉钉接口文档


2.项目搭建引入钉钉开发SDK


3.获取钉钉考勤数据存储服务器数据库(调整存储格式)
//测试
public static void main(String[] args) throws Exception {
Date date = new Date();
DateFormat format_getHours = new SimpleDateFormat(“HH:mm:ss”);
String currentDate = new SimpleDateFormat(“yyyy-MM-dd”).format(date);
String yesterday = getPreDayOrAfterDay(currentDate, -1);
String workDateFrom = yesterday + " " + “01:00:00”;
String workDateTo = yesterday + " " + “23:00:00”;
//新逻辑
List asList = Arrays.asList(“1”,“2”,“3”);
List Attendances = new ArrayList();
for (int i = 0; i < asList.size(); i++) {
Attendance Attendance = new Attendance();
Attendance.setUserId(asList.get(i));
JSONObject getuserinfo = getuserinfo(asList.get(i));//获取用户详情
String name = getuserinfo.getString(“name”);//姓名
Attendance.setName(name);
JSONArray departmentid = getuserinfo.getJSONArray(“department”);//部门id
Attendance.setDepartment(getdepartment(departmentid.getString(0)));//获取部门名称
Attendance.setAttendanceTime(yesterday);//设置打卡时间
JSONObject Json = getattendance(asList.get(i),workDateFrom,workDateTo);//获取打卡结果
JSONArray recordresult = Json.getJSONArray(“recordresult”);
for (int j = 0; j < recordresult.size(); j++) {
JSONObject record = recordresult.getJSONObject(j);
String checkType = record.getString(“checkType”);//上下班
String locationResult = record.getString(“locationResult”);//位置结果
if (null!=locationResult) {
switch (locationResult) {
case “Normal”:
locationResult=DingConstant.locationResult_Normal;
break;
case “Outside”:
locationResult=DingConstant.locationResult_Outside;
break;
case “NotSigned”:
locationResult=DingConstant.locationResult_NotSigned;
break;
}
}

          String timeResult = record.getString("timeResult");//打卡结果
          if (null!=timeResult) {
        switch (timeResult) {
  case "Normal":
  timeResult=DingConstant.timeResult_Normal;
  break;
  case "Early":
  timeResult=DingConstant.timeResult_Early;
  break;
  case "Late":
  timeResult=DingConstant.timeResult_Late;
  case "NotSigned":
  timeResult=DingConstant.timeResult_NotSigned;
  break;
  }
          }
          String userCheckTime = getHours(record.getString("userCheckTime"));//打卡时间
          String onDuty1checkTime = Attendance.getOnDuty1checkTime();
          String onDuty1checkResult = Attendance.getOnDuty1checkResult();
          String offDuty1checkResult = Attendance.getOffDuty1checkResult();
          String offDuty1checkTime = Attendance.getOffDuty1checkTime();
          String offDuty2checkResult = Attendance.getOffDuty2checkResult();
          String offDuty2checkTime = Attendance.getOffDuty2checkTime();
          String onDuty2checkResult = Attendance.getOnDuty2checkResult();
          String onDuty2checkTime = Attendance.getOnDuty2checkTime();
          if (checkType!=null) {
          if (checkType.equals("OnDuty")) {
          if (null==onDuty1checkTime&&null==onDuty1checkResult) {
              Attendance.setOnDuty1checkTime(userCheckTime);
              if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
              Attendance.setOnDuty1checkResult(locationResult);           
              }else {
              Attendance.setOnDuty1checkResult(timeResult);           
              }
              continue;
              }else if (null==onDuty2checkTime&&null==onDuty2checkResult) {
              if (format_getHours.parse(userCheckTime).getTime()<format_getHours.parse(onDuty1checkTime).getTime()) {
              Attendance.setOnDuty2checkTime(onDuty1checkTime);
              Attendance.setOnDuty2checkResult(onDuty1checkResult);           
              Attendance.setOnDuty1checkTime(userCheckTime);
              if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
 
              Attendance.setOnDuty1checkResult(locationResult);           
              }else {
              Attendance.setOnDuty1checkResult(timeResult);           
              }
              }else {
              Attendance.setOnDuty2checkTime(userCheckTime);
              if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
              Attendance.setOnDuty2checkResult(locationResult);           
              }else {
              Attendance.setOnDuty2checkResult(timeResult);           
              }
              }
              continue;
              }
          }else if (checkType.equals("OffDuty")) {
          if (null==offDuty1checkTime&&null==offDuty1checkResult) {
              Attendance.setOffDuty1checkTime(userCheckTime);
              if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
              Attendance.setOffDuty1checkResult(locationResult);           
              }else {
              Attendance.setOffDuty1checkResult(timeResult);           
              }
              continue;
              }else if (null==offDuty2checkTime&&null==offDuty2checkResult) {
              if (format_getHours.parse(userCheckTime).getTime()<format_getHours.parse(offDuty1checkTime).getTime()) {
              Attendance.setOffDuty2checkTime(offDuty1checkTime);
              Attendance.setOffDuty2checkResult(offDuty1checkResult);           
              Attendance.setOffDuty1checkTime(userCheckTime);
              if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
              Attendance.setOffDuty1checkResult(locationResult);           
              }else {
              Attendance.setOffDuty1checkResult(timeResult);           
              }
              }else {
              Attendance.setOffDuty2checkTime(userCheckTime);
              if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) {
              Attendance.setOffDuty2checkResult(locationResult);           
              }else {
              Attendance.setOffDuty2checkResult(timeResult);           
              }
              }
              continue;
              }
          }
          }
          
          }
          System.out.println(Attendance.toString());
          Attendances.add(Attendance);
  }
}

4.合并OA数据
public void run() {
try {
AttendanceService attendanceService = (AttendanceService) ApplicationContextUtil.getBean(“attendanceService”);
OaLeaveService oaLeaveService = (OaLeaveService) ApplicationContextUtil.getBean(“oaLeaveService”);
OaYearLeaveService oaYearLeaveService = (OaYearLeaveService) ApplicationContextUtil.getBean(“oaYearLeaveService”);
OaBusinessService oaBusinessService = (OaBusinessService) ApplicationContextUtil.getBean(“oaBusinessService”);
OaGooutService oaGooutService = (OaGooutService) ApplicationContextUtil.getBean(“oaGooutService”);
UserService userService = (UserService) ApplicationContextUtil.getBean(“userService”);

List<UserBean> list = userService.getuserlist();
String flow_data=null;
//更新oa信息
for (int i = 0; i < list.size(); i++) {
UserBean userBean = list.get(i);
String oa_id = userBean.getUser_account();//OAID
String ding_id = userBean.getDing_id();//dingdingID
String user_name = userBean.getUser_name();
//判断是否有OA账号
if (null!=ding_id) {
if (null==oa_id) {
continue;
}else {
//取OA未记录数据
Map<String, Object> oaLeaveMap = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_507", "批准", "''"+"2019-08-01"+"''", "", 1, 5);
Map<String, Object> oaLeaveMap1 = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_508", "批准", "''"+"2019-08-01"+"''", "", 1, 5);
Map<String, Object> oaLeaveMap2 = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_512", "批准", "''"+"2019-08-01"+"''", "", 1, 5);
Map<String, Object> oaYearLeaveMap = oaYearLeaveService.getOaYearLeaveList("0",oa_id,"values", "", "", "flow_data_535", "批准", "''"+"2019-08-01"+"''", "", 1, 5);
Map<String, Object> oaBusinessMap = oaBusinessService.getOaBusinessList("0",oa_id, "values", "", "", "flow_data_103", "批准", "''"+"2019-08-01"+"''", "", 1, 5);
Map<String, Object> oaGooutMap = oaGooutService.getOaGooutList("0",oa_id, "values", "", "", "flow_data_85", "批准", "''"+"2019-08-01"+"''", "", 1, 5);
List<OaLeave> oaLeaveList =(List<OaLeave>) oaLeaveMap.get("rows");
List<OaLeave> oaLeaveList1 =(List<OaLeave>) oaLeaveMap1.get("rows");
List<OaLeave> oaLeaveList2 =(List<OaLeave>) oaLeaveMap2.get("rows");
List<OaYearLeave> oaYearLeaveList =(List<OaYearLeave>) oaYearLeaveMap.get("rows");
List<OaBusiness> oaBusinessList = (List<OaBusiness>) oaBusinessMap.get("rows");
List<OaGoout> oaGooutList = (List<OaGoout>) oaGooutMap.get("rows");
//请假信息
if (oaLeaveList.isEmpty()&&oaLeaveList1.isEmpty()&&oaLeaveList2.isEmpty()&&
oaYearLeaveList.isEmpty()&&oaBusinessList.isEmpty()&&oaGooutList.isEmpty()) {
continue;
}else {
//构造打卡信息
  JSONObject getuserinfo = DingRecordSyncController.getuserinfo(ding_id);
  JSONArray departmentid = getuserinfo.getJSONArray("department");//部门id
  String department=null;
  if (null==departmentid) {
  continue;
  }else {
  department = DingRecordSyncController.getdepartment(departmentid.getString(0));
  }
//遍历请假出差外出信息
if (!oaLeaveList.isEmpty()||!oaLeaveList1.isEmpty()||!oaLeaveList2.isEmpty()) {
List<OaLeave> list2 = new ArrayList<OaLeave>();
if (!oaLeaveList.isEmpty()) {
list2=oaLeaveList;
flow_data="flow_data_507";
}else if (!oaLeaveList1.isEmpty()) {
list2=oaLeaveList1;
flow_data="flow_data_508";
}else if (!oaLeaveList2.isEmpty()) {
list2=oaLeaveList2;
flow_data="flow_data_512";
}
for (int j = 0; j < list2.size(); j++) {
OaLeave oaLeave = list2.get(j);
String id = oaLeave.getId();
String begin_date_type = oaLeave.getBegin_date_type();//开始时间的上下午
String end_date_type = oaLeave.getEnd_date_type();//结束时间的上下午
String begin_date = oaLeave.getBegin_date();//开始日期
String end_date = oaLeave.getEnd_date();//结束日期
String leave_name = oaLeave.getLeave_name();//请假类别
String date_count = oaLeave.getDate_count();//请假时长
if (null!=date_count&&date_count.equals("半")) {
date_count="0.5";
}
if (null!=date_count&&date_count.equals("半天")) {
date_count="0.5";
}
float count = Float.parseFloat(date_count);
if (begin_date_type.equals("上午")) {
if (count==0.5) {
Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);
if (null!=attendance2) {
attendance2.setOnDuty1checkResult(leave_name);
attendance2.setOffDuty1checkResult(leave_name);
attendance2.setLeave_count(0.5f);
attendanceService.updateAttendance(attendance2);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null));
}
if (flow_data.equals("flow_data_507")) {
oaLeaveService.updateOaLeave(id,1);
}else if (flow_data.equals("flow_data_508")) {
oaLeaveService.updateOaLeave1(id,1);
}else if (flow_data.equals("flow_data_512")) {
oaLeaveService.updateOaLeave2(id,1);
}
continue;
}else if (count==1) {
Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);
if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {
attendance2.setOnDuty1checkResult(leave_name);
attendance2.setOnDuty2checkResult(leave_name);
attendance2.setOffDuty1checkResult(leave_name);
attendance2.setOffDuty2checkResult(leave_name);
attendance2.setLeave_count(1f);
attendanceService.updateAttendance(attendance2);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));
}
if (flow_data.equals("flow_data_507")) {
oaLeaveService.updateOaLeave(id,1);
}else if (flow_data.equals("flow_data_508")) {
oaLeaveService.updateOaLeave1(id,1);
}else if (flow_data.equals("flow_data_512")) {
oaLeaveService.updateOaLeave2(id,1);
}
continue;
}else if (count>1) {
if (end_date_type.equals("上午")) {
String nextDate = DateUtil.getNextDate(begin_date);
Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);
if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {
attendance2.setOnDuty1checkResult(leave_name);
attendance2.setOnDuty2checkResult(leave_name);
attendance2.setOffDuty1checkResult(leave_name);
attendance2.setOffDuty2checkResult(leave_name);
attendance2.setLeave_count(1f);
attendanceService.updateAttendance(attendance2);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));
}
if (DateUtil.compateDate(end_date, nextDate)>0) {
do {
Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);
if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {
attendance3.setOnDuty1checkResult(leave_name);
attendance3.setOnDuty2checkResult(leave_name);
attendance3.setOffDuty1checkResult(leave_name);
attendance3.setOffDuty2checkResult(leave_name);
attendance3.setLeave_count(1f);
attendanceService.updateAttendance(attendance3);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));
}
nextDate=DateUtil.getNextDate(nextDate);
} while (DateUtil.compateDate(end_date, nextDate)>0);
}
Attendance attendance4 = attendanceService.getAttendance(ding_id, end_date);
if (null!=attendance4&&attendance4.getAttendanceTime()!=null) {
attendance4.setOnDuty1checkResult(leave_name);
attendance4.setOffDuty1checkResult(leave_name);
attendance4.setLeave_count(0.5f);
attendanceService.updateAttendance(attendance4);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,end_date,null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null));
}
if (flow_data.equals("flow_data_507")) {
oaLeaveService.updateOaLeave(id,1);
}else if (flow_data.equals("flow_data_508")) {
oaLeaveService.updateOaLeave1(id,1);
}else if (flow_data.equals("flow_data_512")) {
oaLeaveService.updateOaLeave2(id,1);
}
continue;
}else if (end_date_type.equals("下午")) {
String nextDate = DateUtil.getNextDate(begin_date);
Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);
if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {
attendance2.setOnDuty1checkResult(leave_name);
attendance2.setOnDuty2checkResult(leave_name);
attendance2.setOffDuty1checkResult(leave_name);
attendance2.setOffDuty2checkResult(leave_name);
attendance2.setLeave_count(1f);
attendanceService.updateAttendance(attendance2);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));
}
do {
Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);
if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {
attendance3.setOnDuty1checkResult(leave_name);
attendance3.setOnDuty2checkResult(leave_name);
attendance3.setOffDuty1checkResult(leave_name);
attendance3.setOffDuty2checkResult(leave_name);
attendance3.setLeave_count(1f);
attendanceService.updateAttendance(attendance3);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));
}
nextDate=DateUtil.getNextDate(nextDate);
} while (DateUtil.compateDate(end_date, nextDate)>=0);
if (flow_data.equals("flow_data_507")) {
oaLeaveService.updateOaLeave(id,1);
}else if (flow_data.equals("flow_data_508")) {
oaLeaveService.updateOaLeave1(id,1);
}else if (flow_data.equals("flow_data_512")) {
oaLeaveService.updateOaLeave2(id,1);
}
continue;
}
}//开始时间是上午
}else if (begin_date_type.equals("下午")) {
if (count==0.5) {
Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);
if (null!=attendance2) {
attendance2.setOnDuty2checkResult(leave_name);
attendance2.setOffDuty2checkResult(leave_name);
attendance2.setLeave_count(0.5f);
attendanceService.updateAttendance(attendance2);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null));
}
if (flow_data.equals("flow_data_507")) {
oaLeaveService.updateOaLeave(id,1);
}else if (flow_data.equals("flow_data_508")) {
oaLeaveService.updateOaLeave1(id,1);
}else if (flow_data.equals("flow_data_512")) {
oaLeaveService.updateOaLeave2(id,1);
}
continue;
}else if (count==1) {
Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);
if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {
attendance2.setOnDuty2checkResult(leave_name);
attendance2.setOffDuty2checkResult(leave_name);
attendance2.setLeave_count(0.5f);
attendanceService.updateAttendance(attendance2);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null));
}
Attendance attendance3 = attendanceService.getAttendance(ding_id, DateUtil.getNextDate(begin_date));
if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {
attendance3.setOnDuty1checkResult(leave_name);
attendance3.setOffDuty1checkResult(leave_name);
attendance3.setLeave_count(0.5f);
attendanceService.updateAttendance(attendance3);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,DateUtil.getNextDate(begin_date),null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null));
}
if (flow_data.equals("flow_data_507")) {
oaLeaveService.updateOaLeave(id,1);
}else if (flow_data.equals("flow_data_508")) {
oaLeaveService.updateOaLeave1(id,1);
}else if (flow_data.equals("flow_data_512")) {
oaLeaveService.updateOaLeave2(id,1);
}
continue;
}else if (count>1) {
if (end_date_type.equals("下午")) {
String nextDate = DateUtil.getNextDate(begin_date);
Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);
if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {
attendance2.setOnDuty2checkResult(leave_name);
attendance2.setOffDuty2checkResult(leave_name);
attendance2.setLeave_count(0.5f);
attendanceService.updateAttendance(attendance2);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null));
}
do {
Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);
if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {
attendance3.setOnDuty1checkResult(leave_name);
attendance3.setOnDuty2checkResult(leave_name);
attendance3.setOffDuty1checkResult(leave_name);
attendance3.setOffDuty2checkResult(leave_name);
attendance3.setLeave_count(1f);
attendanceService.updateAttendance(attendance3);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));
}
nextDate=DateUtil.getNextDate(nextDate);
} while (DateUtil.compateDate(end_date, nextDate)>=0);
if (flow_data.equals("flow_data_507")) {
oaLeaveService.updateOaLeave(id,1);
}else if (flow_data.equals("flow_data_508")) {
oaLeaveService.updateOaLeave1(id,1);
}else if (flow_data.equals("flow_data_512")) {
oaLeaveService.updateOaLeave2(id,1);
}
continue;
}else if (end_date_type.equals("上午")) {
String nextDate = DateUtil.getNextDate(begin_date);
Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date);
if (null!=attendance2&&attendance2.getAttendanceTime()!=null) {
attendance2.setOnDuty2checkResult(leave_name);
attendance2.setOffDuty2checkResult(leave_name);
attendance2.setLeave_count(0.5f);
attendanceService.updateAttendance(attendance2);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null));
}
do {
Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate);
if (null!=attendance3&&attendance3.getAttendanceTime()!=null) {
attendance3.setOnDuty1checkResult(leave_name);
attendance3.setOnDuty2checkResult(leave_name);
attendance3.setOffDuty1checkResult(leave_name);
attendance3.setOffDuty2checkResult(leave_name);
attendance3.setLeave_count(1f);
attendanceService.updateAttendance(attendance3);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null));
}
nextDate=DateUtil.getNextDate(nextDate);
} while (DateUtil.compateDate(end_date, nextDate)>0);
Attendance attendance4 = attendanceService.getAttendance(ding_id, end_date);
if (null!=attendance4&&attendance4.getAttendanceTime()!=null) {
attendance4.setOnDuty1checkResult(leave_name);
attendance4.setOffDuty1checkResult(leave_name);
attendance4.setLeave_count(0.5f);
attendanceService.updateAttendance(attendance4);
}else {
attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,end_date,null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null));
}
if (flow_data.equals("flow_data_507")) {
oaLeaveService.updateOaLeave(id,1);
}else if (flow_data.equals("flow_data_508")) {
oaLeaveService.updateOaLeave1(id,1);
}else if (flow_data.equals("flow_data_512")) {
oaLeaveService.updateOaLeave2(id,1);
}
continue;
}
}//开始时间是下午
}
}
}

5.添加定时任务
public class TimerManager {
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager() {
Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.HOUR_OF_DAY, 02);
calendar.set(Calendar.MINUTE, 10);
calendar.set(Calendar.SECOND, 00);

Date date = calendar.getTime();
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
Timer timer = new Timer();
TimerTaskService task = new TimerTaskService();
timer.schedule(task, date, PERIOD_DAY);
}

private Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
————————————————
版权声明:本文为CSDN博主「kengso」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

该文章在 2020/4/27 17:45:11 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved