diff --git a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/mapper/SrzDeptMapper.java b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/mapper/SrzDeptMapper.java index e5b5019b..5b9a73bf 100644 --- a/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/mapper/SrzDeptMapper.java +++ b/zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/mapper/SrzDeptMapper.java @@ -14,4 +14,22 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @Mapper public interface SrzDeptMapper extends BaseMapperPlus { + + /** + * 新增市认证对接---组织机构信息 + * + * @param srzDept 市认证对接---组织机构信息 + * @return 结果 + */ + int insertSrzDept(SrzDept srzDept); + + /** + * 修改市认证对接---组织机构信息 + * + * @param srzDept 市认证对接---组织机构信息 + * @return 结果 + */ + int updateSrzDept(SrzDept srzDept); + + } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SrzUserMapper.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SrzUserMapper.java index cbaf30b2..dd2ffaa0 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SrzUserMapper.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SrzUserMapper.java @@ -11,5 +11,17 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; * @date 2026-05-06 */ public interface SrzUserMapper extends BaseMapperPlus { + /** + * 更新用户信息 + * @param srzUser + * @return + */ + int updateUser(SrzUser srzUser); + /** + * 新增用户信息 + * @param srzUser + * @return + */ + int insertUser(SrzUser srzUser); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/quartz/job/SrzDeptOriginalDataJob.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/quartz/job/SrzDeptOriginalDataJob.java new file mode 100644 index 00000000..bb5fb6bb --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/quartz/job/SrzDeptOriginalDataJob.java @@ -0,0 +1,187 @@ +package com.zdxt.enforcementcode.quartz.job; + +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.zdxt.enforcementcode.service.ISrzDeptService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.service.ISysDictDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.security.MessageDigest; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 同步市认证部门组织信息表原始数据 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SrzDeptOriginalDataJob { + + @Value("${srnwg.systemCode}") + private String systemCode; + @Value("${srnwg.integrationKey}") + private String integrationKey; + @Value("${srnwg.url}") + private String znwgUrl; + @Value("${srnwg.paasId}") + private String paasId; + @Value("${srnwg.paasToken}") + private String paasToken; + + @Autowired + private ISrzDeptService srzDeptService; + @Autowired + private ISysDictDataService sysDictDataService; + + public static Map params = new HashMap<>(); + + private static final Logger log = LoggerFactory.getLogger(SrzDeptOriginalDataJob.class); + + + public void run(){ + this.getData(); + } + + /** 同步部门数据 */ + public void getData(){ + List srz_item = sysDictDataService.selectDictDataByType("srz_item"); + Map map = srz_item.stream().collect(Collectors.toMap(SysDictDataVo::getDictLabel,SysDictDataVo::getDictValue)); + + if(MapUtil.isNotEmpty(map)){ + params = map; + } + String token = ""; + String destroyTken = ""; + try { + // 获取 access_token + String tokenJson = connect("/ebus/sfrzhqxglmk/sysPullLogin?systemCode="+systemCode+"&integrationKey="+integrationKey); + JSONObject tokenObj = JSONObject.parseObject(tokenJson); + System.out.println("====================== access_token ======================"); + System.out.println(tokenObj); + System.out.println("====================== access_token ======================"); + token = tokenObj.getString("data"); + + // 获取 用户信息 + int page = 0; + int pageSize = 500; + List> sumMap = new ArrayList<>(); + + int insertNum = 0; + int updateNum = 0; + page = 0; + // 获取 部门信息 + while (true) { + String deptInfoJson = connect("/ebus/sfrzhqxglmk/sysPullOrg?token="+token+"&page="+page+"&pageSize="+pageSize+"&status=0"); + JSONObject sourceObj = JSONObject.parseObject(deptInfoJson); + JSONObject tmpJsonObj = sourceObj.getJSONObject("data"); + if(null==tmpJsonObj) { + log.info("=====================> tmpJsonObj 为空"); + break; + } + JSONArray dataArr = tmpJsonObj.getJSONArray("data"); + if (null == dataArr || dataArr.size()==0) { break; } + // 插入更新数据库 + log.info("-------------------> 拉取到组织数量: {}", dataArr.size()); + Map resMap = srzDeptService.saveSrzDept(dataArr,token); + sumMap.add(resMap); +// page++; + } + + insertNum = 0; + updateNum = 0; + for (Map item : sumMap) { + insertNum += item.get("insertNum"); + updateNum += item.get("updateNum"); + } + log.info("新增部门数量 : {} / 更新部门数量 : {}", insertNum, updateNum); + + // 注销token + destroyTken = connect("/ebus/sfrzhqxglmk/sysPullLogout?token="+token); + System.out.println("====================== destroyTken ======================"); + System.out.println(destroyTken); + System.out.println("====================== destroyTken ======================"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private String connect(String apiPath) { + //各种参数 + + try { + String params = ""; //请求接⼝的参数 + + long now = new Date().getTime(); + String timestamp = Long.toString((long) Math.floor(now / 1000)); + String nonce = Long.toHexString(now) + "-" + Long.toHexString((long) Math.floor(Math.random() * 0xFFFFFF)); + String signature = toSHA256(timestamp + paasToken + nonce + timestamp); + + + //创建CloseableHttpClient + CloseableHttpClient client = HttpClientBuilder.create().build(); + HttpPost httpPost = new HttpPost(znwgUrl + apiPath); + httpPost.setHeader("x-tif-paasid", paasId); + httpPost.setHeader("x-tif-timestamp", timestamp); + httpPost.setHeader("x-tif-signature", signature); + httpPost.setHeader("x-tif-nonce", nonce); + httpPost.setHeader("Content-Type", "application/json"); + httpPost.setHeader("Cache-Control", "no-cache"); + HttpEntity entity = new StringEntity(params); + + + httpPost.setEntity(entity); + + CloseableHttpResponse response = client.execute(httpPost); + + return EntityUtils.toString(response.getEntity()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + + private String toSHA256(String str) throws Exception { + MessageDigest messageDigest; + String encodeStr = ""; + try { + messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.update(str.getBytes("UTF-8")); + encodeStr = byte2Hex(messageDigest.digest()); + } catch (Exception e) { + throw e; + } + return encodeStr; + } + + // byte转换成16进制 + private String byte2Hex(byte[] bytes) { + StringBuffer stringBuffer = new StringBuffer(); + String temp = null; + for (int i = 0; i < bytes.length; i++) { + temp = Integer.toHexString(bytes[i] & 0xFF); + if (temp.length() == 1) { + stringBuffer.append("0"); + } + stringBuffer.append(temp); + } + return stringBuffer.toString(); + } +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/quartz/job/SrzUserOriginalDataJob.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/quartz/job/SrzUserOriginalDataJob.java new file mode 100644 index 00000000..ddbd2abe --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/quartz/job/SrzUserOriginalDataJob.java @@ -0,0 +1,187 @@ +package com.zdxt.enforcementcode.quartz.job; + +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.zdxt.enforcementcode.service.ISrzUserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.service.ISysDictDataService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.security.MessageDigest; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 同步市认证用户组织信息原始数据 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class SrzUserOriginalDataJob { + + @Value("${srnwg.systemCode}") + private String systemCode; + @Value("${srnwg.integrationKey}") + private String integrationKey; + @Value("${srnwg.url}") + private String znwgUrl; + @Value("${srnwg.paasId}") + private String paasId; + @Value("${srnwg.paasToken}") + private String paasToken; + + @Autowired + private ISrzUserService srzUserService; + @Autowired + private ISysDictDataService sysDictDataService; + + public static Map params = new HashMap<>(); + + private static final Logger log = LoggerFactory.getLogger(SrzUserOriginalDataJob.class); + + + public void run(){ + this.getData(); + } + + /** + * 获取市认证用户原始数据 + */ + public void getData(){ + List srz_item = sysDictDataService.selectDictDataByType("srz_item"); + Map map = srz_item.stream().collect(Collectors.toMap(SysDictDataVo::getDictLabel,SysDictDataVo::getDictValue)); + + if(MapUtil.isNotEmpty(map)){ + params = map; + } + String token = ""; + String destroyTken = ""; + try { + // 获取 access_token + String tokenJson = connect("/ebus/sfrzhqxglmk/sysPullLogin?systemCode="+systemCode+"&integrationKey="+integrationKey); + JSONObject tokenObj = JSONObject.parseObject(tokenJson); + log.info("====================== access_token ======================"); + log.info("获取市认证令牌:{}",tokenObj); + System.out.println("====================== access_token ======================"); + token = tokenObj.getString("data"); + + // 获取 用户信息 + int page = 0; + int pageSize = 500; + List> sumMap = new ArrayList<>(); + + int insertNum = 0; + int updateNum = 0; + page = 0; + while (true) { + String userInfoJson = connect("/ebus/sfrzhqxglmk/sysPullTacc?token="+token+"&page="+page+"&pageSize="+pageSize+"&status=0"); + JSONObject sourceObj = JSONObject.parseObject(userInfoJson); + JSONObject tmpJsonObj = sourceObj.getJSONObject("data"); + if(null==tmpJsonObj) { + log.info("=====================> tmpJsonObj 为空"); + break; + } + JSONArray dataArr = tmpJsonObj.getJSONArray("data"); + log.info("市认证过来的用户数量---> : {}", tmpJsonObj.get("'total'")); + if (null == dataArr || dataArr.size()==0) { break; } + Map resMap = srzUserService.saveSrzUser(dataArr, token); + sumMap.add(resMap); +// page++; + } + + insertNum = 0; + updateNum = 0; + for (Map item : sumMap) { + insertNum += item.get("insertNum"); + updateNum += item.get("updateNum"); + } + log.info("新增用户数量 : {} / 更新用户数量 : {}", insertNum, updateNum); + + // 注销token + destroyTken = connect("/ebus/sfrzhqxglmk/sysPullLogout?token="+token); + System.out.println("====================== destroyTken ======================"); + System.out.println(destroyTken); + System.out.println("====================== destroyTken ======================"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private String connect(String apiPath) { + //各种参数 + + try { + String params = ""; //请求接⼝的参数 + + long now = new Date().getTime(); + String timestamp = Long.toString((long) Math.floor(now / 1000)); + String nonce = Long.toHexString(now) + "-" + Long.toHexString((long) Math.floor(Math.random() * 0xFFFFFF)); + String signature = toSHA256(timestamp + paasToken + nonce + timestamp); + + + //创建CloseableHttpClient + CloseableHttpClient client = HttpClientBuilder.create().build(); + HttpPost httpPost = new HttpPost(znwgUrl + apiPath); + httpPost.setHeader("x-tif-paasid", paasId); + httpPost.setHeader("x-tif-timestamp", timestamp); + httpPost.setHeader("x-tif-signature", signature); + httpPost.setHeader("x-tif-nonce", nonce); + httpPost.setHeader("Content-Type", "application/json"); + httpPost.setHeader("Cache-Control", "no-cache"); + HttpEntity entity = new StringEntity(params); + + + httpPost.setEntity(entity); + + CloseableHttpResponse response = client.execute(httpPost); + + return EntityUtils.toString(response.getEntity()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + + private String toSHA256(String str) throws Exception { + MessageDigest messageDigest; + String encodeStr = ""; + try { + messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.update(str.getBytes("UTF-8")); + encodeStr = byte2Hex(messageDigest.digest()); + } catch (Exception e) { + throw e; + } + return encodeStr; + } + + // byte转换成16进制 + private String byte2Hex(byte[] bytes) { + StringBuffer stringBuffer = new StringBuffer(); + String temp = null; + for (int i = 0; i < bytes.length; i++) { + temp = Integer.toHexString(bytes[i] & 0xFF); + if (temp.length() == 1) { + stringBuffer.append("0"); + } + stringBuffer.append(temp); + } + return stringBuffer.toString(); + } +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISrzDeptService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISrzDeptService.java index d45f2ffe..348d2b47 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISrzDeptService.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISrzDeptService.java @@ -1,5 +1,6 @@ package com.zdxt.enforcementcode.service; +import com.alibaba.fastjson.JSONArray; import com.zdxt.enforcementcode.domain.vo.SrzDeptVo; import com.zdxt.enforcementcode.domain.vo.SrzDeptMinVo; import com.zdxt.enforcementcode.domain.bo.SrzDeptBo; @@ -8,6 +9,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 市认证对接---组织机构信息Service接口 @@ -73,4 +75,13 @@ public interface ISrzDeptService { * @return 精简机构列表 */ List queryMinList(); + + /** + * 保存部门信息 + * + * @param dataArr 部门信息 + * @param token 访问令牌 + * @return 保存结果 + */ + Map saveSrzDept(JSONArray dataArr, String token); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISrzUserService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISrzUserService.java index 40433d90..e2ca2645 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISrzUserService.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ISrzUserService.java @@ -1,5 +1,6 @@ package com.zdxt.enforcementcode.service; +import com.alibaba.fastjson.JSONArray; import com.zdxt.enforcementcode.domain.vo.SrzUserVo; import com.zdxt.enforcementcode.domain.bo.SrzUserBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -7,6 +8,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 市认证用户原始Service接口 @@ -65,4 +67,13 @@ public interface ISrzUserService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 保存市认证用户原始信息 + * + * @param dataArr 待保存的数据 + * @param token token + * @return 保存结果 + */ + Map saveSrzUser(JSONArray dataArr, String token); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SrzDeptServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SrzDeptServiceImpl.java index f8b129da..6c932d3c 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SrzDeptServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SrzDeptServiceImpl.java @@ -1,5 +1,15 @@ package com.zdxt.enforcementcode.service.impl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.collections4.map.HashedMap; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -9,6 +19,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.zdxt.enforcementcode.domain.bo.SrzDeptBo; import com.zdxt.enforcementcode.domain.vo.SrzDeptVo; @@ -17,6 +28,8 @@ import com.zdxt.enforcementcode.domain.SrzDept; import com.zdxt.enforcementcode.mapper.SrzDeptMapper; import com.zdxt.enforcementcode.service.ISrzDeptService; +import java.security.MessageDigest; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Collection; @@ -34,6 +47,13 @@ public class SrzDeptServiceImpl implements ISrzDeptService { private final SrzDeptMapper baseMapper; + @Value("${srnwg.url}") + private String znwgUrl; + @Value("${srnwg.paasId}") + private String paasId; + @Value("${srnwg.paasToken}") + private String paasToken; + /** * 查询市认证对接---组织机构信息 * @@ -147,6 +167,12 @@ public class SrzDeptServiceImpl implements ISrzDeptService { return baseMapper.updateById(update) > 0; } + /** + * 修改市认证对接---组织机构信息 + * + * @param vo 市认证对接---组织机构信息 + * @return 是否修改成功 + */ @Override public Integer update(SrzDeptVo vo) { SrzDept update = MapstructUtils.convert(vo, SrzDept.class); @@ -195,4 +221,113 @@ public class SrzDeptServiceImpl implements ISrzDeptService { return vo; }).toList(); } + + /** + * 批量保存市认证对接---组织机构信息 + * + * @param dataArr 数据列表 + * @param token 登录token + * @return 保存结果 + */ + @Override + public Map saveSrzDept(JSONArray dataArr, String token) { + int insertNum = 0; + int updateNum = 0; + for (int i = 0; i < dataArr.size(); i++) { + JSONObject jsonObject = dataArr.getJSONObject(i); + if (StringUtils.isEmpty(jsonObject.getString("organizationId"))) { continue; } + try { + // 返回每条拉取的成功情况 + String taskId = jsonObject.getString("taskId"); + String guid = jsonObject.getString("guid"); + String params = "{\"token\":\"" + token + "\",\"data\":[{\"taskId\":\"" + taskId + "\",\"guid\":\""+ guid +"\",\"result\":\"SUCCESS\"}]}"; + String doneStr = connect("/ebus/sfrzhqxglmk/sysDoneTorg", params); + JSONObject doneObj = JSONObject.parseObject(doneStr); + String done = doneObj.getString("success"); + log.info("部门拉取完成结果 ========> {} :{}", taskId, done); + } catch (Exception e) { + log.info("部门数据下拉完成异常,异常任务id:{}",jsonObject.getString("taskId")); + e.printStackTrace(); + } + SrzDept srzDept=JSONObject.parseObject(jsonObject.toString(),SrzDept.class); + if(srzDept==null)continue; + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SrzDept::getOrganizationid, srzDept.getOrganizationid()); + SrzDept temp=baseMapper.selectOne(lqw); + // SrzDept temp = baseMapper.selectSrzDeptById(srzDept.getOrganizationid()); + srzDept.setNeedUpdate(0L); + if (null != temp && temp.getOrganizationid() != null) { + // 跟新数据库 + int rowNum = baseMapper.updateSrzDept(srzDept); + updateNum += rowNum; + } else { + // 插入数据库 + int rowNum = baseMapper.insertSrzDept(srzDept); + insertNum += rowNum; + } + } + Map resMap = new HashedMap(); + resMap.put("insertNum", insertNum); + resMap.put("updateNum", updateNum); + return resMap; + } + + private String connect(String apiPath, String params) { + //各种参数 + + try { + long now = new Date().getTime(); + String timestamp = Long.toString((long) Math.floor(now / 1000)); + String nonce = Long.toHexString(now) + "-" + Long.toHexString((long) Math.floor(Math.random() * 0xFFFFFF)); + String signature = toSHA256(timestamp + paasToken + nonce + timestamp); + + //创建CloseableHttpClient + CloseableHttpClient client = HttpClientBuilder.create().build(); + HttpPost httpPost = new HttpPost(znwgUrl + apiPath); + httpPost.setHeader("x-tif-paasid", paasId); + httpPost.setHeader("x-tif-timestamp", timestamp); + httpPost.setHeader("x-tif-signature", signature); + httpPost.setHeader("x-tif-nonce", nonce); + httpPost.setHeader("Content-Type", "application/json"); + httpPost.setHeader("Cache-Control", "no-cache"); + HttpEntity entity = new StringEntity(params); + + + httpPost.setEntity(entity); + + CloseableHttpResponse response = client.execute(httpPost); + + return EntityUtils.toString(response.getEntity()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + private String toSHA256(String str) throws Exception { + MessageDigest messageDigest; + String encodeStr = ""; + try { + messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.update(str.getBytes("UTF-8")); + encodeStr = byte2Hex(messageDigest.digest()); + } catch (Exception e) { + throw e; + } + return encodeStr; + } + + // byte转换成16进制 + private String byte2Hex(byte[] bytes) { + StringBuffer stringBuffer = new StringBuffer(); + String temp = null; + for (int i = 0; i < bytes.length; i++) { + temp = Integer.toHexString(bytes[i] & 0xFF); + if (temp.length() == 1) { + stringBuffer.append("0"); + } + stringBuffer.append(temp); + } + return stringBuffer.toString(); + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SrzUserServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SrzUserServiceImpl.java index 94c256dc..0e8b5e30 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SrzUserServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/SrzUserServiceImpl.java @@ -1,5 +1,16 @@ package com.zdxt.enforcementcode.service.impl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.apache.commons.collections4.map.HashedMap; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -9,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.zdxt.enforcementcode.domain.bo.SrzUserBo; import com.zdxt.enforcementcode.domain.vo.SrzUserVo; @@ -16,6 +28,8 @@ import com.zdxt.enforcementcode.domain.SrzUser; import com.zdxt.enforcementcode.mapper.SrzUserMapper; import com.zdxt.enforcementcode.service.ISrzUserService; +import java.security.MessageDigest; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Collection; @@ -33,6 +47,13 @@ public class SrzUserServiceImpl implements ISrzUserService { private final SrzUserMapper baseMapper; + @Value("${srnwg.url}") + private String znwgUrl; + @Value("${srnwg.paasId}") + private String paasId; + @Value("${srnwg.paasToken}") + private String paasToken; + /** * 查询市认证用户原始 * @@ -192,4 +213,115 @@ public class SrzUserServiceImpl implements ISrzUserService { } return baseMapper.deleteByIds(ids) > 0; } + + + /** + * 批量保存市认证用户原始 + * + * @param dataArr 数据集合 + * @param token 登录token + * @return 保存结果 + */ + @Override + public Map saveSrzUser(JSONArray dataArr, String token) { + int insertNum = 0; + int updateNum = 0; + for (int i = 0; i < dataArr.size(); i++) { + JSONObject jsonObject = dataArr.getJSONObject(i); + if (StringUtils.isEmpty(jsonObject.getString("userId"))) { continue; } + try { + // 返回每条拉取的成功情况 + String taskId = jsonObject.getString("taskId"); + String params = "{\"token\":\"" + token + "\",\"data\":[{\"taskId\":\"" + taskId + "\",\"result\":\"SUCCESS\"}]}"; + String doneStr = connect("/ebus/sfrzhqxglmk/sysDoneTacc", params); + JSONObject doneObj = JSONObject.parseObject(doneStr); + String done = doneObj.getString("success"); + log.info("用户拉取完成结果 ========> {} :{}", taskId, done); + } catch (Exception e) { + log.info("用户数据下拉完成异常,异常任务id:{}", jsonObject.getString("taskId")); + e.printStackTrace(); + } + SrzUser srzUser=JSONObject.parseObject(jsonObject.toString(),SrzUser.class); + if(srzUser==null)continue; + + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(SrzUser::getUserid, srzUser.getUserid()); + SrzUser temp = baseMapper.selectOne(lqw); + //SrzUser temp = baseMapper.selectUserByPrimaryKey(srzUser.getUserid()); + srzUser.setNeedUpdate(0L); + if (null != temp && temp.getOrganizationid() != null) { + // 跟新数据库 + LambdaUpdateWrapper luw = new LambdaUpdateWrapper<>(); + int rowNum = baseMapper.updateUser(srzUser); + updateNum += rowNum; + } else { + // 插入数据库 + int rowNum = baseMapper.insertUser(srzUser); + insertNum += rowNum; + } + } + Map resMap = new HashedMap(); + resMap.put("insertNum", insertNum); + resMap.put("updateNum", updateNum); + return resMap; + } + + private String connect(String apiPath, String params) { + //各种参数 + + try { + long now = new Date().getTime(); + String timestamp = Long.toString((long) Math.floor(now / 1000)); + String nonce = Long.toHexString(now) + "-" + Long.toHexString((long) Math.floor(Math.random() * 0xFFFFFF)); + String signature = toSHA256(timestamp + paasToken + nonce + timestamp); + + //创建CloseableHttpClient + CloseableHttpClient client = HttpClientBuilder.create().build(); + HttpPost httpPost = new HttpPost(znwgUrl + apiPath); + httpPost.setHeader("x-tif-paasid", paasId); + httpPost.setHeader("x-tif-timestamp", timestamp); + httpPost.setHeader("x-tif-signature", signature); + httpPost.setHeader("x-tif-nonce", nonce); + httpPost.setHeader("Content-Type", "application/json"); + httpPost.setHeader("Cache-Control", "no-cache"); + HttpEntity entity = new StringEntity(params); + + + httpPost.setEntity(entity); + + CloseableHttpResponse response = client.execute(httpPost); + + return EntityUtils.toString(response.getEntity()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + private String toSHA256(String str) throws Exception { + MessageDigest messageDigest; + String encodeStr = ""; + try { + messageDigest = MessageDigest.getInstance("SHA-256"); + messageDigest.update(str.getBytes("UTF-8")); + encodeStr = byte2Hex(messageDigest.digest()); + } catch (Exception e) { + throw e; + } + return encodeStr; + } + + // byte转换成16进制 + private String byte2Hex(byte[] bytes) { + StringBuffer stringBuffer = new StringBuffer(); + String temp = null; + for (int i = 0; i < bytes.length; i++) { + temp = Integer.toHexString(bytes[i] & 0xFF); + if (temp.length() == 1) { + stringBuffer.append("0"); + } + stringBuffer.append(temp); + } + return stringBuffer.toString(); + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SrzDeptMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SrzDeptMapper.xml index 59dfd528..b523e2d0 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SrzDeptMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SrzDeptMapper.xml @@ -3,4 +3,137 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + insert into srz_dept + + organizationId, + name, + code, + effectOn, + taskId, + zzDisplayPath, + zzIsLeaf, + isDeleted, + isDisabled, + systemId, + zzLevel, + parentId, + sequence, + createAt, + updateAt, + guid, + isMappingUnit, + mappingUnitParentId, + srzUnitId, + simpleName, + isStatutoryOrg, + isActive, + unitStatusCode, + unitStatus, + unitType, + xzqhCode, + xzqh, + isCGManager, + isBureauOffice, + unitTypeCode, + dwxzCode, + dwxz, + unitSysTypeCode, + unitSysType, + dwxtlbms, + unitLevelCode, + unitLevel, + creditcode, + description, + + + #{organizationId}, + #{name}, + #{code}, + #{effectOn}, + #{taskId}, + #{zzDisplayPath}, + #{zzIsLeaf}, + #{isDeleted}, + #{isDisabled}, + #{systemId}, + #{zzLevel}, + #{parentId}, + #{sequence}, + #{createAt}, + #{updateAt}, + #{guid}, + #{isMappingUnit}, + #{mappingUnitParentId}, + #{srzUnitId}, + #{simpleName}, + #{isStatutoryOrg}, + #{isActive}, + #{unitStatusCode}, + #{unitStatus}, + #{unitType}, + #{xzqhCode}, + #{xzqh}, + #{isCGManager}, + #{isBureauOffice}, + #{unitTypeCode}, + #{dwxzCode}, + #{dwxz}, + #{unitSysTypeCode}, + #{unitSysType}, + #{dwxtlbms}, + #{unitLevelCode}, + #{unitLevel}, + #{creditcode}, + #{description}, + + + + + update srz_dept + + name = #{name}, + code = #{code}, + effectOn = #{effectOn}, + taskId = #{taskId}, + zzDisplayPath = #{zzDisplayPath}, + zzIsLeaf = #{zzIsLeaf}, + isDeleted = #{isDeleted}, + isDisabled = #{isDisabled}, + systemId = #{systemId}, + zzLevel = #{zzLevel}, + parentId = #{parentId}, + sequence = #{sequence}, + createAt = #{createAt}, + updateAt = #{updateAt}, + guid = #{guid}, + isMappingUnit = #{isMappingUnit}, + mappingUnitParentId = #{mappingUnitParentId}, + srzUnitId = #{srzUnitId}, + simpleName = #{simpleName}, + isStatutoryOrg = #{isStatutoryOrg}, + isActive = #{isActive}, + unitStatusCode = #{unitStatusCode}, + unitStatus = #{unitStatus}, + unitType = #{unitType}, + xzqhCode = #{xzqhCode}, + xzqh = #{xzqh}, + isCGManager = #{isCGManager}, + isBureauOffice = #{isBureauOffice}, + unitTypeCode = #{unitTypeCode}, + dwxzCode = #{dwxzCode}, + dwxz = #{dwxz}, + unitSysTypeCode = #{unitSysTypeCode}, + unitSysType = #{unitSysType}, + dwxtlbms = #{dwxtlbms}, + unitLevelCode = #{unitLevelCode}, + unitLevel = #{unitLevel}, + creditcode = #{creditcode}, + description=#{description}, + need_update=#{needUpdate}, + + where organizationId = #{organizationId} + diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SrzUserMapper.xml b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SrzUserMapper.xml index 5a7f6665..7efc1834 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SrzUserMapper.xml +++ b/zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/SrzUserMapper.xml @@ -3,4 +3,192 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + + UPDATE srz_user + + ryztCode = #{ryztCode}, + mobileNumber = #{mobileNumber}, + zcgzld = #{zcgzld}, + gldw = #{gldw}, + updateAt = #{updateAt}, + zwjcCode = #{zwjcCode}, + effectOn = #{effectOn}, + zwjc = #{zwjc}, + organizationId = #{organizationId}, + province = #{province}, + isDisabled = #{isDisabled}, + certificateTypeIdCode = #{certificateTypeIdCode}, + jrfs = #{jrfs}, + spareNumber = #{spareNumber}, + positionname = #{positionname}, + pylxcode = #{pylxcode}, + jbcc = #{jbcc}, + contractEndTime = #{contractEndTime}, + sequence = #{sequence}, + genderCode = #{genderCode}, + zwwxMobile = #{zwwxMobile}, + district = #{district}, + certificateTypeId = #{certificateTypeId}, + contractStartTime = #{contractStartTime}, + rylydw = #{rylydw}, + telephoneNumber = #{telephoneNumber}, + gender = #{gender}, + city = #{city}, + jbccCode = #{jbccCode}, + rylb = #{rylb}, + hometownCode = #{hometownCode}, + units = #{units}, + srzUserid = #{srzUserid}, + createAt = #{createAt}, + engName = #{engName}, + isDeleted = #{isDeleted}, + jrfscode = #{jrfscode}, + email = #{email}, + zwbsCode = #{zwbsCode}, + dwzyld = #{dwzyld}, + pylx = #{pylx}, + systemId = #{systemId}, + rylbCode = #{rylbCode}, + hometown = #{hometown}, + photo = #{photo}, + glzrr = #{glzrr}, + userId = #{userId}, + zwwxId = #{zwwxId}, + ryzt = #{ryzt}, + certificateNumber = #{certificateNumber}, + zwbs = #{zwbs}, + faxNumber = #{faxNumber}, + fullname = #{fullname}, + isMappingPerson = #{isMappingPerson}, + taskId = #{taskId}, + username = #{username}, + need_update = #{needUpdate}, + + WHERE userId = #{userId} + + + + + INSERT INTO srz_user + + guid, + ryztCode, + mobileNumber, + zcgzld, + gldw, + updateAt, + zwjcCode, + effectOn, + zwjc, + organizationId, + province, + isDisabled, + certificateTypeIdCode, + jrfs, + spareNumber, + positionname, + pylxcode, + jbcc, + contractEndTime, + sequence, + genderCode, + zwwxMobile, + district, + certificateTypeId, + contractStartTime, + rylydw, + telephoneNumber, + gender, + city, + jbccCode, + rylb, + hometownCode, + units, + srzUserid, + createAt, + engName, + isDeleted, + jrfscode, + email, + zwbsCode, + dwzyld, + pylx, + systemId, + rylbCode, + hometown, + photo, + glzrr, + userId, + zwwxId, + ryzt, + certificateNumber, + zwbs, + faxNumber, + fullname, + isMappingPerson, + taskId, + username, + + + #{guid}, + #{ryztCode}, + #{mobileNumber}, + #{zcgzld}, + #{gldw}, + #{updateAt}, + #{zwjcCode}, + #{effectOn}, + #{zwjc}, + #{organizationId}, + #{province}, + #{isDisabled}, + #{certificateTypeIdCode}, + #{jrfs}, + #{spareNumber}, + #{positionname}, + #{pylxcode}, + #{jbcc}, + #{contractEndTime}, + #{sequence}, + #{genderCode}, + #{zwwxMobile}, + #{district}, + #{certificateTypeId}, + #{contractStartTime}, + #{rylydw}, + #{telephoneNumber}, + #{gender}, + #{city}, + #{jbccCode}, + #{rylb}, + #{hometownCode}, + #{units}, + #{srzUserid}, + #{createAt}, + #{engName}, + #{isDeleted}, + #{jrfscode}, + #{email}, + #{zwbsCode}, + #{dwzyld}, + #{pylx}, + #{systemId}, + #{rylbCode}, + #{hometown}, + #{photo}, + #{glzrr}, + #{userId}, + #{zwwxId}, + #{ryzt}, + #{certificateNumber}, + #{zwbs}, + #{faxNumber}, + #{fullname}, + #{isMappingPerson}, + #{taskId}, + #{username}, + +