package com.zhgd.xmgl.util; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.http.HttpRequest; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.redis.lock.RedisRepository; import com.zhgd.xmgl.modules.basicdata.entity.Company; import com.zhgd.xmgl.modules.basicdata.entity.DictionaryItem; import com.zhgd.xmgl.modules.basicdata.service.ICompanyService; import com.zhgd.xmgl.modules.basicdata.service.IDictionaryItemService; import com.zhgd.xmgl.modules.cost.entity.CostContract; import com.zhgd.xmgl.modules.cost.entity.CostContractPay; import com.zhgd.xmgl.modules.cost.service.ICostContractPayService; import com.zhgd.xmgl.modules.cost.service.ICostContractService; import com.zhgd.xmgl.modules.jz.dto.PlanTargetDto; import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.entity.ProjectSupplier; import com.zhgd.xmgl.modules.project.service.IProjectService; import com.zhgd.xmgl.modules.project.service.IProjectSupplierService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.sql.Timestamp; import java.util.*; import java.util.stream.Collectors; @Slf4j @Component public class JiuzhuDateUtil { @Value("${jiuzhu.address}") private final String ADDRESS = "http://218.95.151.122:18000"; @Autowired private IProjectService projectService; @Autowired private IProjectSupplierService projectSupplierService; @Autowired private ICostContractService costContractService; @Autowired private ICostContractPayService costContractPayService; @Autowired private ICompanyService companyService; @Autowired private IDictionaryItemService dictionaryItemService; public void getSubCompanyData() { String url = "/api/cube/restful/interface/getModeDataPageList/xmxx"; String systemid = "xmxx"; String d_password = "E3BA750749804E65B0A93833635F8ED2"; JSONObject mainTable = new JSONObject(); String result = doAction(url, systemid, d_password, mainTable); if (StringUtils.isNotBlank(result)) { List projects = projectService.list(Wrappers.lambdaQuery().eq(Project::getNature, 1)) .stream().map(p -> p.getProjectId().toString()).collect(Collectors.toList()); JSONObject obj = JSONObject.parseObject(result); JSONArray jsonArray = obj.getJSONArray("result"); List projectList = new ArrayList<>(); for (int i = 0; i < jsonArray.size(); i++) { JSONObject projectObj = jsonArray.getJSONObject(i).getJSONObject("mainTable"); Project project = new Project(); String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase(); project.setProjectId(Long.valueOf(projectObj.getInteger("id"))); if (!projects.contains(project.getProjectId().toString())) { project.setProjectSn(uuid); } project.setProjectName(projectObj.getString("xmmc")); project.setProjectAddress(projectObj.getString("xmdz")); project.setLongitude(projectObj.getString("xmdz")); project.setLatitude(projectObj.getString("wdzb")); project.setProjectNumber(projectObj.getString("xmbh")); project.setProjectType(projectObj.getString("gclb")); project.setEngineeringPurpose(projectObj.getInteger("gcyt")); project.setStructureType(projectObj.getInteger( "jglx")); project.setProjectAcreage(projectObj.getString("xmmj")); project.setStartWorkDate(projectObj.getString("kgrq")); project.setConstructionStage(projectObj.getInteger("sgjd")); project.setSaleAcreage(projectObj.getString("ksmj")); project.setHouseholds(projectObj.getInteger("hs")); project.setBuildingNum(projectObj.getInteger("lds")); project.setMajorProjectType(projectObj.getInteger("sfszdgc")); Company sdw = companyService.getOne(Wrappers.lambdaQuery().eq(Company::getExternalId, projectObj.getString("sdw")) .eq(Company::getCompanyType, 3)); project.setCompanySn(sdw == null ? "" : sdw.getCompanySn()); String xmlx = projectObj.getString("xmlx"); DictionaryItem projectLx = dictionaryItemService.getOne(Wrappers.lambdaQuery() .eq(DictionaryItem::getName, xmlx) .eq(DictionaryItem::getDictionaryEncoding, "project_lx")); project.setProjectLx(projectLx.getData()); projectList.add(project); } projectService.saveOrUpdateBatch(projectList); } } public void getProjectSupplier() { String url = "/api/cube/restful/interface/getModeDataPageList/gyszcxxlb"; String systemid = "gyszcxxlb"; String d_password = "D548C325B35C41CCA08D819D80151822"; JSONObject mainTable = new JSONObject(); mainTable.put("spzt", 2); String result = doAction(url, systemid, d_password, mainTable); if (StringUtils.isNotBlank(result)) { JSONObject obj = JSONObject.parseObject(result); JSONArray jsonArray = obj.getJSONArray("result"); List projectSupplierList = new ArrayList<>(); for (int i = 0; i < jsonArray.size(); i++) { JSONObject projectObj = jsonArray.getJSONObject(i).getJSONObject("mainTable"); ProjectSupplier projectSupplier = JSONObject.parseObject(JSON.toJSONString(projectObj), ProjectSupplier.class); projectSupplierList.add(projectSupplier); } projectSupplierService.saveOrUpdateBatch(projectSupplierList); } } public void getContract() { String url = "/api/cube/restful/interface/getModeDataPageList/cghtlb"; String systemid = "cghtlb"; String d_password = "BAF2C273E784483EA3B865B7BA3A4B6B"; JSONObject mainTable = new JSONObject(); String result = doAction(url, systemid, d_password, mainTable); if (StringUtils.isNotBlank(result)) { JSONObject obj = JSONObject.parseObject(result); JSONArray jsonArray = obj.getJSONArray("result"); List contractList = new ArrayList<>(); for (int i = 0; i < jsonArray.size(); i++) { JSONObject projectObj = jsonArray.getJSONObject(i).getJSONObject("mainTable"); CostContract costContract = JSONObject.parseObject(JSON.toJSONString(projectObj), CostContract.class); JSONArray detailArray = jsonArray.getJSONObject(i).getJSONArray("detail1"); StringBuilder gys = new StringBuilder(); for (int j = 0; j < detailArray.size(); j++) { String gysbm = detailArray.getJSONObject(j).getString("gysbm"); if (StringUtils.isNotBlank(gysbm)) { gys.append(gysbm); gys.append(","); } } System.out.println(detailArray); costContract.setGysbm(gys.toString()); contractList.add(costContract); } costContractService.saveOrUpdateBatch(contractList); } } public void getContractPay() { String url = "/api/cube/restful/interface/getModeDataPageList/FKGL"; String systemid = "HTFK"; String d_password = "D0679C10846644E193F45E2F08067735"; JSONObject mainTable = new JSONObject(); String result = doAction(url, systemid, d_password, mainTable); if (StringUtils.isNotBlank(result)) { JSONObject obj = JSONObject.parseObject(result); JSONArray jsonArray = obj.getJSONArray("result"); List contractPayList = new ArrayList<>(); for (int i = 0; i < jsonArray.size(); i++) { JSONObject projectObj = jsonArray.getJSONObject(i).getJSONObject("mainTable"); CostContractPay costContractPay = JSONObject.parseObject(JSON.toJSONString(projectObj), CostContractPay.class); contractPayList.add(costContractPay); JSONArray detailArray = jsonArray.getJSONObject(i).getJSONArray("detail1"); System.out.println(detailArray); } costContractPayService.saveOrUpdateBatch(contractPayList); } } public List getProjectTarget() { String url = "/api/cube/restful/interface/getModeDataPageList/MBGL"; String systemid = "MBGL"; String d_password = "EC54DFE0A5F34B5DB18E2B7D8C9252F7"; JSONObject mainTable = new JSONObject(); String result = doAction(url, systemid, d_password, mainTable); List planTargetDtoList = new ArrayList<>(); if (StringUtils.isNotBlank(result)) { JSONObject obj = JSONObject.parseObject(result); JSONArray jsonArray = obj.getJSONArray("result"); for (int i = 0; i < jsonArray.size(); i++) { JSONObject projectObj = jsonArray.getJSONObject(i).getJSONObject("mainTable"); PlanTargetDto planTargetDto = JSONObject.parseObject(JSON.toJSONString(projectObj), PlanTargetDto.class); planTargetDtoList.add(planTargetDto); } } return planTargetDtoList; } /** *restful接口调用案例 *以getModeDataPageList为例 */ public String doAction(String url, String systemid, String d_password, JSONObject mainTable){ CloseableHttpResponse response;// 响应类, CloseableHttpClient httpClient = HttpClients.createDefault(); //restful接口url HttpPost httpPost = new HttpPost(ADDRESS + url); //当前日期 String currentDate = getCurrentDate(); //当前时间 String currentTime = getCurrentTime(); //获取时间戳 String currentTimeTamp = getTimestamp(); Map params = new HashMap<>(); Map paramDatajson = new HashMap<>(); //header Map header = new HashMap<>(); //系统标识 // String systemid = "xmxx"; //密码 // String d_password = "E3BA750749804E65B0A93833635F8ED2"; //封装header里的参数 header.put("systemid",systemid); header.put("currentDateTime",currentTimeTamp); String md5Source = systemid+d_password+currentTimeTamp; String md5OfStr = getMD5Str(md5Source).toLowerCase(); //Md5是:系统标识+密码+时间戳 并且md5加密的结果 header.put("Md5",md5OfStr); paramDatajson.put("header",header); //封装pageinfo JSONObject pageInfo = new JSONObject(); pageInfo.put("pageNo", 1); pageInfo.put("pageSize", 1000); paramDatajson.put("pageInfo",pageInfo); //封装mainTable参数 // JSONObject mainTable = new JSONObject(); // mainTable.put("id", "1"); paramDatajson.put("mainTable",mainTable); //封装operationinfo参数 JSONObject operationinfo = new JSONObject(); operationinfo.put("operator", "15273"); paramDatajson.put("operationinfo",operationinfo); System.out.println("===请求参数datajson==="+paramDatajson); params.put("datajson",paramDatajson); //装填参数 List nvps = new ArrayList(); if(params!=null){ for (Object entry : params.entrySet()) { Map.Entry en = (Map.Entry) entry; nvps.add(new BasicNameValuePair(en.getKey(), JSONObject.toJSONString(en.getValue()))); } } try{ httpPost.addHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8"); httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8")); response = httpClient.execute(httpPost); if (response != null && response.getEntity() != null) { //返回信息 String resulString = EntityUtils.toString(response.getEntity()); //todo这里处理返回信息 System.out.println("成功"+ resulString); return resulString; }else{ System.out.println("获取数据失败,请查看日志"+currentDate+" "+currentTime); } }catch (Exception e){ System.out.println("请求失败"+currentDate+" "+currentTime+"====errormsg:"+e.getMessage()); } return null; } public String getMD5Str(String plainText){ //定义一个字节数组 byte[] secretBytes = null; try { // 生成一个MD5加密计算摘要 MessageDigest md = MessageDigest.getInstance("MD5"); //对字符串进行加密 md.update(plainText.getBytes()); //获得加密后的数据 secretBytes = md.digest(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("没有md5这个算法!"); } //将加密后的数据转换为16进制数字 String md5code = new BigInteger(1, secretBytes).toString(16); // 如果生成数字未满32位,需要前面补0 // 不能把变量放到循环条件,值改变之后会导致条件变化。如果生成30位 只能生成31位md5 int tempIndex = 32 - md5code.length(); for (int i = 0; i < tempIndex; i++) { md5code = "0" + md5code; } return md5code; } public static String getCurrentTime() { Date newdate = new Date(); long datetime = newdate.getTime(); Timestamp timestamp = new Timestamp(datetime); String currenttime = (timestamp.toString()).substring(11, 13) + ":" + (timestamp.toString()).substring(14, 16) + ":" + (timestamp.toString()).substring(17, 19); return currenttime; } public static String getCurrentDate() { Date newdate = new Date(); long datetime = newdate.getTime(); Timestamp timestamp = new Timestamp(datetime); String currentdate = (timestamp.toString()).substring(0, 4) + "-" + (timestamp.toString()).substring(5, 7) + "-" + (timestamp.toString()).substring(8, 10); return currentdate; } /** * 获取当前日期时间。 YYYY-MM-DD HH:MM:SS * @return 当前日期时间 */ public static String getCurDateTime() { Date newdate = new Date(); long datetime = newdate.getTime(); Timestamp timestamp = new Timestamp(datetime); return (timestamp.toString()).substring(0, 19); } /** * 获取时间戳 格式如:19990101235959 * @return */ public static String getTimestamp(){ return getCurDateTime().replace("-", "").replace(":", "").replace(" ", ""); } public static int getIntValue(String v, int def) { try { return Integer.parseInt(v); } catch (Exception ex) { return def; } } public static String null2String(Object s) { return s == null ? "" : s.toString(); } }