NetEasyService.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. package com.uas.eis.serviceImpl;
  2. import com.netease.qiye.qiyeopenplatform.common.constant.ResultEnum;
  3. import com.netease.qiye.qiyeopenplatform.common.dto.open.account.AccountResp;
  4. import com.netease.qiye.qiyeopenplatform.common.dto.open.mailbox.MailBoxUnreadMsgResp;
  5. import com.netease.qiye.qiyeopenplatform.common.dto.open.unit.UnitAccountResp;
  6. import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK;
  7. import com.netease.qiye.qiyeopenplatform.sdk.dto.Q;
  8. import com.netease.qiye.qiyeopenplatform.sdk.dto.R;
  9. import com.netease.qiye.qiyeopenplatform.sdk.util.CommonUtils;
  10. import com.uas.eis.core.config.NetEasyConfig;
  11. import com.uas.eis.dao.BaseDao;
  12. import com.uas.eis.dto.CreateUnitResp;
  13. import com.uas.eis.dto.GetUnitListDTO;
  14. import com.uas.eis.dto.UpdateEmpReq;
  15. import com.uas.eis.entity.Employee;
  16. import com.uas.eis.entity.HrOrg;
  17. import com.uas.eis.sdk.NetEasySDK;
  18. import com.uas.eis.utils.JacksonUtil;
  19. import com.uas.eis.utils.PinyinUtils;
  20. import com.uas.eis.utils.StringUtil;
  21. import org.slf4j.Logger;
  22. import org.slf4j.LoggerFactory;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.context.annotation.Lazy;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.util.StringUtils;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import java.util.Map;
  30. import java.util.Optional;
  31. @Service
  32. public class NetEasyService {
  33. @Autowired
  34. @Lazy
  35. private NetEasySDK netEasySDK;
  36. @Autowired
  37. private NetEasyConfig netEasyConfig;
  38. @Autowired
  39. private UasSyncService uasSyncService;
  40. @Autowired
  41. private BaseDao baseDao;
  42. private final Logger logger = LoggerFactory.getLogger(getClass());
  43. /**
  44. * 单点登录
  45. * */
  46. public String ssoLogin(String accountName){
  47. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  48. Q q = Q.init(null)
  49. .addParam("domain", netEasyConfig.getDomain())
  50. .addParam("accountName", accountName)
  51. .addParam("pass_2fa", 1)
  52. .addHeader("qiye-sso-auth-token", netEasySDK.getSsoAuthToken());
  53. R<Map> mapR = instanceSDK.commonInvoke(q, "/api/sso/ssoSign");
  54. if (!mapR.getCode().equals(ResultEnum.SUCCESS.getCode())) {
  55. throw new RuntimeException("调用单点登录异常," + mapR.getCode() + ":" + mapR.getMessage());
  56. }
  57. String ssoSign = (String) mapR.getData().get("sign");
  58. String endpoint = (String) mapR.getData().get("endpoint");
  59. String lang = "0";
  60. return endpoint + "?sso_token=" + ssoSign + "&lang=" + lang+"&module=mbox.ListModule%7C%7B%22fid%22%3A1%2C%22order%22%3A%22date%22%2C%22desc%22%3Atrue%7D";
  61. }
  62. /**
  63. * 同步人员资料
  64. * */
  65. public void syncEmployee(){
  66. List<Employee> employeeList = uasSyncService.getNetEasyUserList();
  67. for (Employee employee : employeeList) {
  68. if(StringUtil.hasText(employee.getEm_neteasyid())) {
  69. if(!"离职".equals(employee.getEm_class())) {
  70. updateNetEasyEmployee(employee);
  71. if(employee.getEm_neteasystatus() == 0) {
  72. recoverNetEasyEmployee(employee);
  73. }
  74. }else {
  75. if(employee.getEm_neteasystatus()==-1) {
  76. disableNetEasyEmployee(employee);
  77. }
  78. }
  79. }else{
  80. if(employee.getEm_isneteasy() != null && employee.getEm_isneteasy() == -1){
  81. //开通账号
  82. createNetEasyEmployee(employee);
  83. }
  84. }
  85. }
  86. }
  87. /**
  88. * 创建账号信息
  89. * */
  90. public void createNetEasyEmployee(Employee employee){
  91. logger.info("创建邮箱账号:{}",employee.toString());
  92. /* AccountResp getAccountResp = getNetEasyEmployee(employee);
  93. if(getAccountResp != null){
  94. if (getAccountResp.getStatus() == 0){
  95. //账号正常
  96. baseDao.updateByCondition("employee","em_neteasyid='"+getAccountResp.getAccountName()+"'","em_code='"+employee.getEm_code()+"'");
  97. logger.info("账号已存在,更新人员信息:{}",employee.toString());
  98. return;
  99. }else if(getAccountResp.getStatus() == 1){
  100. //账号禁用恢复账号
  101. employee.setEm_neteasyid(getAccountResp.getAccountName());
  102. recoverNetEasyEmployee(employee);
  103. baseDao.updateByCondition("employee","em_neteasyid='"+getAccountResp.getAccountName()+"'","em_code='"+employee.getEm_code()+"'");
  104. return;
  105. }
  106. }*/
  107. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  108. String initAccount = getNetEasyID(employee);
  109. Q q = Q.init(null)
  110. .addParam("domain", netEasyConfig.getDomain())
  111. .addParam("accountName", initAccount)
  112. .addParam("name", employee.getEm_name())
  113. .addParam("job", employee.getEm_position())
  114. .addParam("jobNumber", employee.getEm_code())
  115. .addParam("unitId", employee.getOrneteasyid());
  116. String initPWD = employee.getEm_password();
  117. if(! StringUtil.hasText(initPWD) || initPWD.length() <8 || ! hasThreeCharacterTypes(initPWD)){
  118. //初始密码拼音+系统账号+SI
  119. initPWD = initAccount+employee.getEm_code()+"SI";
  120. q.addParam("password", initAccount+employee.getEm_code()+"SI");
  121. }else{
  122. q.addParam("password", initPWD);
  123. }
  124. if(StringUtil.hasText(employee.getEm_mobile())){
  125. q.addParam("mobile", employee.getEm_mobile());
  126. }
  127. R r = instanceSDK.commonInvoke(q, "/api/open/account/createAccount");
  128. if(StringUtil.hasText(employee.getEm_name())){}
  129. if(ResultEnum.SUCCESS.getCode() == r.getCode()){
  130. AccountResp accountResp = (AccountResp) r.getDataBean(AccountResp.class);
  131. baseDao.updateByCondition("employee","em_neteasystatus=-1,em_neteasyid='"+accountResp.getAccountName()+"'","em_code='"+employee.getEm_code()+"'");
  132. baseDao.execute("insert into UAPPROVALMSG(ID_,TYPE_,TITLE_,MSG_,EMS_) " +
  133. "select UAPPROVALMSG_SEQ.NEXTVAL,'TEXT','邮箱开通提醒','"+employee.getEm_name()+" 您的企业邮箱账号已创建\n" +
  134. "账号:"+initAccount+"@sisemi.com.cn\n" +
  135. "初始密码:"+initPWD+"\n" +
  136. "登录地址:https://mail.sisemi.com.cn/\n" +
  137. "您也可以通过UAS系统首页-->右上角 网易邮箱 进行SSO免密登录。',em_qywx" +
  138. " from employee where em_code='"+employee.getEm_code()+"' and em_qywx is not null");
  139. logger.info("创建账号成功,账号名称:{}",employee.getEm_name());
  140. }else {
  141. logger.info("创建账号失败,账号名称:{},错误信息:{}",employee.getEm_name(),r.getMessage());
  142. }
  143. }
  144. /**
  145. * 更新账号信息
  146. * */
  147. public void updateNetEasyEmployee(Employee employee){
  148. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  149. Q q1 = Q.init(null)
  150. .addParam("domain", netEasyConfig.getDomain())
  151. .addParam("jobNumber", employee.getEm_code())
  152. .addParam("accountName", employee.getEm_neteasyid());
  153. if (StringUtils.hasText(employee.getEm_position())){
  154. q1.addParam("job", employee.getEm_position());
  155. }
  156. if (StringUtils.hasText(employee.getEm_name())){
  157. q1.addParam("name", employee.getEm_name());
  158. }
  159. if (StringUtils.hasText(employee.getOrneteasyid())){
  160. q1.addParam("unitId", employee.getOrneteasyid());
  161. }
  162. /* if(StringUtil.hasText(employee.getEm_mobile())){
  163. q1.addParam("mobile", employee.getEm_mobile());
  164. }*/
  165. R r2 = instanceSDK.commonInvoke(q1, "/api/open/account/updateAccount");
  166. if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
  167. logger.info("更新账号信息成功,账号信息:{}",employee.toString());
  168. }else {
  169. logger.info("更新账号信息失败,账号名称:{},错误信息:{}",employee.toString(),r2.getMessage());
  170. }
  171. }
  172. /**
  173. * 禁用账号信息
  174. * */
  175. public void disableNetEasyEmployee(Employee employee){
  176. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  177. Q q1 = Q.init(null)
  178. .addParam("domain", netEasyConfig.getDomain())
  179. .addParam("accountName", employee.getEm_neteasyid());
  180. R r2 = instanceSDK.commonInvoke(q1, "/api/open/account/suspendAccount");
  181. if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
  182. //禁用邮箱不更新ID
  183. baseDao.updateByCondition("employee","em_neteasystatus=0","em_code='"+employee.getEm_code()+"'");
  184. logger.info("禁用账号成功,账号信息:{}",employee.toString());
  185. }else {
  186. logger.info("禁用账号失败,账号名称:{},错误信息:{}",employee.toString(),r2.getMessage());
  187. }
  188. }
  189. /**
  190. * 恢复账号
  191. * */
  192. public void recoverNetEasyEmployee(Employee employee){
  193. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  194. Q q1 = Q.init(null)
  195. .addParam("domain", netEasyConfig.getDomain())
  196. .addParam("accountName", employee.getEm_neteasyid());
  197. R r2 = instanceSDK.commonInvoke(q1, "/api/open/account/recoverAccount");
  198. if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
  199. baseDao.updateByCondition("employee","em_neteasystatus=-1","em_code='"+employee.getEm_code()+"'");
  200. logger.info("恢复账号成功,账号信息:{}",employee.toString());
  201. }else {
  202. logger.info("恢复账号失败,账号名称:{},错误信息:{}",employee.toString(),r2.getMessage());
  203. }
  204. }
  205. /**
  206. * 获取邮箱账号
  207. * */
  208. public AccountResp getNetEasyEmployee(Employee employee) {
  209. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  210. Q q1 = Q.init(null)
  211. .addParam("domain", netEasyConfig.getDomain())
  212. .addParam("accountName", PinyinUtils.getCustomPinyin(employee.getEm_name()));
  213. R r2 = instanceSDK.commonInvoke(q1, "/api/open/account/getAccount");
  214. if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
  215. AccountResp accountResp = (AccountResp) r2.getDataBean(AccountResp.class);
  216. logger.info("查询账号成功,账号信息:{}",employee.toString());
  217. return accountResp;
  218. }else {
  219. logger.info("查询账号失败,账号名称:{},错误信息:{}",employee.toString(),r2.getMessage());
  220. return null;
  221. }
  222. }
  223. /**
  224. * 获取账号列表
  225. * */
  226. public void getNetEasyUserList(Integer pageNum, List<AccountResp> userList){
  227. logger.info("getNetEasyUserList page:{}",pageNum);
  228. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  229. Q q = Q.init(null).addParam("domain", netEasyConfig.getDomain())
  230. .addParam("pageSize", 50)
  231. .addParam("pageNum", pageNum);
  232. R r = instanceSDK.commonInvoke(q, "/api/open/unit/getAccountList");
  233. if(ResultEnum.SUCCESS.getCode() == r.getCode()){
  234. UnitAccountResp unitAccountResp = (UnitAccountResp) r.getDataBean(UnitAccountResp.class);
  235. userList.addAll(unitAccountResp.getList());
  236. if (unitAccountResp.getCount() > unitAccountResp.getPageNum()*50){
  237. getNetEasyUserList(pageNum+1, userList);
  238. }
  239. }
  240. }
  241. /*
  242. 初始化人员资料
  243. */
  244. public void initEmployee(){
  245. List<AccountResp> userList = new ArrayList<AccountResp>();
  246. getNetEasyUserList(1, userList);
  247. List<Employee> employeeList = uasSyncService.getNetEasyUserList();
  248. for (AccountResp accountResp : userList) {
  249. if (accountResp.getName().contains("曾泽华") || accountResp.getName().contains("师盼博")) {
  250. logger.info("账号信息:{}",accountResp.toString());
  251. }
  252. //Optional<Employee> employeeOptional = employeeList.stream().filter(employee -> employee.getEm_name().equals(accountResp.getName())).findFirst();
  253. //employeeOptional.ifPresent(employee -> baseDao.updateByCondition("employee", "em_neteasyid='" + accountResp.getAccountName() + "'", "em_code='" + employee.getEm_code() + "'"));
  254. }
  255. /* List<Employee> employeeList = uasSyncService.getNetEasyUserList();
  256. for (Employee employee : employeeList) {
  257. if( StringUtil.hasText(employee.getEm_neteasyid())) {
  258. updateNetEasyEmployee(employee);
  259. }else{
  260. if(StringUtil.hasText(employee.getEm_emptype())&&
  261. (employee.getEm_emptype().startsWith("管理序列") || "技术序列".equals(employee.getEm_emptype())
  262. || "营销序列".equals(employee.getEm_emptype()) || "职能序列".equals(employee.getEm_emptype()))){
  263. //开通账号
  264. createNetEasyEmployee(employee);
  265. }
  266. }
  267. }*/
  268. }
  269. /**
  270. * 组织资料同步
  271. * */
  272. public void syncNetEasyOrg(){
  273. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  274. Q q = Q.init(null)
  275. .addParam("domain", netEasyConfig.getDomain());
  276. R r1 = instanceSDK.commonInvoke(q, "/api/open/unit/getUnitList");
  277. List<HrOrg> orgList = uasSyncService.getADOrgList();
  278. List<GetUnitListDTO> unitList = null;
  279. if(ResultEnum.SUCCESS.getCode() == r1.getCode()){
  280. logger.info("获取组织列表成功");
  281. List<Map<String, Object>> dataList = (List<Map<String, Object>>) r1.getData();
  282. String jsonArrayStr = JacksonUtil.toJsonArray(dataList);
  283. unitList = CommonUtils.parseArray(jsonArrayStr, GetUnitListDTO.class);
  284. for (HrOrg org : orgList) {
  285. Optional<GetUnitListDTO> unitOptional = unitList.stream().filter(unit -> unit.getUnitName().equals(org.getOr_name()) || unit.getUnitId().equals(org.getOr_neteasyid())).findFirst();
  286. if(!StringUtils.hasText(org.getOr_neteasyid()) && "已审核".equals(org.getOr_status()) ){
  287. //邮箱组织ID为空,判断是否需要创建组织
  288. if(unitOptional.isPresent()){
  289. logger.info("更新组织id为空,组织编号:{},组织名称:{}",org.getOr_code(),org.getOr_name());
  290. baseDao.updateByCondition("HRORG","OR_NETEASYID='"+unitOptional.get().getUnitId()+"'","OR_CODE='"+org.getOr_code()+"'");
  291. }else {
  292. logger.info("创建组织组织id为空,组织编号:{},组织名称:{},父组织:{}",org.getOr_code(),org.getOr_name(),org.getParentnetEasyId());
  293. createNetEasyOrg(org, StringUtil.hasText(org.getParentnetEasyId()) ? org.getParentnetEasyId() : null );
  294. }
  295. }else if(StringUtils.hasText(org.getOr_neteasyid())){
  296. if(unitOptional.isPresent()){
  297. //邮箱组织ID不为空,且邮箱服务器存在对应的组织
  298. if ("已禁用".equals(org.getOr_status())){
  299. //删除组织
  300. logger.info("删除组织,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
  301. deleteNetEasyOrg(org);
  302. }else if(!"已禁用".equals(org.getOr_status()) && !unitOptional.get().getUnitName().equals(org.getOr_name())){
  303. //更新组织
  304. logger.info("更新组织名称,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
  305. updateNetEasyOrg(org);
  306. }
  307. } else {
  308. //邮箱组织ID不为空,但网易邮箱不存在如后台删除等,需要重新创建组织
  309. if("已审核".equals(org.getOr_status())){
  310. logger.info("重新创建组织,组织id不为空,组织编号:{},组织名称:{}",org.getOr_code(),org.getOr_name());
  311. createNetEasyOrg(org, StringUtil.hasText(org.getParentnetEasyId()) ? org.getParentnetEasyId() : null );
  312. }
  313. }
  314. }
  315. }
  316. //整体再刷新一次层级,防止一次性新增多层级组织
  317. refreshNetEasyOrg();
  318. }
  319. }
  320. /*
  321. * init初始化
  322. * */
  323. public void initNetEasyOrg() {
  324. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  325. Q q = Q.init(null)
  326. .addParam("domain", netEasyConfig.getDomain());
  327. R r1 = instanceSDK.commonInvoke(q, "/api/open/unit/getUnitList");
  328. List<HrOrg> orgList = uasSyncService.getADOrgList();
  329. if(ResultEnum.SUCCESS.getCode() == r1.getCode()){
  330. List<Map<String, Object>> dataList = (List<Map<String, Object>>) r1.getData();
  331. String jsonArrayStr = JacksonUtil.toJsonArray(dataList);
  332. List<GetUnitListDTO> unitList = CommonUtils.parseArray(jsonArrayStr, GetUnitListDTO.class);
  333. for (GetUnitListDTO unit : unitList) {
  334. Optional<HrOrg> orgOptional = orgList.stream().filter(org -> org.getOr_name().equals(unit.getUnitName())).findFirst();
  335. if(orgOptional.isPresent()){
  336. baseDao.updateByCondition("HRORG","OR_NETEASYID='"+unit.getUnitId()+"'","OR_CODE='"+orgOptional.get().getOr_code()+"'");
  337. }
  338. }
  339. }
  340. for (HrOrg org : orgList) {
  341. if(org.getOr_neteasyid() == null && "已审核".equals(org.getOr_status())){
  342. createNetEasyOrg(org, null);
  343. }
  344. }
  345. refreshNetEasyOrg();
  346. }
  347. /**
  348. * 刷新组织层级
  349. * */
  350. public void refreshNetEasyOrg() {
  351. logger.info("刷新组织层级");
  352. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  353. Q q = Q.init(null)
  354. .addParam("domain", netEasyConfig.getDomain());
  355. R r1 = instanceSDK.commonInvoke(q, "/api/open/unit/getUnitList");
  356. List<HrOrg> orgList = uasSyncService.getADOrgList();
  357. List<GetUnitListDTO> unitList = null;
  358. if(ResultEnum.SUCCESS.getCode() == r1.getCode()){
  359. List<Map<String, Object>> dataList = (List<Map<String, Object>>) r1.getData();
  360. String jsonArrayStr = JacksonUtil.toJsonArray(dataList);
  361. unitList = CommonUtils.parseArray(jsonArrayStr, GetUnitListDTO.class);
  362. }
  363. if (unitList != null){
  364. for (HrOrg org : orgList) {
  365. Optional<GetUnitListDTO> unitOptional = unitList.stream().filter(unit -> unit.getUnitId().equals(org.getOr_neteasyid())).findFirst();
  366. if(unitOptional.isPresent()){
  367. if(StringUtil.hasText(org.getParentnetEasyId()) && !org.getParentnetEasyId().equals(unitOptional.get().getUnitParentId())){
  368. logger.info("组织{}的父组织id错误,正确父组织id:{},错误父组织id:{}",org.getOr_name(),unitOptional.get().getUnitParentId(),org.getParentnetEasyId());
  369. moveNetEasyOrg(org,org.getParentnetEasyId());
  370. }
  371. }
  372. }
  373. }
  374. }
  375. /**
  376. * 创建组织
  377. * */
  378. public String createNetEasyOrg(HrOrg org,String parentId){
  379. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  380. Q q1 = Q.init(null)
  381. .addParam("domain", netEasyConfig.getDomain())
  382. .addParam("unitName", org.getOr_name());
  383. if (parentId != null){
  384. q1.addParam("parentId", parentId);
  385. }
  386. R r2 = instanceSDK.commonInvoke(q1, "/api/open/unit/createUnit");
  387. if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
  388. CreateUnitResp createUnitResp = (CreateUnitResp) r2.getDataBean(CreateUnitResp.class);
  389. baseDao.updateByCondition("HRORG","OR_NETEASYID='"+createUnitResp.getUnitId()+"'","OR_CODE='"+org.getOr_code()+"'");
  390. logger.info("创建组织成功,组织id:{},组织编号:{},组织名称:{} ,父级组织:{}",createUnitResp.getUnitId(),org.getOr_code(),org.getOr_name() ,parentId);
  391. return createUnitResp.getUnitId();
  392. }else {
  393. return null;
  394. }
  395. }
  396. /**
  397. * 删除组织
  398. * */
  399. public void deleteNetEasyOrg(HrOrg org){
  400. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  401. Q q1 = Q.init(null)
  402. .addParam("domain", netEasyConfig.getDomain())
  403. .addParam("unitId", org.getOr_neteasyid());
  404. R r2 = instanceSDK.commonInvoke(q1, "/api/open/unit/deleteUnit");
  405. if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
  406. baseDao.updateByCondition("HRORG","OR_NETEASYID=null","OR_CODE='"+org.getOr_code()+"'");
  407. logger.info("删除组织成功,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
  408. }else {
  409. logger.info("删除组织失败,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
  410. }
  411. }
  412. /**
  413. *更新组织名称
  414. * */
  415. public void updateNetEasyOrg(HrOrg org ){
  416. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  417. Q q1 = Q.init(null)
  418. .addParam("domain", netEasyConfig.getDomain())
  419. .addParam("unitId", org.getOr_neteasyid())
  420. .addParam("unitName", org.getOr_name());
  421. R r2 = instanceSDK.commonInvoke(q1, "/api/open/unit/updateUnit");
  422. if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
  423. logger.info("更新组织成功,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
  424. }
  425. }
  426. /**
  427. * 移动组织
  428. * */
  429. public void moveNetEasyOrg(HrOrg org ,String parentId){
  430. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  431. Q q1 = Q.init(null)
  432. .addParam("domain", netEasyConfig.getDomain())
  433. .addParam("unitId", org.getOr_neteasyid())
  434. .addParam("unitParentId", parentId);
  435. R r2 = instanceSDK.commonInvoke(q1, "/api/open/unit/moveUnit");
  436. if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
  437. logger.info("移动组织成功,组织id:{},父组织id:{}",org.getOr_neteasyid(),parentId);
  438. }
  439. }
  440. /**
  441. * 待办邮件
  442. * */
  443. public Number getUnreadMsg(String accountName){
  444. QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
  445. Q q1 = Q.init(null)
  446. .addParam("domain", netEasyConfig.getDomain())
  447. .addParam("accountName", accountName)
  448. .addParam("fid",1)
  449. .addParam("needAll",0)
  450. .addParam("countByFolder",0);
  451. R r2 = instanceSDK.commonInvoke(q1, "/api/open/mailbox/getUnreadMsg");
  452. if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
  453. MailBoxUnreadMsgResp getUnreadMsgResp = (MailBoxUnreadMsgResp) r2.getDataBean(MailBoxUnreadMsgResp.class);
  454. return getUnreadMsgResp.getCount();
  455. }
  456. return 0;
  457. }
  458. public boolean hasThreeCharacterTypes(String password) {
  459. int typeCount = 0;
  460. // 检查是否包含大写字母
  461. if (password.matches(".*[A-Z].*")) typeCount++;
  462. // 检查是否包含小写字母
  463. if (password.matches(".*[a-z].*")) typeCount++;
  464. // 检查是否包含数字
  465. if (password.matches(".*[0-9].*")) typeCount++;
  466. // 检查是否包含特殊符号(非字母数字)
  467. if (password.matches(".*[^A-Za-z0-9].*")) typeCount++;
  468. return typeCount >= 3;
  469. }
  470. public String getNetEasyID(Employee employee) {
  471. Object accountid= baseDao.getFieldDataByCondition("dual","get_4a_id('"+employee.getEm_code()+"','"+PinyinUtils.getCustomPinyin(employee.getEm_name())+"','NETEASY')","1=1");
  472. return String.valueOf(accountid);
  473. }
  474. }