List.stream().collect(Collectors.groupingBy(e -> e.getZshm() + e.getZszw() + e.getZszt()))
package org.jeecg.modules.quota.xxljob;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.quota.entity.ChuanYuan;
import org.jeecg.modules.quota.entity.ChuanYuanZhengShu;
import org.jeecg.modules.quota.entity.JcYc;
import org.jeecg.modules.quota.entity.SysCertPdf;
import org.jeecg.modules.quota.entity.cnfaidata.DsCyzsxx;
import org.jeecg.modules.quota.entity.cnfaidata.DsYcjbxx;
import org.jeecg.modules.quota.service.*;
import org.jeecg.modules.quota.utils.RequestYxeUtil;
import org.jeecg.modules.system.mapper.SysDictMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.stream.Collectors;
public class JcYcJobHandler {
private static final String YC_MAX_TIME = "yc_max_time";
private static final String CYZSXX_MAX_TIME = "cyzsxx_max_time";
private static final String CYXX_MAX_TIME = "cyxx_max_time";
private IJcYcService jcYcService;
private IDsYcjbxxService dsYcjbxxService;
private IChuanYuanZhengShuService chuanYuanZhengShuService;
private IDsCyzsxxService dsCyzsxxService;
private SysDictMapper sysDictMapper;
private IChuanYuanService chuanYuanService;
private RedisTemplate redisTemplate;
private ISysCertPdfService sysCertPdfService;
@Value(value = "${jeecg.uploadType}")
private String uploadType;
@XxlJob(value = "ycjbxx")
public ReturnT ycjbxx(String params) throws Exception {
String ycMaxTime = dsYcjbxxService.queryMaxTime();
if (redisTemplate.hasKey(YC_MAX_TIME)) {
String redisYcTime = (String) redisTemplate.opsForValue().get(YC_MAX_TIME);
if (redisYcTime != null && !redisYcTime.equals(ycMaxTime)) {
ArrayList updateList = new ArrayList<>();
ArrayList insertList = new ArrayList<>();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("YCSZDQMC", "苍南县");
List dsYcjbxxList = dsYcjbxxService.list(queryWrapper);
List jcYcList = jcYcService.list();
Map> jcYcMap = jcYcList.stream().collect(Collectors.groupingBy(JcYc::getId));
for (DsYcjbxx dsYcjbxx : dsYcjbxxList) {
if (jcYcMap.get(dsYcjbxx.getId()) != null && !jcYcMap.get(dsYcjbxx.getId()).isEmpty()) {
JcYc jcYc = jcYcMap.get(dsYcjbxx.getId()).get(0);
if ("修改记录".equals(dsYcjbxx.getGxcz())) {
jcYc.setYcssd(dsYcjbxx.getYcszdqdm());
jcYc.setCjg(dsYcjbxx.getCjgcn());
jcYc.setZycs(dsYcjbxx.getZycs());
jcYc.setSyzxm(dsYcjbxx.getCbsyrmc());
jcYc.setSyzdz(dsYcjbxx.getCbsyrdz());
jcYc.setSyzdh(dsYcjbxx.getCbsyrdh());
jcYc.setYzbm(dsYcjbxx.getYzbm());
System.out.println("基础渔船信息同步,数据已更新: cm=" + jcYc.getCm());
} else if ("删除记录".equals(dsYcjbxx.getGxcz())) {
System.out.println("基础渔船信息同步,数据已删除: cm=" + jcYc.getCm());
JcYc jcYcNew = new JcYc();
jcYcNew.setSysOrgCode("A01");
jcYcNew.setId(dsYcjbxx.getId());
jcYcNew.setCm(dsYcjbxx.getCm());
jcYcNew.setYcm(dsYcjbxx.getYcm());
jcYcNew.setYcssd(dsYcjbxx.getYcszdqdm());
jcYcNew.setCjg(dsYcjbxx.getCjgcn());
jcYcNew.setZccmc(dsYcjbxx.getZccmc());
jcYcNew.setZccyw(dsYcjbxx.getZccyw());
jcYcNew.setZccdz(dsYcjbxx.getZccdz());
jcYcNew.setZccdzyw(dsYcjbxx.getZccdzyw());
jcYcNew.setCc(dsYcjbxx.getCc());
jcYcNew.setXk(dsYcjbxx.getXk());
jcYcNew.setXs(dsYcjbxx.getXs());
jcYcNew.setZdw(dsYcjbxx.getZdw());
jcYcNew.setJdw(dsYcjbxx.getJdw());
jcYcNew.setZjzgl(dsYcjbxx.getZjzgl());
String ctcz = dsYcjbxx.getCtcz();
if (BeanUtil.isNotEmpty(ctcz)) {
String valByText = sysDictMapper.getValByText("1682656333384515586", ctcz);
jcYcNew.setCtcz(Integer.valueOf(valByText));
String jzwgrq = dsYcjbxx.getJzwgrq();
if (BeanUtil.isNotEmpty(jzwgrq)) {
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(jzwgrq);
jcYcNew.setCbhh(dsYcjbxx.getCbhhsbm());
String zylx = dsYcjbxx.getZylx();
if (BeanUtil.isNotEmpty(zylx)) {
String valByText = sysDictMapper.getValByText("1683404442990235649", zylx);
jcYcNew.setZylx(Integer.valueOf(valByText));
jcYcNew.setZyfs(dsYcjbxx.getZyfs());
jcYcNew.setZyfs2(dsYcjbxx.getZyfs2());
jcYcNew.setZycs(dsYcjbxx.getZycs());
jcYcNew.setSyzxm(dsYcjbxx.getCbsyrmc());
jcYcNew.setSyzdz(dsYcjbxx.getCbsyrdz());
jcYcNew.setSyzdh(dsYcjbxx.getCbsyrdh());
jcYcNew.setYzbm(dsYcjbxx.getYzbm());
jcYcNew.setBlxkzbh(dsYcjbxx.getBlxkzbh());
jcYcNew.setCbjyzsbh(dsYcjbxx.getCbjyzsbh());
jcYcNew.setGjdjzsbh(dsYcjbxx.getGjdjzsbh());
jcYcNew.setSyqzsbh(dsYcjbxx.getSyqzsbh());
jcYcNew.setZxdjbh(dsYcjbxx.getZxdjbh());
jcYcNew.setCwpzsbh(dsYcjbxx.getCwgjzbpzsbh());
String cbzl = dsYcjbxx.getCbzl();
if (BeanUtil.isNotEmpty(cbzl)) {
String valByText = sysDictMapper.getValByText("1683369911311855617", cbzl);
jcYcNew.setYclx(Integer.valueOf(valByText));
jcYcNew.setHh(dsYcjbxx.getHh());
jcYcNew.setJwm(dsYcjbxx.getCbsbm());
jcYcNew.setCmhzsbh(dsYcjbxx.getCmhzsbh());
jcYcNew.setYcbm(dsYcjbxx.getYcbm());
jcYcNew.setSfzqybh(dsYcjbxx.getCbsyrsfzhmhqyzch());
jcYcNew.setYcid(dsYcjbxx.getId());
jcYcNew.setYyzzmc(dsYcjbxx.getYyzzmc());
System.out.println("基础渔船信息同步,数据已新增: cm=" + jcYcNew.getCm());
jcYcService.updateBatchById(updateList);
jcYcService.saveBatch(insertList);
redisTemplate.opsForValue().set(YC_MAX_TIME, ycMaxTime);
List list = jcYcService.list();
ArrayList sysCertPdfs = RequestYxeUtil.xeblCertificate(jcYc.getCm(), jcYc.getYcid(), uploadType);
for (SysCertPdf sysCertPdf : sysCertPdfs) {
SysCertPdf sysCertPdfOld = sysCertPdfService.getFileNameByValue(sysCertPdf.getModelName(), sysCertPdf.getCertId());
if (BeanUtil.isNotEmpty(sysCertPdfOld)){
BeanUtil.copyProperties(sysCertPdf,sysCertPdfOld,"id");
sysCertPdfService.updateById(sysCertPdfOld);
sysCertPdfService.save(sysCertPdf);
redisTemplate.opsForValue().set(YC_MAX_TIME, ycMaxTime);
@XxlJob(value = "cyzsxx")
public ReturnT cyzsxx(String params) {
String cyszxxMaxTime = dsCyzsxxService.queryMaxTime();
if (redisTemplate.hasKey(CYZSXX_MAX_TIME)) {
String redisCyzsxxTime = (String) redisTemplate.opsForValue().get(CYZSXX_MAX_TIME);
if (redisCyzsxxTime != null && !redisCyzsxxTime.equals(cyszxxMaxTime)) {
ArrayList updateList = new ArrayList<>();
ArrayList insertList = new ArrayList<>();
List dsCyzsxxList = dsCyzsxxService.list();
List chuanYuanZhengShuList = chuanYuanZhengShuService.list();
Map> chuanYuanZhengShuMap = chuanYuanZhengShuList.stream().collect(Collectors.groupingBy(e -> e.getZshm() + e.getZszw() + e.getZszt()));
for (DsCyzsxx dsCyzsxx : dsCyzsxxList) {
if (chuanYuanZhengShuMap.get(dsCyzsxx.getZshm() + dsCyzsxx.getZszw() + dsCyzsxx.getZszt()) != null && !chuanYuanZhengShuMap.get(dsCyzsxx.getZshm() + dsCyzsxx.getZszw() + dsCyzsxx.getZszt()).isEmpty()) {
ChuanYuanZhengShu chuanYuanZhengShu = chuanYuanZhengShuMap.get(dsCyzsxx.getZshm() + dsCyzsxx.getZszw() + dsCyzsxx.getZszt()).get(0);
updateList.add(chuanYuanZhengShu);
System.out.println("船员证书信息数据同步,数据已更新: zshm=" + chuanYuanZhengShu.getZshm());
ChuanYuanZhengShu cyzsNew = new ChuanYuanZhengShu();
cyzsNew.setSysOrgCode("A01");
cyzsNew.setSfzhm(dsCyzsxx.getSfzhm());
cyzsNew.setXm(dsCyzsxx.getXm());
cyzsNew.setXmpy(dsCyzsxx.getXmpy());
cyzsNew.setXb(dsCyzsxx.getXb());
cyzsNew.setCsrq(dsCyzsxx.getCsrq());
cyzsNew.setHjsf(dsCyzsxx.getHjsf());
cyzsNew.setHjcs(dsCyzsxx.getHjcs());
cyzsNew.setHjdz(dsCyzsxx.getHjdz());
cyzsNew.setZslx(dsCyzsxx.getZslx());
cyzsNew.setLbdm(dsCyzsxx.getLbdm());
cyzsNew.setZszldm(dsCyzsxx.getZszldm());
cyzsNew.setZsdj(dsCyzsxx.getZsdj());
cyzsNew.setZszw(dsCyzsxx.getZszw());
cyzsNew.setSycb(dsCyzsxx.getSycb());
cyzsNew.setZshm(dsCyzsxx.getZshm());
cyzsNew.setQfjg(dsCyzsxx.getQfjg());
cyzsNew.setQfgyxm(dsCyzsxx.getQfgyxm());
cyzsNew.setQfrq(dsCyzsxx.getQfrq());
cyzsNew.setDyrq(dsCyzsxx.getQfrq());
cyzsNew.setJzrq(dsCyzsxx.getJzrq());
cyzsNew.setZszt(dsCyzsxx.getZszt());
cyzsNew.setDahm(dsCyzsxx.getDahm());
System.out.println("船员证书信息数据同步,数据已新增: zshm=" + cyzsNew.getZshm());
chuanYuanZhengShuService.updateBatchById(updateList);
chuanYuanZhengShuService.saveOrUpdateBatch(insertList);
redisTemplate.opsForValue().set(CYZSXX_MAX_TIME, cyszxxMaxTime);
redisTemplate.opsForValue().set(CYZSXX_MAX_TIME, cyszxxMaxTime);
public ReturnT cyxx(String params) throws Exception {
String cyxxMaxTime = dsCyzsxxService.queryMaxTime();
if (redisTemplate.hasKey(CYXX_MAX_TIME)) {
String redisCyxxTime = (String) redisTemplate.opsForValue().get(CYXX_MAX_TIME);
if (redisCyxxTime != null && !redisCyxxTime.equals(cyxxMaxTime)) {
ArrayList updateList = new ArrayList<>();
ArrayList insertList = new ArrayList<>();
QueryWrapper queryWrapperCy = new QueryWrapper<>();
queryWrapperCy.groupBy("SFZHM");
List dsYcjbxxesCy = dsCyzsxxService.list(queryWrapperCy);
List chuanYuanList = chuanYuanService.list();
Map> ycMap = chuanYuanList.stream().collect(Collectors.groupingBy(ChuanYuan::getSfzhm));
for (DsCyzsxx cyzsxx : dsYcjbxxesCy) {
if (ycMap.get(cyzsxx.getSfzhm()) != null && !ycMap.get(cyzsxx.getSfzhm()).isEmpty()) {
ChuanYuan chuanYuan = ycMap.get(cyzsxx.getSfzhm()).get(0);
chuanYuan.setYxbz(cyzsxx.getZszt());
updateList.add(chuanYuan);
System.out.println("船员信息数据同步,数据已更新: sfzhm=" + chuanYuan.getSfzhm());
ChuanYuan cyNew = new ChuanYuan();
cyNew.setSysOrgCode("A01");
cyNew.setSfzhm(cyzsxx.getSfzhm());
cyNew.setXm(cyzsxx.getXm());
cyNew.setXmpy(cyzsxx.getXmpy());
cyNew.setXb(cyzsxx.getXb());
cyNew.setCsrq(cyzsxx.getCsrq());
cyNew.setHjsf(cyzsxx.getHjsf());
cyNew.setHjcs(cyzsxx.getHjcs());
cyNew.setHjqx(cyzsxx.getHjxq());
cyNew.setHjdz(cyzsxx.getHjdz());
cyNew.setYxbz(cyzsxx.getZszt());
System.out.println("船员证书信息数据同步,数据已新增: zshm=" + cyNew.getSfzhm());
chuanYuanService.updateBatchById(updateList);
chuanYuanService.saveOrUpdateBatch(insertList);
redisTemplate.opsForValue().set(CYXX_MAX_TIME, cyxxMaxTime);
List list = chuanYuanService.list();
for (ChuanYuan chuanYuan : list) {
SysCertPdf sysCertPdf = RequestYxeUtil.xeblCyzp(chuanYuan.getSfzhm(), uploadType);
if (BeanUtil.isNotEmpty(sysCertPdf)) {
SysCertPdf sysCertPdfOld = sysCertPdfService.getFileNameByValue(sysCertPdf.getModelName(), sysCertPdf.getCertId());
if (BeanUtil.isNotEmpty(sysCertPdfOld)){
BeanUtil.copyProperties(sysCertPdf,sysCertPdfOld,"id");
sysCertPdfService.updateById(sysCertPdfOld);
sysCertPdfService.save(sysCertPdf);
redisTemplate.opsForValue().set(CYXX_MAX_TIME, cyxxMaxTime);

package org.jeecg.modules.quota.utils;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.util.MinioUtil;
import org.jeecg.common.util.ZOSUtil;
import org.jeecg.modules.quota.controller.DataSynchronismController;
import org.jeecg.modules.quota.entity.SysCertPdf;
import org.jeecg.modules.quota.service.ISysCertPdfService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class RequestYxeUtil {
private static final String token_url = "http://2xx.x.xx.xx3:xx99/cnfai/oauth/token?clientId=2c9fb2a67c642bd2017c642bd21c0000&clientSecret=6ab3e8291b9af57c7ac4457bc60e0d2e0b08a8b9828c6e9d86250458b4de51bf82d9604abeb987d3";
private static final String XeblCertificate_url = "http://2xx.x.xx.xx3:xx99/cnfai/services/certificateApi/XeblCertificate";
private static final String XeblCyzp_token_url = "http://2xx.x.xx.xx3:xx99/cnfai//oauth/token";
private static final String XeblCyzp_url = "http://2xx.x.xx.xx3:xx99/cnfai//services/CyService/getCyPhoto";
public static ArrayList xeblCertificate(String cm, String ycid, String uploadType) throws Exception {
ArrayList sysCertPdfs = new ArrayList<>();
String requestResult = HttpRequest.post(token_url).execute().body();
JSONObject jsonResult = JSONUtil.parseObj(requestResult);
String code = jsonResult.getStr("code");
String result = jsonResult.getStr("result");
JSONObject resultJson = JSONUtil.parseObj(result);
String accessToken = resultJson.getStr("accessToken");
HashMap paramMap = new HashMap<>();
paramMap.put("shipName", cm);
paramMap.put("shipInfoId", ycid);
String xeblCertificateResult = HttpRequest.post(XeblCertificate_url)
.header("X-Access-Token", accessToken)
.body(JSONUtil.toJsonPrettyStr(paramMap)).execute().body();
JSONObject jsonObject = JSONUtil.parseObj(xeblCertificateResult);
String code1 = jsonObject.getStr("code");
if ("200".equals(code1)) {
JSONObject json_result = jsonObject.getJSONObject("result");
Map map = JSONUtil.parseObj(json_result);
Map sysCertPdfMap = new HashMap<>();
Object pngCert = map.get("pngCert");
if (pngCert instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) pngCert;
for (Object o : jsonArray) {
Map pngCertMap = (Map) o;
for (String value : pngCertMap.keySet()) {
SysCertPdf sysCertPdf = new SysCertPdf();
String base64 = (String) pngCertMap.get(value);
MultipartFile pngMultipartFile = Base64ToMultipartFileConverter.convert(base64, ycid + ".png");
uploadFile(pngMultipartFile, value, "png", ycid, uploadType, sysCertPdf);
sysCertPdfMap.put(value, sysCertPdf);
Object pdfCert = map.get("pdfCert");
if (pdfCert instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) pdfCert;
for (Object o : jsonArray) {
Map pngCertMap = (Map) o;
for (String value : pngCertMap.keySet()) {
String base64 = (String) pngCertMap.get(value);
MultipartFile pdfMultipartFile = Base64ToMultipartFileConverter.convert(base64, ycid + ".pdf");
uploadFile(pdfMultipartFile, value, "pdf", ycid, uploadType, sysCertPdfMap.get(value));
for (String s : sysCertPdfMap.keySet()) {
sysCertPdfs.add(sysCertPdfMap.get(s));
public static SysCertPdf uploadFile(MultipartFile multipartFile, String value, String type, String ycid, String uploadType, SysCertPdf sysCertPdf) throws Exception {
String bizPath = "pdfCert" + "/" + value;
if ("png".equals(type)) {
if (CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)) {
fileUrl = MinioUtil.upload(multipartFile, bizPath);
fileUrl = fileUrl.substring(1, fileUrl.length());
sysCertPdf.setModelName(value);
sysCertPdf.setPngPath(fileUrl);
sysCertPdf.setCertId(ycid);
sysCertPdf.setCertType(1);
sysCertPdf.setDeleted(0);
} else if (CommonConstant.UPLOAD_TYPE_ZOS.equals(uploadType)) {
fileUrl = ZOSUtil.upload(multipartFile, bizPath);
sysCertPdf.setModelName(value);
sysCertPdf.setPngPath(fileUrl);
sysCertPdf.setCertId(ycid);
sysCertPdf.setCertType(1);
sysCertPdf.setDeleted(0);
} else if ("pdf".equals(type)) {
if (BeanUtil.isNotEmpty(sysCertPdf)) {
if (CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)) {
fileUrl = MinioUtil.upload(multipartFile, bizPath);
sysCertPdf.setPdfPath(fileUrl);
} else if (CommonConstant.UPLOAD_TYPE_ZOS.equals(uploadType)) {
fileUrl = ZOSUtil.upload(multipartFile, bizPath);
sysCertPdf.setPdfPath(fileUrl);
public static void saveFileToLocal(MultipartFile file, String type, String value, String ycid) throws IOException {
String fileName = file.getOriginalFilename();
String filePath = "E:\\workspace\\" + fileName + "." + type;
String filePath1 = "E:\\workspace\\" + "pdfCert" + "/" + value + "/" + ycid + "." + type;
File localFile = new File(filePath1);
if (!localFile.getParentFile().exists()) {
localFile.getParentFile().mkdirs();
file.transferTo(localFile);
public static SysCertPdf xeblCyzp(String sfzhm, String uploadType) throws Exception {
HashMap paramMap = new HashMap<>();
paramMap.put("clientId", "402881fXXXXXXXXXXc27e00001");
paramMap.put("clientSecret", "482978cf5bcb08bc51dcec5b680ccXXXXXXXXXXXXXXXXXXXfc894ccff5ff54ceef53cfde562");
String requestResult = HttpRequest.post(XeblCyzp_token_url).form(paramMap)
JSONObject jsonResult = JSONUtil.parseObj(requestResult);
String code = jsonResult.getStr("code");
String result = jsonResult.getStr("result");
JSONObject resultJson = JSONUtil.parseObj(result);
String accessToken = resultJson.getStr("accessToken");
String[] str = new String[]{sfzhm};
String xeblCyzpUrlResult = HttpRequest.post(XeblCyzp_url)
.header("X-Access-Token", accessToken)
.body(Arrays.toString(str)).execute().body();
JSONObject jsonObject = JSONUtil.parseObj(xeblCyzpUrlResult);
String code1 = jsonObject.getStr("code");
if ("200".equals(code1)) {
String str_result = jsonObject.getStr("result");
Map collect = Arrays.stream(str_result.split(",")).collect(Collectors.toMap((e -> e.split(":")[0]), (e -> e.split(":")[1])));
StringBuilder stringBuilder = new StringBuilder();
StringBuilder append = stringBuilder.append("[{\"").append(sfzhm).append("\"");
String sfzhmBase64 = collect.get(append.toString());
String substring = sfzhmBase64.substring(1,sfzhmBase64.length()-3);
MultipartFile jpgMultipartFile = Base64ToMultipartFileConverter.convert(substring, sfzhm + ".jpg");
return uploadCyPhoto(jpgMultipartFile, sfzhm, uploadType);
private static SysCertPdf uploadCyPhoto(MultipartFile jpgMultipartFile, String sfzhm, String uploadType) throws Exception {
String bizPath = "cyPhoto";
SysCertPdf sysCertPdf = new SysCertPdf();
if (CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)) {
fileUrl = MinioUtil.upload(jpgMultipartFile, bizPath);
fileUrl = fileUrl.substring(1);
sysCertPdf.setModelName("cyPhoto");
sysCertPdf.setPngPath(fileUrl);
sysCertPdf.setCertId(sfzhm);
sysCertPdf.setCertType(2);
sysCertPdf.setDeleted(0);
}else if (CommonConstant.UPLOAD_TYPE_ZOS.equals(uploadType)) {
fileUrl = ZOSUtil.upload(jpgMultipartFile, bizPath);
sysCertPdf.setModelName("cyPhoto");
sysCertPdf.setPngPath(fileUrl);
sysCertPdf.setCertId(sfzhm);
sysCertPdf.setCertType(2);
sysCertPdf.setDeleted(0);
