From 52dc4365569f053ffd36ac7aa124a647697f5d37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=AD=A3=E5=9B=BD?= <438926402@qq.com> Date: Mon, 12 Aug 2024 13:48:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E6=A1=88=E6=8E=A5=E5=8F=A3=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=B7=BB=E5=8A=A0=E6=98=AF=E5=90=A6=E4=B8=8B=E5=A7=94?= =?UTF-8?q?=E6=89=98=E4=B9=A6=E5=AD=97=E6=AE=B5=E6=8E=A8=E9=80=81=E7=BB=8F?= =?UTF-8?q?=E9=94=80=E5=95=86=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cfgHome/src_qyba/spring/spring-node.xml | 2 + .../src_qyba/spring/spring-service.xml | 1 + .../jkts/service/NewTongYongService.java | 16 +- .../jkts/service/TongYongService.java | 22 +- .../src_dingding/dao/DingdingDaoImpl.java | 43 +- .../apps/src_dingding/dao/IDingdingDao.java | 11 +- .../src_dingding/service/DingdingService.java | 439 +++++++++--------- .../seeyon/apps/src_qyba/FVCommonNode.java | 4 +- .../{vo => }/FVTongyongbeianNode.java | 33 +- .../apps/src_qyba/constants/FVConstants.java | 7 +- .../src_qyba/node/FVNewStateReturnNode.java | 30 ++ .../src_qyba/node/FVOldStateReturnNode.java | 30 ++ .../apps/src_qyba/node/FVOldZhengceNode.java | 2 +- .../apps/src_qyba/service/FVService.java | 5 - .../src_qyba/service/FVTongyongService.java | 119 +++++ .../seeyon/apps/src_qyba/util/FanWeiUtil.java | 125 ++--- 16 files changed, 569 insertions(+), 320 deletions(-) rename src/com/seeyon/apps/src_qyba/{vo => }/FVTongyongbeianNode.java (78%) create mode 100644 src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java create mode 100644 src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java create mode 100644 src/com/seeyon/apps/src_qyba/service/FVTongyongService.java diff --git a/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-node.xml b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-node.xml index f99a218..7923e9d 100644 --- a/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-node.xml +++ b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-node.xml @@ -3,4 +3,6 @@ + + \ No newline at end of file diff --git a/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-service.xml b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-service.xml index 3d8c7b8..7aee5ee 100644 --- a/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-service.xml +++ b/seeyon/WEB-INF/cfgHome/src_qyba/spring/spring-service.xml @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/service/NewTongYongService.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/service/NewTongYongService.java index 3027d7a..b56654c 100644 --- a/src/com/seeyon/apps/daohuaxiangSys/jkts/service/NewTongYongService.java +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/service/NewTongYongService.java @@ -65,11 +65,17 @@ public class NewTongYongService { map.put("request", parm.toString()); map.put("response", s); } else { -// Map data = (Map) returnMsg.get("errMsg"); - map.put("code", "300"); - map.put("msg", "新建流程失败!"); - map.put("request", parm.toString()); - map.put("response", s); + if("-1".equals(code.toString())){ + map.put("code", "300"); + map.put("msg", returnMsg.get("msg")); + map.put("request", parm.toString()); + map.put("response", s); + }else{ + map.put("code", "300"); + map.put("msg", "异常编号:"+code.toString()+",异常数据"+returnMsg.get("errMsg")); + map.put("request", parm.toString()); + map.put("response", s); + } } return map; diff --git a/src/com/seeyon/apps/daohuaxiangSys/jkts/service/TongYongService.java b/src/com/seeyon/apps/daohuaxiangSys/jkts/service/TongYongService.java index 4553b9c..8b55c75 100644 --- a/src/com/seeyon/apps/daohuaxiangSys/jkts/service/TongYongService.java +++ b/src/com/seeyon/apps/daohuaxiangSys/jkts/service/TongYongService.java @@ -55,22 +55,22 @@ public class TongYongService { Map map = new HashMap<>(); if ("SUCCESS".equals(code.toString())) { //调用提交接口 -// Map data = (Map) returnMsg.get("data"); -// Object requestid = data.get("requestid"); -// String msg = FanWeiUtil.PostRestfulbyForm(requestid.toString(), userid); -// JSONObject tiJiaoReturnMsg = JSON.parseObject(msg); -// Object code2 = tiJiaoReturnMsg.get("code"); -// System.out.println("提交code:" + code2); map.put("code", "200"); map.put("msg", "推送成功"); map.put("request", parm.toString()); map.put("response", s); } else { -// Map data = (Map) returnMsg.get("errMsg"); - map.put("code", "300"); - map.put("msg", "新建流程失败!"); - map.put("request", parm.toString()); - map.put("response", s); + if("-1".equals(code.toString())){ + map.put("code", "300"); + map.put("msg", returnMsg.get("msg")); + map.put("request", parm.toString()); + map.put("response", s); + }else{ + map.put("code", "300"); + map.put("msg", "异常编号:"+code.toString()+",异常数据"+returnMsg.get("errMsg")); + map.put("request", parm.toString()); + map.put("response", s); + } } return map; diff --git a/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java b/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java index 778bf37..92267ae 100644 --- a/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java +++ b/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java @@ -13,6 +13,7 @@ import java.util.TimeZone; import com.seeyon.apps.src_dingding.service.DingdingService; import com.seeyon.apps.src_dingding.vo.CheckOnWorkAttendanceVo; +import nc.vo.jcom.lang.StringUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -32,7 +33,8 @@ public class DingdingDaoImpl extends BaseUtil implements IDingdingDao{ private String getdeptBysuperDeptId = "select * from SRC_DINGDING_OA_DEPT where DINGDINGDEPTID = '${dingdingdeptid}'"; private String getdeptByPathName = "select NAME,ID from ORG_UNIT where PATH like ? and NAME = ? AND IS_INTERNAL = 1 AND IS_ENABLE = 1 AND IS_DELETED = 0"; private String getDingdingOaDept = "select * from SRC_DINGDING_OA_DEPT "; - private String getDingdingOaMember = "select * from SRC_DINGDING_OA_MEMBER "; + private String getDingdingOaMember = "SELECT * FROM (SELECT a.*, ROWNUM rnum FROM (SELECT * FROM SRC_DINGDING_OA_MEMBER ORDER BY id ) a WHERE ROWNUM <= ? ) WHERE rnum > ? "; + private String getDingdingOaMemberNum = "select count(t.oamemberid) as num from (SELECT oamemberid,count(oamemberid) as oanum FROM SRC_DINGDING_OA_MEMBER group by oamemberid) t"; private String getDepartmentById = "select ID,NAME,PATH from ORG_UNIT WHERE ID = ? AND IS_INTERNAL = 1 AND IS_ENABLE = 1 AND IS_DELETED = 0"; private String getdeptsizeBydingdingid = "select count(id) as DINGDINGSIZE from src_dingding_oa_dept where dingdingdeptid = '${dingdingdeptid}'"; private String getmembersizeBydingdingid = "select count(id) as DINGDINGSIZE from src_dingding_oa_member where dingdingmemberid = '${dingdingmemberid}'"; @@ -327,13 +329,14 @@ public class DingdingDaoImpl extends BaseUtil implements IDingdingDao{ }else{ sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getCheckOnWorkAttendanceDate())+"','YYYY-MM-DD HH24:MI:SS')"); } + // 上班1 if(checkOnWorkAttendanceVo.getShangbanDate1() == null){ sql.append(",''"); }else{ sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getShangbanDate1())+"','YYYY-MM-DD HH24:MI:SS')"); } - if(checkOnWorkAttendanceVo.getShangban1().length()==0){ + if(StringUtil.isEmpty(checkOnWorkAttendanceVo.getShangban1())){ sql.append(",''"); }else{ sql.append(",'"+checkOnWorkAttendanceVo.getShangban1()+"'"); @@ -345,7 +348,7 @@ public class DingdingDaoImpl extends BaseUtil implements IDingdingDao{ }else{ sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getXiabanDate1())+"','YYYY-MM-DD HH24:MI:SS')"); } - if(checkOnWorkAttendanceVo.getXiaban1().length()==0){ + if(StringUtil.isEmpty(checkOnWorkAttendanceVo.getXiaban1())){ sql.append(",''"); }else{ sql.append(",'"+checkOnWorkAttendanceVo.getXiaban1()+"'"); @@ -357,7 +360,7 @@ public class DingdingDaoImpl extends BaseUtil implements IDingdingDao{ }else{ sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getShangbanDate2())+"','YYYY-MM-DD HH24:MI:SS')"); } - if(checkOnWorkAttendanceVo.getShangban2().length()==0){ + if(StringUtil.isEmpty(checkOnWorkAttendanceVo.getShangban2())){ sql.append(",''"); }else{ sql.append(",'"+checkOnWorkAttendanceVo.getShangban2()+"'"); @@ -369,7 +372,7 @@ public class DingdingDaoImpl extends BaseUtil implements IDingdingDao{ }else{ sql.append(",TO_DATE('"+simpleDateFormat.format(checkOnWorkAttendanceVo.getXiabanDate2())+"','YYYY-MM-DD HH24:MI:SS')"); } - if(checkOnWorkAttendanceVo.getXiaban2().length()==0){ + if(StringUtil.isEmpty(checkOnWorkAttendanceVo.getXiaban2())){ sql.append(",''"); }else{ sql.append(",'"+checkOnWorkAttendanceVo.getXiaban2()+"'"); @@ -676,6 +679,32 @@ public class DingdingDaoImpl extends BaseUtil implements IDingdingDao{ return ret; } + @Override + public String getDingdingOaMemberNum() { + String ret = ""; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getDingdingOaMemberNum); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret = map.get("num").toString(); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + @Override public int updateWorkAttendance(CheckOnWorkAttendanceVo checkOnWorkAttendanceVo) { int i = 0; @@ -695,12 +724,14 @@ public class DingdingDaoImpl extends BaseUtil implements IDingdingDao{ } @Override - public List> getDingdingOaMember() throws BusinessException, SQLException { + public List> getDingdingOaMember(String startnum , String endnum) throws BusinessException, SQLException { List> ret = new ArrayList>(); JDBCAgent agent = new JDBCAgent(); try { StringBuilder sql = new StringBuilder(getDingdingOaMember); List p = new ArrayList(); + p.add(endnum); + p.add(startnum); agent.execute(sql.toString(), p); List list = agent.resultSetToList(); for (Map map : list) { diff --git a/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java b/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java index 44f1cb1..a10b391 100644 --- a/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java +++ b/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java @@ -51,12 +51,12 @@ public interface IDingdingDao { public List> getDingdingOaDept()throws BusinessException, SQLException; /** - * 查询部门对照表中所有的部门信息 + * 查询分页查询所有人员信息 * @return * @throws BusinessException * @throws SQLException */ - public List> getDingdingOaMember()throws BusinessException, SQLException; + public List> getDingdingOaMember(String startnum , String endnum)throws BusinessException, SQLException; /** * 根据部门ID查询OA系统中的部门信息 @@ -180,4 +180,11 @@ public interface IDingdingDao { */ public String getGroupName(String memberId); + + /** + * 查询规定时间之内的补卡单据 + * @return + */ + public String getDingdingOaMemberNum(); + } diff --git a/src/com/seeyon/apps/src_dingding/service/DingdingService.java b/src/com/seeyon/apps/src_dingding/service/DingdingService.java index ac3a807..b4cb357 100644 --- a/src/com/seeyon/apps/src_dingding/service/DingdingService.java +++ b/src/com/seeyon/apps/src_dingding/service/DingdingService.java @@ -266,9 +266,10 @@ public class DingdingService { } public String dingdingclockin() throws BusinessException, SQLException, RuntimeException, ApiException, ServiceException, InterruptedException { + String membernum = dingdingDao.getDingdingOaMemberNum(); + log.info(membernum); // 查询当前系统人员对照表中的人员信息 - List> members = dingdingDao.getDingdingOaMember(); - + List> members = dingdingDao.getDingdingOaMember("0",membernum); // 一次封装12人的考勤数据 int groupSize = 10; // 每组的大小 List>> memberLists = new ArrayList>>(); @@ -438,7 +439,6 @@ public class DingdingService { } subfrom.put("打卡状态", timeResultStr); - subfroms.add(subfrom); } if(lack ==datasSequence.size()){ @@ -462,8 +462,10 @@ public class DingdingService { } public String dingdingclockin(String datestr) throws BusinessException, SQLException, RuntimeException, ApiException, ServiceException, InterruptedException { + String membernum = dingdingDao.getDingdingOaMemberNum(); + log.info(membernum); // 查询当前系统人员对照表中的人员信息 - List> members = dingdingDao.getDingdingOaMember(); + List> members = dingdingDao.getDingdingOaMember("0",membernum); // 一次封装12人的考勤数据 int groupSize = 10; // 每组的大小 @@ -659,135 +661,145 @@ public class DingdingService { public void setWorkAttendance(){ log.info("开始设置考勤信息"); try { - // 获取所有打卡人 - List> members = dingdingDao.getDingdingOaMember(); - // 循环遍历所有打卡人信息,设置前一天的打卡情况 - for (Map map:members) { +// 查询所有人员的数据量 + String num = dingdingDao.getDingdingOaMemberNum(); + int membernum = Integer.parseInt(num); +// 设置初始索引 + int start = 0 ; + for(int i = 0; start <= membernum ; i++){ + int end = start+1000; + // 获取所有打卡人 + List> members = dingdingDao.getDingdingOaMember(start+"",end+""); + log.info(members); + // 循环遍历所有打卡人信息,设置前一天的打卡情况 + for (Map map:members) { // 根据打卡人信息获取一月内的打卡情况 - log.info("设置当前考勤时间前一个月"); - Calendar calendar = Calendar.getInstance(); - calendar.add(Calendar.DAY_OF_MONTH,-1); - String dateStr = sdf.format(calendar.getTime()); - calendar.add(Calendar.MONTH, -1); - String lastMonth = sdf.format(calendar.getTime()); - String memberId = map.get("oamemberid").toString(); - log.info(lastMonth+"--"+memberId); - int clockInNum = dingdingDao.getClockInNumBymember(lastMonth,memberId); + log.info("设置当前考勤时间前一个月"); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH,-1); + String dateStr = sdf.format(calendar.getTime()); + calendar.add(Calendar.MONTH, -1); + String lastMonth = sdf.format(calendar.getTime()); + String memberId = map.get("oamemberid").toString(); + log.info(lastMonth+"--"+memberId); + int clockInNum = dingdingDao.getClockInNumBymember(lastMonth,memberId); // 创建考勤对象 - CheckOnWorkAttendanceVo checkOnWorkAttendanceVo = new CheckOnWorkAttendanceVo(); - log.info(memberId+","+clockInNum+"此人前一个月如果存在打卡情况则进行考勤对象创建"); - if(clockInNum>0) { + CheckOnWorkAttendanceVo checkOnWorkAttendanceVo = new CheckOnWorkAttendanceVo(); + log.info(memberId+","+clockInNum+"此人前一个月如果存在打卡情况则进行考勤对象创建"); + if(clockInNum>0) { // 存在打卡情况,创建基础参数显示考勤情况显示未上班1,下班1,上班2,下班2, // Calendar calendar1 = Calendar.getInstance(); //// 设置日期-1 // calendar1.add(Calendar.DATE, -1); // String yesterday = sdf.format(calendar1.getTime()); // 查询参数的打卡记录 - List> clockInList = dingdingDao.getClockInBymember(dateStr, memberId); - log.info("指定时间的考勤数据条数:"+clockInList.size()); - if (clockInList.size() > 0) { + List> clockInList = dingdingDao.getClockInBymember(dateStr, memberId); + log.info("指定时间的考勤数据条数:"+clockInList.size()); + if (clockInList.size() > 0) { // 设置ID - checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); - checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); - checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); - checkOnWorkAttendanceVo.setGroupName(clockInList.get(0).get("groupName").toString()); - log.info("创建考勤对象基础参数" + checkOnWorkAttendanceVo.getId()); + checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); + checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); + checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); + checkOnWorkAttendanceVo.setGroupName(clockInList.get(0).get("groupName").toString()); + log.info("创建考勤对象基础参数" + checkOnWorkAttendanceVo.getId()); // 判断考勤时间点上打卡状态 - for (Map clockIn : clockInList) { - log.info(clockIn); + for (Map clockIn : clockInList) { + log.info(clockIn); // 设置考勤相关数据 - if ("上班1".equals(clockIn.get("type").toString())) { - checkOnWorkAttendanceVo.setShangbanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); - if("迟到".equals(clockIn.get("state").toString())){ - Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); - Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); - long time = date1.getTime()-date2.getTime(); - long minute = time/1000/60; - checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()+minute+"分钟"); - }else{ - checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()); - } - } else if ("下班1".equals(clockIn.get("type").toString())) { - checkOnWorkAttendanceVo.setXiabanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); - if("早退".equals(clockIn.get("state").toString())){ - Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); - Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); - long time = date2.getTime()-date1.getTime(); - long minute = time/1000/60; - checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()+minute+"分钟"); - }else{ - checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()); - } - } else if ("上班2".equals(clockIn.get("type").toString())) { - checkOnWorkAttendanceVo.setShangbanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); - if("迟到".equals(clockIn.get("state").toString())){ - Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); - Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); - long time = date1.getTime()-date2.getTime(); - long minute = time/1000/60; - checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()+minute+"分钟"); - }else{ - checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()); - } - } else if ("下班2".equals(clockIn.get("type").toString())) { - checkOnWorkAttendanceVo.setXiabanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); - if("早退".equals(clockIn.get("state").toString())){ - Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); - Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); - long time = date2.getTime()-date1.getTime(); - long minute = time/1000/60; - checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()+minute+"分钟"); - }else{ - checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()); + if ("上班1".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setShangbanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("迟到".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date1.getTime()-date2.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()); + } + } else if ("下班1".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setXiabanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("早退".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date2.getTime()-date1.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()); + } + } else if ("上班2".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setShangbanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("迟到".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date1.getTime()-date2.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()); + } + } else if ("下班2".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setXiabanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("早退".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date2.getTime()-date1.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()); + } } } - } - checkOnWorkAttendanceVo = setState(checkOnWorkAttendanceVo); - log.info("考勤对象" + checkOnWorkAttendanceVo.toString()); - } else { + checkOnWorkAttendanceVo = setState(checkOnWorkAttendanceVo); + log.info("考勤对象" + checkOnWorkAttendanceVo.toString()); + } else { // 不存在打卡情况,创建未打卡数据 - checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); - checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); - checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); - String groupName = dingdingDao.getGroupName(memberId); - checkOnWorkAttendanceVo.setGroupName(groupName); - checkOnWorkAttendanceVo.setShangban1("未打卡"); - checkOnWorkAttendanceVo.setXiaban1("未打卡"); - checkOnWorkAttendanceVo.setShangban2("未打卡"); - checkOnWorkAttendanceVo.setXiaban2("未打卡"); - checkOnWorkAttendanceVo.setState("休息"); - log.info("休息时间考勤对象" + checkOnWorkAttendanceVo.toString()); + checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); + checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); + checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); + String groupName = dingdingDao.getGroupName(memberId); + checkOnWorkAttendanceVo.setGroupName(groupName); + checkOnWorkAttendanceVo.setShangban1("未打卡"); + checkOnWorkAttendanceVo.setXiaban1("未打卡"); + checkOnWorkAttendanceVo.setShangban2("未打卡"); + checkOnWorkAttendanceVo.setXiaban2("未打卡"); + checkOnWorkAttendanceVo.setState("休息"); + log.info("休息时间考勤对象" + checkOnWorkAttendanceVo.toString()); + } + // 保存打卡数据到数据库表中 + int addin = dingdingDao.addCheckOnWorkAttendance(checkOnWorkAttendanceVo); + log.info("当前考勤人员为:"+checkOnWorkAttendanceVo.getMemberId()+"添加信息条数为"+addin); } - // 保存打卡数据到数据库表中 - int addin = dingdingDao.addCheckOnWorkAttendance(checkOnWorkAttendanceVo); - log.info("当前考勤人员为:"+checkOnWorkAttendanceVo.getMemberId()+"添加信息条数为"+addin); - } // 根据单据修改当前人员一月内的考勤情况 // calendar表示时间前一个月的时间点。查询 单据结束时间在查询开始时间之后并且单据开始时间在查询结束时间之前的单据 // 查询当前人员一年内的请假单 map : 人员,请假类型,开始时间 ,结束时间 - log.info("请假参数时间段"+memberId+"~~~~~~~~~~~~"+sdf.format(calendar.getTime())+"~~~~~~"+dateStr); - List> leaves = dingdingDao.getLeave(memberId,sdf.format(calendar.getTime()),dateStr); - leaveUpdateWorkAttendance(leaves,memberId); + log.info("请假参数时间段"+memberId+"~~~~~~~~~~~~"+sdf.format(calendar.getTime())+"~~~~~~"+dateStr); + List> leaves = dingdingDao.getLeave(memberId,sdf.format(calendar.getTime()),dateStr); + leaveUpdateWorkAttendance(leaves,memberId); // 查询当前人员一年内的出差单 map : 人员,请假类型,开始时间 ,结束时间 - List> evections = dingdingDao.getEvections(memberId,sdf.format(calendar.getTime()),dateStr); - evectionUpdateWorkAttendance(evections,memberId); + List> evections = dingdingDao.getEvections(memberId,sdf.format(calendar.getTime()),dateStr); + evectionUpdateWorkAttendance(evections,memberId); // 查询当前人员一年内的加班单 - List> overtimes = dingdingDao.getOvertime(memberId,sdf.format(calendar.getTime()),dateStr); - overtimesUpdateWorkAttendance(overtimes,memberId); + List> overtimes = dingdingDao.getOvertime(memberId,sdf.format(calendar.getTime()),dateStr); + overtimesUpdateWorkAttendance(overtimes,memberId); // 查询当前人员一年内的补卡单 - List> makeCard = dingdingDao.getMakeCard(memberId,sdf.format(calendar.getTime()),dateStr); - makeCardUpdateWorkAttendance(makeCard,memberId); + List> makeCard = dingdingDao.getMakeCard(memberId,sdf.format(calendar.getTime()),dateStr); + makeCardUpdateWorkAttendance(makeCard,memberId); // 查询当前人员一年内的调休单 map : 人员,请假类型,开始时间 ,结束时间 - List> adjustLeaves = dingdingDao.getAdjustLeave(memberId,sdf.format(calendar.getTime()),dateStr); - leaveUpdateWorkAttendance(adjustLeaves,memberId); + List> adjustLeaves = dingdingDao.getAdjustLeave(memberId,sdf.format(calendar.getTime()),dateStr); + leaveUpdateWorkAttendance(adjustLeaves,memberId); + } + start = end; } - log.info("创建完成!!!创建条数"+members.size()); + log.info("创建完成!!!创建条数"+membernum); } catch (BusinessException e) { e.printStackTrace(); } catch (SQLException e) { @@ -807,134 +819,145 @@ public class DingdingService { public String setWorkAttendance(String dateStr) { log.info("开始设置考勤信息"); try { - // 获取所有打卡人 - List> members = dingdingDao.getDingdingOaMember(); - // 循环遍历所有打卡人信息,设置前一天的打卡情况 - for (Map map:members) { + // 查询所有人员的数据量 + String num = dingdingDao.getDingdingOaMemberNum(); + int membernum = Integer.parseInt(num); +// 设置初始索引 + int start = 0 ; + for(int i = 0; start <= membernum ; i++) { + int end = start + 1000; +// 获取所有打卡人 + List> members = dingdingDao.getDingdingOaMember(start+"",end+""); + log.info(members); + // 循环遍历所有打卡人信息,设置前一天的打卡情况 + for (Map map:members) { // 根据打卡人信息获取一月内的打卡情况 - log.info("设置当前考勤时间前一个月"); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(sdf.parse(dateStr)); - calendar.add(Calendar.MONTH, -1); - String lastMonth = sdf.format(calendar.getTime()); - String memberId = map.get("oamemberid").toString(); - log.info(lastMonth+"--"+memberId); - int clockInNum = dingdingDao.getClockInNumBymember(lastMonth,memberId); + log.info("设置当前考勤时间前一个月"); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sdf.parse(dateStr)); + calendar.add(Calendar.MONTH, -1); + String lastMonth = sdf.format(calendar.getTime()); + String memberId = map.get("oamemberid").toString(); + log.info(lastMonth+"--"+memberId); + int clockInNum = dingdingDao.getClockInNumBymember(lastMonth,memberId); // 创建考勤对象 - CheckOnWorkAttendanceVo checkOnWorkAttendanceVo = new CheckOnWorkAttendanceVo(); - log.info(memberId+","+clockInNum+"此人前一个月如果存在打卡情况则进行考勤对象创建"); - if(clockInNum>0) { + CheckOnWorkAttendanceVo checkOnWorkAttendanceVo = new CheckOnWorkAttendanceVo(); + log.info(memberId+","+clockInNum+"此人前一个月如果存在打卡情况则进行考勤对象创建"); + if(clockInNum>0) { // 存在打卡情况,创建基础参数显示考勤情况显示未上班1,下班1,上班2,下班2, // Calendar calendar1 = Calendar.getInstance(); //// 设置日期-1 // calendar1.add(Calendar.DATE, -1); // String yesterday = sdf.format(calendar1.getTime()); // 查询参数的打卡记录 - List> clockInList = dingdingDao.getClockInBymember(dateStr, memberId); - log.info("指定时间的考勤数据条数:"+clockInList.size()); - if (clockInList.size() > 0) { + List> clockInList = dingdingDao.getClockInBymember(dateStr, memberId); + log.info("指定时间的考勤数据条数:"+clockInList.size()); + if (clockInList.size() > 0) { // 设置ID - checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); - checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); - checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); - checkOnWorkAttendanceVo.setGroupName(clockInList.get(0).get("groupName").toString()); - log.info("创建考勤对象基础参数" + checkOnWorkAttendanceVo.getId()); + checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); + checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); + checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); + checkOnWorkAttendanceVo.setGroupName(clockInList.get(0).get("groupName").toString()); + log.info("创建考勤对象基础参数" + checkOnWorkAttendanceVo.getId()); // 判断考勤时间点上打卡状态 - for (Map clockIn : clockInList) { - log.info(clockIn); + for (Map clockIn : clockInList) { + log.info(clockIn); // 设置考勤相关数据 - if ("上班1".equals(clockIn.get("type").toString())) { - checkOnWorkAttendanceVo.setShangbanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); - if("迟到".equals(clockIn.get("state").toString())){ - Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); - Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); - long time = date1.getTime()-date2.getTime(); - long minute = time/1000/60; - checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()+minute+"分钟"); - }else{ - checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()); - } - } else if ("下班1".equals(clockIn.get("type").toString())) { - checkOnWorkAttendanceVo.setXiabanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); - if("早退".equals(clockIn.get("state").toString())){ - Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); - Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); - long time = date2.getTime()-date1.getTime(); - long minute = time/1000/60; - checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()+minute+"分钟"); - }else{ - checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()); - } - } else if ("上班2".equals(clockIn.get("type").toString())) { - checkOnWorkAttendanceVo.setShangbanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); - if("迟到".equals(clockIn.get("state").toString())){ - Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); - Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); - long time = date1.getTime()-date2.getTime(); - long minute = time/1000/60; - checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()+minute+"分钟"); - }else{ - checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()); - } - } else if ("下班2".equals(clockIn.get("type").toString())) { - checkOnWorkAttendanceVo.setXiabanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); - if("早退".equals(clockIn.get("state").toString())){ - Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); - Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); - long time = date2.getTime()-date1.getTime(); - long minute = time/1000/60; - checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()+minute+"分钟"); - }else{ - checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()); + if ("上班1".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setShangbanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("迟到".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date1.getTime()-date2.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()); + } + } else if ("下班1".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setXiabanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("早退".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date2.getTime()-date1.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()); + } + } else if ("上班2".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setShangbanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("迟到".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date1.getTime()-date2.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()); + } + } else if ("下班2".equals(clockIn.get("type").toString())) { + checkOnWorkAttendanceVo.setXiabanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); + if("早退".equals(clockIn.get("state").toString())){ + Date date1 = simpleDateFormat.parse(clockIn.get("clockInDate").toString()); + Date date2 = simpleDateFormat.parse(clockIn.get("referenceDate").toString()); + long time = date2.getTime()-date1.getTime(); + long minute = time/1000/60; + checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()+minute+"分钟"); + }else{ + checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()); + } } } - } - checkOnWorkAttendanceVo = setState(checkOnWorkAttendanceVo); - log.info("考勤对象" + checkOnWorkAttendanceVo.toString()); - } else { + checkOnWorkAttendanceVo = setState(checkOnWorkAttendanceVo); + log.info("考勤对象" + checkOnWorkAttendanceVo.toString()); + } else { // 不存在打卡情况,创建未打卡数据 - checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); - checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); - checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); - String groupName = dingdingDao.getGroupName(memberId); - checkOnWorkAttendanceVo.setGroupName(groupName); - checkOnWorkAttendanceVo.setShangban1("未打卡"); - checkOnWorkAttendanceVo.setXiaban1("未打卡"); - checkOnWorkAttendanceVo.setShangban2("未打卡"); - checkOnWorkAttendanceVo.setXiaban2("未打卡"); - checkOnWorkAttendanceVo.setState("休息"); - log.info("休息时间考勤对象" + checkOnWorkAttendanceVo.toString()); + checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); + checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); + checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); + String groupName = dingdingDao.getGroupName(memberId); + checkOnWorkAttendanceVo.setGroupName(groupName); + checkOnWorkAttendanceVo.setShangban1("未打卡"); + checkOnWorkAttendanceVo.setXiaban1("未打卡"); + checkOnWorkAttendanceVo.setShangban2("未打卡"); + checkOnWorkAttendanceVo.setXiaban2("未打卡"); + checkOnWorkAttendanceVo.setState("休息"); + log.info("休息时间考勤对象" + checkOnWorkAttendanceVo.toString()); + } + // 保存打卡数据到数据库表中 + int addin = dingdingDao.addCheckOnWorkAttendance(checkOnWorkAttendanceVo); + log.info("当前考勤人员为:"+checkOnWorkAttendanceVo.getMemberId()+"添加信息条数为"+addin); } - // 保存打卡数据到数据库表中 - int addin = dingdingDao.addCheckOnWorkAttendance(checkOnWorkAttendanceVo); - log.info("当前考勤人员为:"+checkOnWorkAttendanceVo.getMemberId()+"添加信息条数为"+addin); - } // 根据单据修改当前人员一月内的考勤情况 // calendar表示时间前一个月的时间点。查询 单据结束时间在查询开始时间之后并且单据开始时间在查询结束时间之前的单据 // 查询当前人员一年内的请假单 map : 人员,请假类型,开始时间 ,结束时间 - log.info("请假参数时间段"+memberId+"~~~~~~~~~~~~"+sdf.format(calendar.getTime())+"~~~~~~"+dateStr); - List> leaves = dingdingDao.getLeave(memberId,sdf.format(calendar.getTime()),dateStr); - leaveUpdateWorkAttendance(leaves,memberId); + log.info("请假参数时间段"+memberId+"~~~~~~~~~~~~"+sdf.format(calendar.getTime())+"~~~~~~"+dateStr); + List> leaves = dingdingDao.getLeave(memberId,sdf.format(calendar.getTime()),dateStr); + leaveUpdateWorkAttendance(leaves,memberId); // 查询当前人员一年内的出差单 map : 人员,请假类型,开始时间 ,结束时间 - List> evections = dingdingDao.getEvections(memberId,sdf.format(calendar.getTime()),dateStr); - evectionUpdateWorkAttendance(evections,memberId); + List> evections = dingdingDao.getEvections(memberId,sdf.format(calendar.getTime()),dateStr); + evectionUpdateWorkAttendance(evections,memberId); // 查询当前人员一年内的加班单 - List> overtimes = dingdingDao.getOvertime(memberId,sdf.format(calendar.getTime()),dateStr); - overtimesUpdateWorkAttendance(overtimes,memberId); + List> overtimes = dingdingDao.getOvertime(memberId,sdf.format(calendar.getTime()),dateStr); + overtimesUpdateWorkAttendance(overtimes,memberId); // 查询当前人员一年内的补卡单 - List> makeCard = dingdingDao.getMakeCard(memberId,sdf.format(calendar.getTime()),dateStr); - makeCardUpdateWorkAttendance(makeCard,memberId); + List> makeCard = dingdingDao.getMakeCard(memberId,sdf.format(calendar.getTime()),dateStr); + makeCardUpdateWorkAttendance(makeCard,memberId); // 查询当前人员一年内的调休单 map : 人员,请假类型,开始时间 ,结束时间 - List> adjustLeaves = dingdingDao.getAdjustLeave(memberId,sdf.format(calendar.getTime()),dateStr); - leaveUpdateWorkAttendance(adjustLeaves,memberId); + List> adjustLeaves = dingdingDao.getAdjustLeave(memberId,sdf.format(calendar.getTime()),dateStr); + leaveUpdateWorkAttendance(adjustLeaves,memberId); + } + + start = end; } - log.info("创建完成!!!创建条数"+members.size()); + log.info("创建完成!!!创建条数"+membernum); } catch (BusinessException e) { e.printStackTrace(); return e.toString(); @@ -1034,7 +1057,7 @@ public class DingdingService { } // 上班2 if(cowav.getShangbanDate2() == null ){ - cowav.setShangban2(cowav.getShangban1()); +// cowav.setShangban2(cowav.getShangban1()); // cowav.setShangban2("未打卡"); }else{ log.info(cowav.getShangbanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime()); @@ -1048,8 +1071,8 @@ public class DingdingService { } // 下班2 if(cowav.getXiabanDate2() == null ){ - cowav.setXiaban2(cowav.getXiaban1()); -// cowav.setXiaban2("未打卡"); +// cowav.setXiaban2(cowav.getXiaban1()); +//// cowav.setXiaban2("未打卡"); }else{ log.info(cowav.getXiabanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime()); log.info(cowav.getXiabanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime()); @@ -1057,8 +1080,8 @@ public class DingdingService { if(cowav.getXiabanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && cowav.getXiabanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && cowav.getXiabanDate2() !=null && cowav.getXiaban2().equals("未打卡") ){ - cowav.setXiaban2(list.get("type").toString()); - } + + }cowav.setXiaban2(list.get("type").toString()); } } // 状态 diff --git a/src/com/seeyon/apps/src_qyba/FVCommonNode.java b/src/com/seeyon/apps/src_qyba/FVCommonNode.java index b779422..d85a796 100644 --- a/src/com/seeyon/apps/src_qyba/FVCommonNode.java +++ b/src/com/seeyon/apps/src_qyba/FVCommonNode.java @@ -82,7 +82,6 @@ public abstract class FVCommonNode extends ACommonSuperNode { String s = ""; Map parm = new HashMap(); if("CRM".equals(xttbvalue) || StringUtil.isEmpty(xttbvalue)){ - url = configVo.getParamVal(FVConstants.fvOldUrl.name()); // 设置附件路径 JSONArray filePath = fvService.getFilePath(formDataVo,configVo); // 参数封装 @@ -91,8 +90,7 @@ public abstract class FVCommonNode extends ACommonSuperNode { String userid = formDataVo.getFieldData("经办人").getStringValue(); s = FanWeiUtil.PostRestful(parm, userid,configVo); } if ("NCRM".equals(xttbvalue) || StringUtil.isEmpty(xttbvalue)){ - url = configVo.getParamVal(FVConstants.fvNewUrl.name()); - // 设置附件路径 +// 设置附件路径 JSONArray filePath = fvService.getFilePath(formDataVo,configVo); //封装参数 parm = FVService.createNewWF(filePath,formDataVo,configVo); diff --git a/src/com/seeyon/apps/src_qyba/vo/FVTongyongbeianNode.java b/src/com/seeyon/apps/src_qyba/FVTongyongbeianNode.java similarity index 78% rename from src/com/seeyon/apps/src_qyba/vo/FVTongyongbeianNode.java rename to src/com/seeyon/apps/src_qyba/FVTongyongbeianNode.java index a70a5a6..2cae823 100644 --- a/src/com/seeyon/apps/src_qyba/vo/FVTongyongbeianNode.java +++ b/src/com/seeyon/apps/src_qyba/FVTongyongbeianNode.java @@ -1,4 +1,4 @@ -package com.seeyon.apps.src_qyba.vo; +package com.seeyon.apps.src_qyba; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -11,6 +11,7 @@ import com.seeyon.apps.ext.workflow.vo.FormDataVo; import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; import com.seeyon.apps.src_qyba.constants.FVConstants; import com.seeyon.apps.src_qyba.service.FVService; +import com.seeyon.apps.src_qyba.service.FVTongyongService; import com.seeyon.apps.src_qyba.util.FanWeiUtil; import com.seeyon.cap4.form.bean.FormDataMasterBean; import com.seeyon.ctp.common.AppContext; @@ -61,7 +62,7 @@ public abstract class FVTongyongbeianNode extends ACommonSuperNode { @Override public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { SuperNodeContext context = new SuperNodeContext(); - log.info("进入区域备案处理超级节点中"); + log.info("进入备案审批结果回传处理超级节点中"); try { FieldDataVo fhjg = formDataVo.getFieldData("返回结果"); String value = fhjg.getStringValue(); @@ -80,25 +81,13 @@ public abstract class FVTongyongbeianNode extends ACommonSuperNode { FieldDataVo xttb = formDataVo.getFieldData("系统同步"); String xttbvalue = xttb.getStringValue(); String s = ""; - Map parm = new HashMap(); - if("CRM".equals(xttbvalue) || StringUtil.isEmpty(xttbvalue)){ - url = configVo.getParamVal(FVConstants.fvOldUrl.name()); -// 设置附件路径 - JSONArray filePath = fvService.getFilePath(formDataVo,configVo); -// 参数封装 - parm = FVService.createWF(filePath,formDataVo,configVo); - //调用新建接口 - String userid = formDataVo.getFieldData("经办人").getStringValue(); - s = FanWeiUtil.PostRestful(parm, userid,configVo); - } if ("NCRM".equals(xttbvalue) || StringUtil.isEmpty(xttbvalue)){ - url = configVo.getParamVal(FVConstants.fvNewUrl.name()); - // 设置附件路径 - JSONArray filePath = fvService.getFilePath(formDataVo,configVo); - //封装参数 - parm = FVService.createNewWF(filePath,formDataVo,configVo); - //调用新建接口 - String userid = formDataVo.getFieldData("经办人").getStringValue(); - s = FanWeiUtil.NewPostRestful(parm, userid,configVo); +// Map parm = new HashMap(); + //封装参数 + Map parm = FVTongyongService.createWF(formDataVo,configVo); + if("CRM".equals(xttbvalue)){ + s = FanWeiUtil.PostSubmitRestful(parm,configVo); + } if ("NCRM".equals(xttbvalue)){ + s = FanWeiUtil.NewPostSubmitRestful(parm,configVo); } JSONObject returnMsg = JSONObject.parseObject(s); Object code = returnMsg.get("code"); @@ -113,7 +102,7 @@ public abstract class FVTongyongbeianNode extends ACommonSuperNode { } else { // Map data = (Map) returnMsg.get("errMsg"); map.put("code", "300"); - map.put("msg", "新建流程失败!"+returnMsg.getString("msg")); + map.put("msg", "新建流程失败!"+returnMsg.getString("errMsg")); map.put("request", parm.toString()); map.put("response", s); } diff --git a/src/com/seeyon/apps/src_qyba/constants/FVConstants.java b/src/com/seeyon/apps/src_qyba/constants/FVConstants.java index ff561cc..7d16449 100644 --- a/src/com/seeyon/apps/src_qyba/constants/FVConstants.java +++ b/src/com/seeyon/apps/src_qyba/constants/FVConstants.java @@ -2,16 +2,17 @@ package com.seeyon.apps.src_qyba.constants; public enum FVConstants { plugin("src_qyba","插件ID"), - fvOldUrl("http://10.1.90.21:9083", "旧经销商平台地址"), - fvNewUrl("http://10.1.90.21:9083", "新经销商平台地址"), +// fvOldUrl("http://10.1.90.21:9083", "旧经销商平台地址"), +// fvNewUrl("http://10.1.90.21:9083", "新经销商平台地址"), workflowId("8521", "workflowId"), newWorkflowId("2026", "newWorkflowId"), dowurl("https://oa.dhx.com.cn/seeyon/rest/attachment/file", "dowurl"), addRess("https://crm.dhx9.com", "addRess"), - newAddRess("http://10.0.6.15:88", "newAddRess"), + newAddRess("https://crm.zwinfor.cn/", "newAddRess"), spk("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAymEn8vp0E8pg6op/WXJ4A67jHAYeUBtut8vJgk09t4Bw3kheWnHUjVHDBEZ8iC/iX9YyBzL76WZR+lpDqdFh2iKYk+yctHKc4dt9r0vw6HYMUWDrYmctdKJtdOGpWxz4apBr7Rc/2A3FDxwsiXzPqpG/GY+/1IHp7E3jEX0nxzuJn/YUm/SoSgfMB4NCHF9n3rrIsp4jJ5SOSwLr68nlwT3djF2f8vQcqRxmT0J7X2xKehlpeiubszQj5TeFcA+onkOBKkoKc+83G8Gg8J1IWZLsd50cjawrmg8lxl+UBEsPZHEh0AhWDHKLRG+9jyZJ94hoWaQRSgwEIdGyShNMnwIDAQAB", "SPK"), newspk("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvcOew5NM41jK7CFBnirP4Zz0QIexYEweS+4LTuQOVY+BqHu2EMxlPYRsjtvzZj7Pm9SsiNiEIeGXZ3mkAMbNNqu7G7kGb10pJzpBBTE80cRCY0bHoD3PhD8cBiKjpsRXJ+1mPdwD4fGEr0IcG6bKhBM3xsCmc4JiEvsv/+nPm9G7NQgoPGEKHkZk0IgyaBF5m6F2NKah92klxuz+vWCQoVsCpCjHN1sijQioWc6lRLgP7d6IZFEbOrLL7HdlOc8yKOAOZhURd78CqiVYBc1vP0pyC1/UW0Lq0f2MFpg/7Z18VwAf1vFUb+oiIdjFYMr5dgS+i784FaMUDzKUvndDWwIDAQAB", "NEWSPK"), tongyongApi("/api/workflow/paService/doCreateRequest", "tongyongApi"), + tongyonSubmitgApi("/api/workflow/paService/submitRequest", "tongyonSubmitgApi"), appId("oa", "appId"), secret("b44da0ec-6ba5-4d6e-b3d7-e0571b3bcdd6", "secret"), newSecret("6553bad7-51f0-4d56-af44-3d64a8ce9814", "newSecret"), diff --git a/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java b/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java new file mode 100644 index 0000000..e560917 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java @@ -0,0 +1,30 @@ +package com.seeyon.apps.src_qyba.node; + +import com.seeyon.apps.src_qyba.FVTongyongbeianNode; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/2/27 + */ +public class FVNewStateReturnNode extends FVTongyongbeianNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getNodeId() { + return "fvNewStateReturnNode"; + } + + @Override + public String getNodeName() { + return "新平台备案状态回传推送BIP"; + } +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java b/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java new file mode 100644 index 0000000..fe896f8 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java @@ -0,0 +1,30 @@ +package com.seeyon.apps.src_qyba.node; + +import com.seeyon.apps.src_qyba.FVTongyongbeianNode; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @Author: HuangZhengguo + * @Date: 2024/2/27 + */ +public class FVOldStateReturnNode extends FVTongyongbeianNode { + + @Override + public String getMethod() { + return ""; + } + + @Override + public String getNodeId() { + return "fvOldStateReturnNode"; + } + + @Override + public String getNodeName() { + return "老平台备案状态回传推送BIP"; + } +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java b/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java index 3748ce8..a1652ba 100644 --- a/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java +++ b/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java @@ -25,6 +25,6 @@ public class FVOldZhengceNode extends FVCommonNode { @Override public String getNodeName() { - return "老平台政策推送BIP"; + return "P老平台政策推送BI"; } } \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/service/FVService.java b/src/com/seeyon/apps/src_qyba/service/FVService.java index f5fb06f..99d517e 100644 --- a/src/com/seeyon/apps/src_qyba/service/FVService.java +++ b/src/com/seeyon/apps/src_qyba/service/FVService.java @@ -70,11 +70,6 @@ public class FVService { public static Map createWF( JSONArray faths, FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException, IOException { //主表信息 List mainlist = new ArrayList(); - //客户名称 -// JSONObject mainmap1 = new JSONObject(); -// mainmap1.put("fieldName","khmc");//OA字段名-出差类型(下拉框) -// mainmap1.put("fieldValue",formDataVo.getFieldData("客户id").getStringValue());//字段值(下拉框选项值) -// mainlist.add(mainmap1); //标题 Map mainmap2 = new HashMap(); diff --git a/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java b/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java new file mode 100644 index 0000000..d20fb80 --- /dev/null +++ b/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java @@ -0,0 +1,119 @@ +package com.seeyon.apps.src_qyba.service; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.daohuaxiangSys.jkts.util.InterfaceListUtil; +import com.seeyon.apps.daohuaxiangSys.jkts.util.PropKit; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.src_qyba.constants.FVConstants; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.IOException; +import java.util.*; + +public class FVTongyongService { + + private final static Log log = LogFactory.getLog(FVTongyongService.class); + + private AttachmentManager attachmentManager; + + public void setAttachmentManager(AttachmentManager attachmentManager) { + this.attachmentManager = attachmentManager; + } + + public AttachmentManager getAttachmentManagery() { + if (attachmentManager == null) { + attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + } + return attachmentManager; + } + + /** + * 创建流程 + */ + public static Map createWF(FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException, IOException { + //主表信息 + List mainlist = new ArrayList(); + + //备案类型 + Map mainmap = new HashMap(); + mainmap.put("fieldName","bayj"); + String type = formDataVo.getFieldData("备案").getStringValue(); + if("同意备案".equals(type)){ + mainmap.put("fieldValue","0"); + }else if ("不同意备案".equals(type)){ + mainmap.put("fieldValue","1"); + }else if ("满足条件备案".equals(type)){ + mainmap.put("fieldValue","2"); + } + String sfxwts = formDataVo.getFieldData("是否下委托书").getStringValue(); + if("是".equals(sfxwts)){ + mainmap.put("fieldValue","0"); + }else if ("否".equals(sfxwts)){ + mainmap.put("fieldValue","1"); + } + mainlist.add(mainmap); + + //接口主参数 + Map m = new LinkedHashMap(); + //工作流ID + m.put("workflowId", formDataVo.getFieldData("工作流ID").getStringValue()); + //流程请求ID + m.put("requestId", formDataVo.getFieldData("流程请求ID").getStringValue()); + //流程标题 + m.put("requestName",formDataVo.getColSummary().getSubject()); + //主表 + m.put("mainData", JSONUtil.toJsonStr(mainlist)); + log.info(m); + return m; + } + + /** + * 创建流程 + */ + public static Map createNewWF(FormDataVo formDataVo, ConfigVo configVo) throws NoSuchFieldException, IOException { + //主表信息 + List mainlist = new ArrayList(); + + //流程表单名 + Map tableDBName = new HashMap(); + tableDBName.put("tableDBName",formDataVo.getFieldData("流程表单名").getStringValue()); + mainlist.add(tableDBName); + + //备案类型 + Map mainmap = new HashMap(); + mainmap.put("fieldName","bayj"); + String type = formDataVo.getFieldData("备案").getStringValue(); + if("同意备案".equals(type)){ + mainmap.put("fieldValue","0"); + }else if ("不同意备案".equals(type)){ + mainmap.put("fieldValue","1"); + }else if ("满足条件备案".equals(type)){ + mainmap.put("fieldValue","2"); + } + mainlist.add(mainmap); + + //接口主参数 + Map m = new LinkedHashMap(); +// JSONObject p = new JSONObject(); + //工作流ID + m.put("workflowid", formDataVo.getFieldData("工作流ID").getStringValue()); + //流程请求ID + m.put("requestId", formDataVo.getFieldData("流程请求ID").getStringValue()); + //流程标题 + m.put("requestName",formDataVo.getColSummary().getSubject()); + //主表 + m.put("mainData",JSONUtil.toJsonStr(mainlist)); + log.info(m); + return m; + } + + +} \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/util/FanWeiUtil.java b/src/com/seeyon/apps/src_qyba/util/FanWeiUtil.java index 8b3c369..e2cc66f 100644 --- a/src/com/seeyon/apps/src_qyba/util/FanWeiUtil.java +++ b/src/com/seeyon/apps/src_qyba/util/FanWeiUtil.java @@ -70,10 +70,10 @@ public class FanWeiUtil { //调用ECOLOGY系统接口进行注册 String data = HttpRequest.post(address + "/api/ec/dev/auth/regist") - .header("appid",APPID) - .header("cpk",publicKey) - .timeout(2000) - .execute().body(); + .header("appid",APPID) + .header("cpk",publicKey) + .timeout(2000) + .execute().body(); // 打印ECOLOGY响应信息 log.info("Regist():"+data); @@ -124,7 +124,7 @@ public class FanWeiUtil { } /** - * 第三步: + * 第三步:新增 * * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 * @@ -168,29 +168,40 @@ public class FanWeiUtil { return data; } -// public static String getAPPID() { -// return APPID; -// } -// -// public static void setAPPID(String APPID) { -// FanWeiUtil.APPID = APPID; -// } -// -// public static String getPrivateKey() { -// return privateKey; -// } -// -// public static void setPrivateKey(String privateKey) { -// FanWeiUtil.privateKey = privateKey; -// } -// -// public static String getPublicKey() { -// return publicKey; -// } -// -// public static void setPublicKey(String publicKey) { -// FanWeiUtil.publicKey = publicKey; -// } + /** + * 第三步:提交 + * + * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 + * + * @param params 请求参数map,创建流程之类的post接口是以模拟form表单提交的方式,其他get接口以json字符串方式提交 + * + * 注意:ECOLOGY系统所有POST接口调用请求头请设置 "Content-Type","application/x-www-form-urlencoded; charset=utf-8" + */ + public static String PostSubmitRestful(Map params,ConfigVo configVo) throws IOException { + + //ECOLOGY返回的token + String token = (String) Getoken(configVo.getParamVal(FVConstants.addRess.name()),configVo).get("token"); + + //封装请求头参数 + RSA rsa = new RSA(null, configVo.getParamVal(FVConstants.spk.name())); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64("1",CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); + + //调用ECOLOGY系统接口 + log.info(configVo.getParamVal(FVConstants.addRess.name())); + log.info(configVo.getParamVal(FVConstants.tongyonSubmitgApi.name())); + log.info(configVo.getParamVal(FVConstants.appId.name())); + log.info(encryptUserid); + String data = HttpRequest.post(configVo.getParamVal(FVConstants.addRess.name()) + configVo.getParamVal(FVConstants.tongyonSubmitgApi.name())) + .header("appid",configVo.getParamVal(FVConstants.appId.name())) + .header("token",token) + .header("userid",encryptUserid) + // .header("skipsession", "1") + .form(params) + .execute().body(); + log.info("PostRestfulby():"+data); + return data; + } /** @@ -200,8 +211,6 @@ public class FanWeiUtil { */ public static Map NewGetoken(String address,ConfigVo configVo) throws IOException { // 从系统缓存或者数据库中获取ECOLOGY系统公钥和Secret信息 -// String secret = PropKit.getProp(PropKit.NEWSECRET); -// String spk = PropKit.getProp(PropKit.NEWSPK); String secret = configVo.getParamVal(FVConstants.newSecret.name()); String spk = configVo.getParamVal(FVConstants.newspk.name()); @@ -212,11 +221,6 @@ public class FanWeiUtil { String encryptSecret = rsa.encryptBase64(secret, CharsetUtil.CHARSET_UTF_8, KeyType.PublicKey); //调用ECOLOGY系统接口进行注册 -// String data = HttpRequest.post(address+ "/api/ec/dev/auth/applytoken") -// .header("appid",PropKit.getProp(PropKit.APPID)) -// .header("secret",encryptSecret) -// .header("time","3600") -// .execute().body(); String data = HttpRequest.post(address+ "/api/ec/dev/auth/applytoken") .header("appid",configVo.getParamVal(FVConstants.appId.name())) .header("secret",encryptSecret) @@ -234,7 +238,7 @@ public class FanWeiUtil { } /** - * 第三步: + * 第三步:新增 * * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 * @@ -250,40 +254,53 @@ public class FanWeiUtil { //封装请求头参数 -// RSA rsa = new RSA(null, PropKit.getProp(PropKit.NEWSPK)); RSA rsa = new RSA(null, configVo.getParamVal(FVConstants.newspk.name())); //对用户信息进行加密传输,暂仅支持传输OA用户ID String encryptUserid = rsa.encryptBase64(userid,CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); //调用ECOLOGY系统接口 -// String data = HttpRequest.post(PropKit.getProp(PropKit.NEWADDRESS) + PropKit.getProp(PropKit.TONGYONGAPI)) -// .header("appid",PropKit.getProp(PropKit.APPID)) -// .header("token",token) -// .header("userid",encryptUserid) -// // .header("skipsession", "1") -// .form(params) -// .execute().body(); String data = HttpRequest.post(configVo.getParamVal(FVConstants.newAddRess.name()) + configVo.getParamVal(FVConstants.tongyongApi.name())) .header("appid",configVo.getParamVal(FVConstants.appId.name())) .header("token",token) .header("userid",encryptUserid) - // .header("skipsession", "1") .form(params) .execute().body(); -// Map headermap = new HashMap(); -// headermap.put("appid",APPID); -// headermap.put("token",token); -// headermap.put("userid",encryptUserid); -// String data = HttpClientUtil.doPostFORM(address + api,headermap,params); log.info("PostRestfulby():"+data); return data; } + /** + * 第三步:提交 + * + * 调用ecology系统的rest接口,请求头部带上token和用户标识认证信息 + * + * @param params 请求参数map,创建流程之类的post接口是以模拟form表单提交的方式,其他get接口以json字符串方式提交 + * + * 注意:ECOLOGY系统所有POST接口调用请求头请设置 "Content-Type","application/x-www-form-urlencoded; charset=utf-8" + */ + public static String NewPostSubmitRestful(Map params,ConfigVo configVo) throws IOException { + //ECOLOGY返回的token + String token = (String) NewGetoken(configVo.getParamVal(FVConstants.newAddRess.name()),configVo).get("token"); + log.info(token); + //封装请求头参数 + RSA rsa = new RSA(null, configVo.getParamVal(FVConstants.newspk.name())); + //对用户信息进行加密传输,暂仅支持传输OA用户ID + String encryptUserid = rsa.encryptBase64("1",CharsetUtil.CHARSET_UTF_8,KeyType.PublicKey); - - - - + //调用ECOLOGY系统接口 + log.info(configVo.getParamVal(FVConstants.newAddRess.name())); + log.info(configVo.getParamVal(FVConstants.tongyonSubmitgApi.name())); + log.info(configVo.getParamVal(FVConstants.appId.name())); + log.info(encryptUserid); + String data = HttpRequest.post(configVo.getParamVal(FVConstants.newAddRess.name()) + configVo.getParamVal(FVConstants.tongyonSubmitgApi.name())) + .header("appid",configVo.getParamVal(FVConstants.appId.name())) + .header("token",token) + .header("userid",encryptUserid) + .form(params) + .execute().body(); + log.info("PostRestfulby():"+data); + return data; + } }