95013a9d148cccab55ef974e9f00719d04b335fe.svn-base 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. package com.kingdee.eas.custom.erp.util;
  2. import java.sql.SQLException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.List;
  7. import java.util.Properties;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import com.alibaba.fastjson.JSONArray;
  11. import com.alibaba.fastjson.JSONObject;
  12. import com.kingdee.bos.BOSException;
  13. import com.kingdee.bos.Context;
  14. import com.kingdee.bos.qing.util.StringUtils;
  15. import com.kingdee.eas.util.app.DbUtil;
  16. import com.kingdee.jdbc.rowset.IRowSet;
  17. public class SynPositionToErpUtils {
  18. private static Logger log = LoggerFactory.getLogger(SynPositionToErpUtils.class);
  19. private static String ierp = "https://sites.gtiit.edu.cn/kderpdev/ierp";
  20. private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  21. // 创建SimpleDateFormat实例来格式化日期
  22. private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  23. /**
  24. * 新增:获取gt15_adminorg_add的请求地址
  25. * @param request
  26. * @param code
  27. * @return
  28. */
  29. public static String getGt15BosPositionAddUrl() {
  30. Properties config = SynPublicUtils.getConfig();
  31. ierp = (String)config.get("ierp");
  32. return new StringBuffer().append(ierp).append("/kapi/v2/gt15/base/bos_position/gt15_bos_position_add").toString();
  33. }
  34. /**
  35. * 封存:获取gt15_adminorg_beta的请求地址: https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_adminorg/gt15_adminorg_beta
  36. * @param request
  37. * @param code
  38. * @return https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_position/gt15_bos_position_disable
  39. */
  40. public static String getBosPositionDisableUrl() {
  41. Properties config = SynPublicUtils.getConfig();
  42. ierp = (String)config.get("ierp");
  43. return new StringBuffer().append(ierp).append("/kapi/v2/gt15/base/bos_position/gt15_bos_position_disable").toString();
  44. }
  45. /**
  46. * 主体:新增:推送数据到ERP功能:主体
  47. * @return
  48. * @throws Exception
  49. */
  50. public static void synPostionToErp(Context ctx ,String startDate, String endDate) throws Exception{
  51. //获取appToken
  52. String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
  53. log.info("synPostionToErp.appToken:"+appToken);
  54. //获取accessToken
  55. String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
  56. log.info("synPostionToErp.accessToken状态为:"+accessToken);
  57. //岗位明细保存接口
  58. gt15_bos_position_add(ctx,accessToken,startDate,endDate);
  59. }
  60. /**
  61. * 禁用:禁用根据编码禁用岗位:主体
  62. * @param ctx
  63. * @return
  64. * @throws Exception
  65. */
  66. public static String synPositionDisableToErp(Context ctx,String startDate, String endDate) throws Exception{
  67. //获取appToken
  68. String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
  69. log.info("SynPositionToErpUtils.appToken:"+appToken);
  70. //获取accessToken
  71. String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
  72. log.info("SynPositionToErpUtils.accessToken为:"+accessToken);
  73. //薪酬明细保存接口
  74. bosPositionDisable(ctx,accessToken, startDate, endDate);
  75. log.info("SynPositionToErpUtils.responseMsg:"+accessToken);
  76. return "";
  77. }
  78. /**
  79. * 新增:新增岗位接口,推送到星瀚
  80. * @param ctx
  81. * @param accessToken
  82. * @throws Exception
  83. */
  84. public static String gt15_bos_position_add(Context ctx,String accessToken,String startDate, String endDate) throws Exception{
  85. //获取请求地址
  86. String gt15BosPositionAddUrl = getGt15BosPositionAddUrl();
  87. log.info("SynPositionToErpUtils.gt15_bos_position_add.gt15BosPositionAddUrl:"+gt15BosPositionAddUrl);
  88. //构建行政组织参数
  89. String paramJOStr = getBosPositionDetailEntry(ctx,startDate,endDate);
  90. log.info("SynPositionToErpUtils.gt15_adminorg_add.paramJOStr:"+paramJOStr);
  91. if(StringUtils.isEmpty(paramJOStr)){
  92. //为空不请求
  93. return "";
  94. }
  95. //数据保存接口
  96. String responseMsg = HttpsReqUtil.postByHttps(gt15BosPositionAddUrl, paramJOStr, accessToken);
  97. return responseMsg;
  98. }
  99. /**
  100. * 禁用:根据编码禁用岗位
  101. * @param ctx
  102. * @param accessToken
  103. * @return
  104. * @throws Exception
  105. */
  106. public static void bosPositionDisable(Context ctx,String accessToken,String startDate, String endDate) throws Exception{
  107. //获取请求地址
  108. String gtBosPositionDisableUrl = getBosPositionDisableUrl();
  109. log.info("SynPositionToErpUtils.bosPositionDisable.gtBosPositionDisableUrl:"+gtBosPositionDisableUrl);
  110. //构建行政组织参数
  111. List<String> numbers =getBosPositionDisableDetailEntry(ctx, startDate, endDate);
  112. log.info("SynPositionToErpUtils.bosPositionDisable.numbers:"+numbers.size());
  113. for(String number : numbers){
  114. String paramJOStr = getParamJOStrByNumber(number);
  115. //数据保存接口
  116. String responseMsg = HttpsReqUtil.postByHttps(gtBosPositionDisableUrl, paramJOStr, accessToken);
  117. }
  118. }
  119. /**
  120. * 封存:通过编码获取
  121. * @param numbers
  122. * @return
  123. */
  124. public static String getParamJOStrByNumber(String number){
  125. JSONObject data = new JSONObject();
  126. data.put("number", number);
  127. JSONObject paramJO = new JSONObject();
  128. paramJO.put("data",data);
  129. String paramJOStr = paramJO.toString();
  130. return paramJOStr;
  131. }
  132. /**
  133. * 禁用:获取禁用岗位的请求参数
  134. * @param ctx
  135. * @return
  136. * @throws BOSException
  137. * @throws SQLException
  138. */
  139. public static List<String> getBosPositionDisableDetailEntry(Context ctx ,String startDateStr, String endDateStr) throws BOSException, SQLException{
  140. //获取前一天的0点时间字符串
  141. String lastDateZeroTimeStr = "";
  142. //获取当前时间的字符串
  143. String noeTimeStr = "";
  144. if(StringUtils.isEmpty(startDateStr)|| StringUtils.isEmpty(endDateStr) ){
  145. //获取上次同步结束的时间
  146. lastDateZeroTimeStr = SynPublicUtils.getLastUpdateSynTableTimeStrByEvenName(ctx,"synPositionDisable");
  147. if(StringUtils.isEmpty(lastDateZeroTimeStr)){
  148. //为空
  149. //获取前一天的0点时间字符串
  150. lastDateZeroTimeStr = SynPublicUtils.getLastDateZeroTime();
  151. }
  152. //更新最新 的时间为event_timeStamp,只有在自动触发的才会修改时间
  153. SynPublicUtils.updateSynTimeTable(ctx,"synPositionDisable");
  154. //获取当前时间的字符串
  155. noeTimeStr = SynPublicUtils.getNowTimeStr();
  156. }else{
  157. lastDateZeroTimeStr = startDateStr;
  158. noeTimeStr = endDateStr;
  159. }
  160. String sql = " select fnumber as number from T_ORG_Position where fdeletedstatus = 2 " +
  161. " and (flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and flastupdatetime <= {ts '"+noeTimeStr+"'})";
  162. log.info("getBosPositionDisableDetailEntry.sql"+sql);
  163. IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
  164. List<String> numbers = new ArrayList<String>();
  165. if(executeQuery.size()>0){
  166. while(executeQuery.next()){
  167. String number = executeQuery.getString("number");
  168. numbers.add(number);
  169. }
  170. }
  171. return numbers;
  172. }
  173. /**
  174. * 获取上次同步结束的时间
  175. * @param ctx
  176. * @param evenName
  177. * @throws BOSException
  178. * @throws SQLException
  179. */
  180. private static String getLastUpdateSynTableTimeStrByEvenName(Context ctx,String evenName) throws BOSException, SQLException{
  181. String sql = "select event_timestamp as evenTimeStamp from T_HR_SynTimeTable where event_name = '"+evenName+"'";
  182. IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
  183. Date evenTimeStamp = null;
  184. if(executeQuery.size()>0){
  185. while(executeQuery.next()){
  186. evenTimeStamp = executeQuery.getDate("evenTimeStamp");
  187. }
  188. }
  189. String lastUpdateTimeStr = "";
  190. if(evenTimeStamp != null){
  191. lastUpdateTimeStr = dateFormat.format(evenTimeStamp);
  192. }
  193. return lastUpdateTimeStr;
  194. }
  195. /**
  196. * 获取当前时间的字符串
  197. * @return
  198. */
  199. private static String getNowTimeStr(){
  200. // 获取当前时间
  201. Date now = new Date();
  202. // 创建SimpleDateFormat实例来格式化日期
  203. // 这里使用"yyyy-MM-dd HH:mm:ss"作为日期时间格式
  204. // 格式化日期并获取字符串
  205. String formattedDateTime = dateFormat.format(now);
  206. return formattedDateTime;
  207. }
  208. /**
  209. * 获取岗位接口 参数,查询,并构建参数
  210. * @param ctx
  211. * @return
  212. * @throws BOSException
  213. * @throws SQLException
  214. */
  215. private static String getBosPositionDetailEntry(Context ctx,String startDateStr,String endDateStr) throws BOSException, SQLException{
  216. //获取前一天的0点时间字符串
  217. String lastDateZeroTimeStr = "";
  218. //获取当前时间的字符串
  219. String noeTimeStr = "";
  220. if(StringUtils.isEmpty(startDateStr)|| StringUtils.isEmpty(endDateStr) ){
  221. //获取上次同步结束的时间
  222. lastDateZeroTimeStr = SynPublicUtils.getLastUpdateSynTableTimeStrByEvenName(ctx,"SynPosition");
  223. if(StringUtils.isEmpty(lastDateZeroTimeStr)){
  224. //为空
  225. //获取前一天的0点时间字符串
  226. lastDateZeroTimeStr = SynPublicUtils.getLastDateZeroTime();
  227. }
  228. //更新最新 的时间为event_timeStamp,只有在自动触发的才会修改时间
  229. SynPublicUtils.updateSynTimeTable(ctx,"SynPosition");
  230. //获取当前时间的字符串
  231. noeTimeStr = SynPublicUtils.getNowTimeStr();
  232. }else{
  233. lastDateZeroTimeStr = startDateStr;
  234. noeTimeStr = endDateStr;
  235. }
  236. String sql = "/*dialect*/select position.fnumber as number ,position.fname_l1, position.fname_l2,position.fname_l3,admin.fnumber as dpt_number,position2.fnumber as superiorposition_number,position.fdescription_l1 as description_l1,position.fdescription_l2 as description_l2,position.fdescription_l3 as description_l3,position.fisRespPosition isRespPosition from T_ORG_Position position " +
  237. " left join T_org_admin admin on admin.fid = position.fadminorgunitid" +
  238. " left join T_ORG_Position position2 on position2.fid = position.fparentid " +
  239. " where ( (position.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and position.flastupdatetime <= {ts '"+noeTimeStr+"'} )" +
  240. " or (admin.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and admin.flastupdatetime <= {ts '"+noeTimeStr+"'} )" +
  241. " or (position2.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and position2.flastupdatetime <= {ts '"+noeTimeStr+"'} )) ";
  242. //" and position.fnumber = 'IT-2016008'";
  243. log.info("getBosPositionDetailEntry.sql:"+sql);
  244. IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
  245. JSONArray datas = new JSONArray();
  246. String paramJOStr = "";
  247. if(executeQuery.size()>0){
  248. while(executeQuery.next()){
  249. String number = executeQuery.getString("number");
  250. String name_l1 = executeQuery.getString("fname_l1");
  251. String name_l2 = executeQuery.getString("fname_l2");
  252. String name_l3 = executeQuery.getString("fname_l3");
  253. String dpt_number = executeQuery.getString("dpt_number");
  254. String superiorposition_number = executeQuery.getString("superiorposition_number");
  255. String description_l1 = executeQuery.getString("description_l1");
  256. String description_l2 = executeQuery.getString("description_l2");
  257. String description_l3 = executeQuery.getString("description_l3");
  258. boolean isRespPosition = executeQuery.getBoolean("isRespPosition");
  259. log.info("getBosPositionDetailEntry.isRespPosition:"+isRespPosition);
  260. JSONObject data = new JSONObject();
  261. data.put("number",number);
  262. JSONObject name = new JSONObject();
  263. name.put("en_US", name_l1);
  264. name.put("zh_CN", name_l2);
  265. name.put("zh_TW", name_l3);
  266. data.put("name",name);
  267. data.put("dpt_number", dpt_number);
  268. data.put("superiorposition_number", superiorposition_number);
  269. data.put("ismainposition", isRespPosition);
  270. /*JSONObject remark = new JSONObject();
  271. remark.put("en_US", description_l1);
  272. remark.put("zh_CN", description_l2);
  273. remark.put("zh_TW", description_l3);
  274. data.put("remarks",remark);*/
  275. datas.add(data);
  276. }
  277. JSONObject paramJO = new JSONObject();
  278. paramJO.put("data",datas);
  279. paramJOStr = paramJO.toString();
  280. }
  281. return paramJOStr;
  282. }
  283. }