SyncStaffManageOSFService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package com.kingdee.eas.custom.beisen.synchronouspos.osf;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.google.common.collect.Maps;
  4. import com.kingdee.bos.BOSException;
  5. import com.kingdee.bos.Context;
  6. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  7. import com.kingdee.bos.rabbitmq.guava.Lists;
  8. import com.kingdee.eas.common.EASBizException;
  9. import com.kingdee.eas.custom.beisen.utils.BeiSenUtils;
  10. import com.kingdee.eas.custom.beisen.utils.BeisenParamByPropertiesUtil;
  11. import com.kingdee.eas.custom.beisen.utils.Helper;
  12. import com.kingdee.eas.util.app.DbUtil;
  13. import com.kingdee.jdbc.rowset.IRowSet;
  14. import java.io.IOException;
  15. import java.net.URISyntaxException;
  16. import java.net.URLEncoder;
  17. import java.sql.SQLException;
  18. import java.util.HashMap;
  19. import java.util.List;
  20. import java.util.Map;
  21. /**
  22. * 编制同步
  23. * description: SynchronousPosOSFService <br>
  24. * date: 2025/7/11 17:46 <br>
  25. * author: lhbj <br>
  26. * version: 1.0 <br>
  27. */
  28. public class SyncStaffManageOSFService implements IHRMsfService {
  29. public Map<String,List<Map<String,Object>>> orgProcess(Context context,List<Map<String,Object>> orgListMap) throws IOException, URISyntaxException {
  30. return new StaffManageProcess().orgProcess(context,orgListMap);
  31. }
  32. public Map<String,List<Map<String,Object>>> posProcess(Context context,List<Map<String,Object>> posListMap) throws IOException, URISyntaxException {
  33. return new StaffManageProcess().posProcess(context,posListMap);
  34. }
  35. @Override
  36. public Object process(Context context, Map<String, Object> map) throws EASBizException, BOSException {
  37. String mack = (String) map.get("mack");
  38. Map<String,List<Map<String,Object>>> result = Maps.newHashMap();
  39. List<Map<String,Object>> list = Lists.newArrayList();
  40. List<Map<String,Object>> listMap = Lists.newArrayList();
  41. List<Map<String,Object>> orgListMap = Lists.newArrayList();
  42. List<Map<String,Object>> posListMap = Lists.newArrayList();
  43. result.put("list",list);
  44. result.put("listMap",listMap);
  45. String posPath = (String) map.get("posPath");
  46. String orgPath = (String) map.get("orgPath");
  47. StringBuilder sql = new StringBuilder();
  48. sql.append(" ");
  49. sql.append(" select fid,FYear,FTableName from T_HR_StaffManageProject ");
  50. sql.append(" where FRule in ( ");
  51. sql.append(" select fid from T_HR_StaffManageRule where fid in ( ");
  52. sql.append(" select FStaffManageRuleId from T_HR_STAFFMANAGERULEFIELD where FColumn in ('FpositionID', 'FAdminOrgID') group by FStaffManageRuleId HAVING count(fid)>1 ");
  53. sql.append(" ) and FState = 1 ");
  54. sql.append(" ) ");
  55. sql.append(" and FState = 1 ");
  56. sql.append(" and FChannel = 1 ");
  57. IRowSet rs = DbUtil.executeQuery(context, sql.toString());
  58. try{
  59. BeisenParamByPropertiesUtil posUtil = new BeisenParamByPropertiesUtil(posPath);
  60. Map<String,String> poskeyMap = posUtil.getConfig();
  61. BeisenParamByPropertiesUtil orgUtil = new BeisenParamByPropertiesUtil(orgPath);
  62. Map<String,String> orgkeyMap = orgUtil.getConfig();
  63. while (rs.next()) {
  64. String fid = rs.getString("fid");
  65. String FTableName = rs.getString("FTableName");
  66. String FYear = rs.getString("FYear");
  67. StringBuilder selSql = new StringBuilder();
  68. selSql.append(" select * from ( ");
  69. selSql.append(" select 'org' orgpos,org.fid posId,org.Fnumber orgOriginalId,org.FParentID,org.fname_l2 orgPosName,org.FDisplayName_L2 staffName, ");
  70. selSql.append(" org.Fnumber CFOriginalId, ");
  71. //selSql.append(" (case when staff.FControlWay=0 then 3 when staff.FControlWay=1 then 2 else 1 end) FControlWay, ");
  72. selSql.append(" staff.FControlWay FControlWay, ");
  73. selSql.append(" staff.FPersonCount,staff.FStaffYear,staff.FYearActualStart, ");
  74. selSql.append(" staff.FOnWayAddCount,staff.FOnWaySubCount, ");
  75. selSql.append(" (staff.FStaffYear-staff.FOnWayAddCount+staff.FOnWaySubCount-staff.FPersonCount) FStaffYearUsable, ");
  76. selSql.append(" (staff.FState) FState,staff.FContainSub, ");
  77. selSql.append(" 1 orgPosStatus ");
  78. selSql.append(" from ");
  79. selSql.append(" "+FTableName+" staff ");
  80. selSql.append(" left join t_org_admin org on org.fid=staff.FAdminOrgID ");
  81. selSql.append(" left join t_org_position pos on pos.fid = staff.FpositionID ");
  82. selSql.append(" where pos.fid is null and org.FReserveFieldFirst is not null ");
  83. selSql.append(" UNION all ");
  84. selSql.append(" select 'pos' orgpos,pos.fid posId,org.FreserveFieldFirst orgOriginalId,pos.FParentID,pos.fname_l2 orgPosName,org.FDisplayName_L2 staffName,pos.CFOriginalId, ");
  85. //selSql.append(" (case when staff.FControlWay=0 then 3 when staff.FControlWay=1 then 2 else 1 end) FControlWay, ");
  86. selSql.append(" staff.FControlWay FControlWay, ");
  87. selSql.append(" staff.FPersonCount,staff.FStaffYear,staff.FYearActualStart, ");
  88. selSql.append(" staff.FOnWayAddCount,staff.FOnWaySubCount, ");
  89. selSql.append(" (staff.FStaffYear-staff.FOnWayAddCount+staff.FOnWaySubCount-staff.FPersonCount) FStaffYearUsable, ");
  90. selSql.append(" (staff.FState) FState,staff.FContainSub, ");
  91. selSql.append(" (case when pos.FDELETEDSTATUS=2 then 0 else 1 end) orgPosStatus ");
  92. selSql.append(" from ");
  93. selSql.append(" "+FTableName+" staff ");
  94. selSql.append(" left join t_org_position pos on pos.fid = staff.FpositionID ");
  95. selSql.append(" left join t_org_admin org on org.fid=pos.FADMINORGUNITID ");
  96. selSql.append(" where pos.fid is not null and pos.CFOriginalId is not null ");
  97. selSql.append(" ) t order by t.FContainSub desc ");
  98. IRowSet rsSel = DbUtil.executeQuery(context, selSql.toString());
  99. // 获取访问令牌
  100. while (rsSel.next()){
  101. String orgpos= rsSel.getString("orgpos");
  102. if("org".equals(orgpos)){
  103. Map<String, Object> pos = this.getPostData(orgkeyMap,rsSel);
  104. if(null!=pos){
  105. orgListMap.add(pos);
  106. }
  107. }else if ("pos".equals(orgpos)){
  108. Map<String, Object> pos = this.getPostData(poskeyMap,rsSel);
  109. if(null!=pos){
  110. posListMap.add(pos);
  111. }
  112. }
  113. }
  114. if("org".equals(mack)||"pos".equals(mack)){
  115. //Map<String,List<Map<String,Object>>> resultOrg = this.orgProcess(context,orgListMap);
  116. result.put("orgListMap",orgListMap);
  117. result.put("posListMap",posListMap);
  118. } else {
  119. result.put("orgListMap",orgListMap);
  120. result.put("posListMap",posListMap);
  121. Map<String,List<Map<String,Object>>> resultOrg = this.orgProcess(context,orgListMap);
  122. Map<String,List<Map<String,Object>>> resultPos = this.posProcess(context,posListMap);
  123. list.addAll(resultOrg.get("list"));
  124. listMap.addAll(resultOrg.get("listMap"));
  125. list.addAll(resultPos.get("list"));
  126. listMap.addAll(resultPos.get("listMap"));
  127. result.put("orgListMap",orgListMap);
  128. result.put("posListMap",posListMap);
  129. }
  130. }
  131. }catch (Exception e){
  132. e.printStackTrace();
  133. throw new BOSException(e);
  134. }finally {
  135. }
  136. return result;
  137. }
  138. /**
  139. * shr系统数据组装北森请求参数
  140. *
  141. * @param keyMap
  142. * @param rowSet
  143. * @return
  144. * @throws SQLException
  145. */
  146. protected Map<String, Object> getPostData(Map<String,String> keyMap, IRowSet rowSet) throws SQLException {
  147. Map<String, Object> pos = Maps.newHashMap();
  148. if (null!=rowSet){
  149. for(Map.Entry<String,String> entry : keyMap.entrySet()){
  150. String shrKey = entry.getKey();
  151. String beisenKey = entry.getValue();
  152. if(shrKey.indexOf(".")>0){
  153. String[] keys=shrKey.split("\\.");
  154. if(2==keys.length){
  155. Map<String,Object> map1 = (Map<String, Object>) pos.get(keys[0]);
  156. if(null==map1){
  157. map1=Maps.newHashMap();
  158. pos.put(keys[0],map1);
  159. }
  160. String valueStr = rowSet.getString(keys[1]);
  161. if(beisenKey.indexOf(",")>0) {
  162. String[] beisenKeys = beisenKey.split(",");
  163. Object value = null;
  164. if("integer".equals(beisenKeys[1])){
  165. if(null!=valueStr){
  166. value=Integer.parseInt(valueStr);
  167. }
  168. }else {
  169. value = valueStr;
  170. }
  171. if(null!=value) {
  172. map1.put(beisenKeys[0], value);
  173. }
  174. }else {
  175. if(null!=valueStr) {
  176. map1.put(beisenKey, valueStr);
  177. }
  178. }
  179. }else if (3==keys.length){
  180. Map<String,Object> map1 = (Map<String, Object>) pos.get(keys[0]);
  181. if(null==map1){
  182. map1=Maps.newHashMap();
  183. pos.put(keys[0],map1);
  184. }
  185. Map<String,Object> map2 = (Map<String, Object>) map1.get(keys[1]);
  186. if(null==map2){
  187. map2=Maps.newHashMap();
  188. map1.put(keys[1],map1);
  189. }
  190. String valueStr = rowSet.getString(keys[2]);
  191. if(beisenKey.indexOf(",")>0) {
  192. String[] beisenKeys = beisenKey.split(",");
  193. Object value = null;
  194. if("integer".equals(beisenKeys[1])){
  195. if(null!=valueStr){
  196. value=Integer.parseInt(valueStr);
  197. }
  198. }else {
  199. value = valueStr;
  200. }
  201. if(null!=value) {
  202. map2.put(beisenKeys[0], value);
  203. }
  204. }else {
  205. if(null!=valueStr) {
  206. map2.put(beisenKey,valueStr);
  207. }
  208. }
  209. }
  210. }else {
  211. String valueStr = rowSet.getString(shrKey);
  212. if(beisenKey.indexOf(",")>0) {
  213. String[] beisenKeys = beisenKey.split(",");
  214. Object value = null;
  215. if("integer".equals(beisenKeys[1])){
  216. if(null!=valueStr){
  217. value=Integer.parseInt(valueStr);
  218. }
  219. }else {
  220. value = valueStr;
  221. }
  222. if(null!=value) {
  223. pos.put(beisenKeys[0],value);
  224. }
  225. }else {
  226. if(null!=valueStr) {
  227. pos.put(beisenKey,valueStr);
  228. }
  229. }
  230. }
  231. }
  232. }
  233. return pos;
  234. }
  235. }