Commit ff4f9183 authored by wujiang's avatar wujiang

修改工行回调

parent 8d0a176d
package com.yeejoin.amos.boot.module.hygf.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* (hygf_icbc_record)实体类
*
* @author yangyang
* @description
* @since 2024-07-18 11:40:46
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName(value = "hygf_icbc_request", autoResultMap = true)
public class HygfIcbcRequest extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 内容状态
*/
@TableField("content")
private String content;
@TableField("phase")
private String phase;
/**
* 内容状态
*/
@TableField("exception")
private String exception;
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.hygf.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.hygf.api.config.UserEmpower;
import com.yeejoin.amos.boot.module.hygf.api.dto.AcceptanceDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.HygfIcbcRecordDTO;
import com.yeejoin.amos.boot.module.hygf.api.dto.HygfIcbcRecordQueryDTO;
import com.yeejoin.amos.boot.module.hygf.api.entity.HygfIcbcRecord;
import com.yeejoin.amos.boot.module.hygf.api.entity.HygfIcbcRequest;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (hygf_icbc_record)数据Mapper
*
* @author yangyang
* @description
* @since 2024-07-18 11:40:46
*/
public interface HygfIcbcRequestMapper extends BaseMapper<HygfIcbcRequest> {
}
package com.yeejoin.amos.boot.module.hygf.biz.service.impl; package com.yeejoin.amos.boot.module.hygf.biz.service.impl;
import cn.hutool.core.codec.Base64; import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.icbc.api.DefaultIcbcClient; import com.icbc.api.DefaultIcbcClient;
import com.icbc.api.IcbcApiException; import com.icbc.api.IcbcApiException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.icbc.api.IcbcConstants; import com.icbc.api.IcbcConstants;
import com.icbc.api.UiIcbcClient; import com.icbc.api.UiIcbcClient;
import com.icbc.api.request.JftApiUserEntrustopenacctQueryRequestV1; import com.icbc.api.request.JftApiUserEntrustopenacctQueryRequestV1;
...@@ -18,40 +44,14 @@ import com.yeejoin.amos.boot.module.hygf.api.Enum.IcbcEnum; ...@@ -18,40 +44,14 @@ import com.yeejoin.amos.boot.module.hygf.api.Enum.IcbcEnum;
import com.yeejoin.amos.boot.module.hygf.api.dto.HygfIcbcRecordDTO; import com.yeejoin.amos.boot.module.hygf.api.dto.HygfIcbcRecordDTO;
import com.yeejoin.amos.boot.module.hygf.api.dto.HygfIcbcRecordQueryDTO; import com.yeejoin.amos.boot.module.hygf.api.dto.HygfIcbcRecordQueryDTO;
import com.yeejoin.amos.boot.module.hygf.api.entity.HygfIcbcRecord; import com.yeejoin.amos.boot.module.hygf.api.entity.HygfIcbcRecord;
import com.yeejoin.amos.boot.module.hygf.api.entity.HygfIcbcRequest;
import com.yeejoin.amos.boot.module.hygf.api.entity.PeasantHousehold; import com.yeejoin.amos.boot.module.hygf.api.entity.PeasantHousehold;
import com.yeejoin.amos.boot.module.hygf.api.mapper.HygfIcbcRecordMapper; import com.yeejoin.amos.boot.module.hygf.api.mapper.HygfIcbcRecordMapper;
import com.yeejoin.amos.boot.module.hygf.api.mapper.HygfIcbcRequestMapper;
import com.yeejoin.amos.boot.module.hygf.api.service.IHygfIcbcService; import com.yeejoin.amos.boot.module.hygf.api.service.IHygfIcbcService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import cn.hutool.core.codec.Base64;
import lombok.extern.slf4j.Slf4j;
/** /**
* 并网信息服务实现类 * 并网信息服务实现类
...@@ -61,12 +61,12 @@ import java.util.stream.Collectors; ...@@ -61,12 +61,12 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
@Slf4j @Slf4j
public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbcRecord, HygfIcbcRecordMapper> implements IHygfIcbcService { public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbcRecord, HygfIcbcRecordMapper>
implements IHygfIcbcService {
private static final String trxChannel = "05"; // 05表示小程序 private static final String trxChannel = "05"; // 05表示小程序
// 正式环境 // 正式环境
// private static final String APP_ID = "11000000000000028870"; // private static final String APP_ID = "11000000000000028870";
// private static final String corpNo = "020240710000001169"; // private static final String corpNo = "020240710000001169";
// private static final String MY_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDAlcIeANdqipul3/qAIRlknSacHiFCMzLzUJisGcr9ipm3p2rir8WDsac2MxgtUt+f89SGNoWyjv4q0/QAKQQTd5U3KuGAksCJLBGVibuFe7G7YGYVezUksjvocvp8GIinCIkzq67KL2SOpGXAu3s+282rx8AxdTZA/EhXQvbORbWz5+DamyY+wS7Maa8KmIOb6WZPtiXgENZxDHAafrqW8Gt1BnVfJNf5yS5J9Wl+LcR1EPvi5iH8dSIdn1ZMVupoREjV/DvItSogVehsqTRZWuekAo2xH9YEli1UMG/l3deViRn/A4VmPPzdv0xXpn/yO+OTjWez+KmSmJfAZXBvAgMBAAECggEABRYviWFWTz8X+1qeIDI/nHO2KFt3X2tAxkJztd/8h5PYmYw3e4NPATp5Ayp4UgIlW/ExxNW91EiImBL/F939eJIpA8sDJ8U4hqb+U+fOZyksOZnDOIAHmE+I24vl588yFM9Z6F55gGeeDVJ0SZHqIG/nz8i339aLt02yj3N6V1peQugBP6L9arcD+gVu4F70whkqW+lHBK/WzX1OazqEx3Ip175jqzi9/0vO/h/kqnGGXuMi2VeuAPsa+d0a6lf/FScxqCt3t6dCkJ5DPA1MCj81dPi5ZfCM/vE0N8I6LEV+RyC7bb4YVO/PoicFjb2j8vfLvldOUrsvkNH51dZusQKBgQDpMHacOBpIuVzEFfNtS9SgA96cUV6NCSmHoQppJ/p9xKzY4DpcqoOCIBT4WCvVe6PeN5mrjzt8Q5gJWxiq0tVgIF9k8GjLmuiJ2v4Qh8aUmlRwn0T0DYiX/Y7uzX+pRlkpoKrSktlTOT9vmGwZDGDk0h2+H3hZ3YQEucfA6bhHmQKBgQDTbHrbr1WsUR9lrdLaGi/Uphpl3BXLuCnJXav3yIZOktO5V68MfPZXLP7aaNtbK3n0YHD+Uv8wpHBBSWQYjVYlGdvlniA/W1pr73GZJECFfS1BmmFC4GG3E92D5IkmrcPlUuz8XxKrlwHnfW1F0MoDvhp930vS0tS6u+WYTt9dRwKBgCeEQPVkRIACeYf5OFFTQmsDfNv8pgs8fD8xuTPsxHQ/uhLenMVLWBHbIfKb7oG0/CYSQgZitW/vfHpJZ7q7E9HAaqoOW5P1YmbKJ7fhanOQW7LiKqs5B+bJ30j0piendkCpq4kXvaBu2SMuL1NnV5wvRz8K0jhYY6DxYrp8YPAxAoGAZxWTaZ25tgTvvBHeprzx6Ur7wAJpFiU7KpVjjbLV2WW5mbro/LvJGIQ11qQdn/w4wDBtp3MsPblPimWQSnBPOlO7Zd+NdZbDJbFfv/1vACcic8Qj/AmPW0ZyUSaSwKskwqGGLx7j6Yn9QbNkHhBJDz4XiJvhSm/FjS6kKXj7a20CgYEArnEiPmL5g1Ca/qKK9ql8Q6P9gipIfGGpaFu23y0trbcFpVn8Oos/ic0Jgw4Xiz+rqvb6bW2V6lqBJ+9/kdn0i7zlZxKNpYsW2xFgi04OU3d5HkGL16Y1rpqMYYEhjFaOIn7J8P046UYR99yaybgQd18TE6oFrX8OL5uY8M4ge4Y="; // private static final String MY_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDAlcIeANdqipul3/qAIRlknSacHiFCMzLzUJisGcr9ipm3p2rir8WDsac2MxgtUt+f89SGNoWyjv4q0/QAKQQTd5U3KuGAksCJLBGVibuFe7G7YGYVezUksjvocvp8GIinCIkzq67KL2SOpGXAu3s+282rx8AxdTZA/EhXQvbORbWz5+DamyY+wS7Maa8KmIOb6WZPtiXgENZxDHAafrqW8Gt1BnVfJNf5yS5J9Wl+LcR1EPvi5iH8dSIdn1ZMVupoREjV/DvItSogVehsqTRZWuekAo2xH9YEli1UMG/l3deViRn/A4VmPPzdv0xXpn/yO+OTjWez+KmSmJfAZXBvAgMBAAECggEABRYviWFWTz8X+1qeIDI/nHO2KFt3X2tAxkJztd/8h5PYmYw3e4NPATp5Ayp4UgIlW/ExxNW91EiImBL/F939eJIpA8sDJ8U4hqb+U+fOZyksOZnDOIAHmE+I24vl588yFM9Z6F55gGeeDVJ0SZHqIG/nz8i339aLt02yj3N6V1peQugBP6L9arcD+gVu4F70whkqW+lHBK/WzX1OazqEx3Ip175jqzi9/0vO/h/kqnGGXuMi2VeuAPsa+d0a6lf/FScxqCt3t6dCkJ5DPA1MCj81dPi5ZfCM/vE0N8I6LEV+RyC7bb4YVO/PoicFjb2j8vfLvldOUrsvkNH51dZusQKBgQDpMHacOBpIuVzEFfNtS9SgA96cUV6NCSmHoQppJ/p9xKzY4DpcqoOCIBT4WCvVe6PeN5mrjzt8Q5gJWxiq0tVgIF9k8GjLmuiJ2v4Qh8aUmlRwn0T0DYiX/Y7uzX+pRlkpoKrSktlTOT9vmGwZDGDk0h2+H3hZ3YQEucfA6bhHmQKBgQDTbHrbr1WsUR9lrdLaGi/Uphpl3BXLuCnJXav3yIZOktO5V68MfPZXLP7aaNtbK3n0YHD+Uv8wpHBBSWQYjVYlGdvlniA/W1pr73GZJECFfS1BmmFC4GG3E92D5IkmrcPlUuz8XxKrlwHnfW1F0MoDvhp930vS0tS6u+WYTt9dRwKBgCeEQPVkRIACeYf5OFFTQmsDfNv8pgs8fD8xuTPsxHQ/uhLenMVLWBHbIfKb7oG0/CYSQgZitW/vfHpJZ7q7E9HAaqoOW5P1YmbKJ7fhanOQW7LiKqs5B+bJ30j0piendkCpq4kXvaBu2SMuL1NnV5wvRz8K0jhYY6DxYrp8YPAxAoGAZxWTaZ25tgTvvBHeprzx6Ur7wAJpFiU7KpVjjbLV2WW5mbro/LvJGIQ11qQdn/w4wDBtp3MsPblPimWQSnBPOlO7Zd+NdZbDJbFfv/1vACcic8Qj/AmPW0ZyUSaSwKskwqGGLx7j6Yn9QbNkHhBJDz4XiJvhSm/FjS6kKXj7a20CgYEArnEiPmL5g1Ca/qKK9ql8Q6P9gipIfGGpaFu23y0trbcFpVn8Oos/ic0Jgw4Xiz+rqvb6bW2V6lqBJ+9/kdn0i7zlZxKNpYsW2xFgi04OU3d5HkGL16Y1rpqMYYEhjFaOIn7J8P046UYR99yaybgQd18TE6oFrX8OL5uY8M4ge4Y=";
...@@ -77,339 +77,411 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc ...@@ -77,339 +77,411 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
// private static final String OUT_VENDOR_ID = "071301"; // private static final String OUT_VENDOR_ID = "071301";
// private static final String PROJECT_ID = "PJ14001401B000160171"; // private static final String PROJECT_ID = "PJ14001401B000160171";
// 测试环境 // 测试环境
@Value ("${hygf.icbc.appId}") @Value("${hygf.icbc.appId}")
private String APP_ID; private String APP_ID;
@Value ("${hygf.icbc.corpNo}") @Value("${hygf.icbc.corpNo}")
private String corpNo; private String corpNo;
@Value ("${hygf.icbc.myPrivateKey}") @Value("${hygf.icbc.myPrivateKey}")
private String MY_PRIVATE_KEY; private String MY_PRIVATE_KEY;
@Value ("${hygf.icbc.serviceUrl}") @Value("${hygf.icbc.serviceUrl}")
private String serviceUrl; private String serviceUrl;
@Value ("${hygf.icbc.aesKey}") @Value("${hygf.icbc.aesKey}")
private String AES_Key; private String AES_Key;
@Value ("${hygf.icbc.camsPublicKey}") @Value("${hygf.icbc.camsPublicKey}")
private String CAMS_PUBLIC_KEY; private String CAMS_PUBLIC_KEY;
@Value ("${hygf.icbc.apigwPublicKey}") @Value("${hygf.icbc.apigwPublicKey}")
private String APIGW_PUBLIC_KEY; private String APIGW_PUBLIC_KEY;
@Value ("${hygf.icbc.outVendorId}") @Value("${hygf.icbc.outVendorId}")
private String OUT_VENDOR_ID; private String OUT_VENDOR_ID;
@Value ("${hygf.icbc.projectId}") @Value("${hygf.icbc.projectId}")
private String PROJECT_ID; private String PROJECT_ID;
/** /**
* 协议总限额 * 协议总限额
*/ */
@Value ("${hygf.icbc.protocolLimitAmount:2500000000}") @Value("${hygf.icbc.protocolLimitAmount:2500000000}")
private String protocolLimitAmount; private String protocolLimitAmount;
/** /**
* 单笔限额 * 单笔限额
*/ */
@Value ("${hygf.icbc.trxLmtAmt:10000000}") @Value("${hygf.icbc.trxLmtAmt:10000000}")
private String trxLmtAmt; private String trxLmtAmt;
/** /**
* 日累计限额 * 日累计限额
*/ */
@Value ("${hygf.icbc.dayLmtAmt:20000000}") @Value("${hygf.icbc.dayLmtAmt:20000000}")
private String dayLmtAmt; private String dayLmtAmt;
@Value ("${hygf.icbc.loanTotalAmt:0}") @Value("${hygf.icbc.loanTotalAmt:0}")
private String loanTotalAmt; private String loanTotalAmt;
/** /**
* 合作方接收结果通知 URL * 合作方接收结果通知 URL
*/ */
@Value ("${hygf.icbc.callbackUrl:}") @Value("${hygf.icbc.callbackUrl:}")
private String callbackUrl; private String callbackUrl;
@Resource (type = PeasantHouseholdServiceImpl.class) @Resource(type = PeasantHouseholdServiceImpl.class)
private PeasantHouseholdServiceImpl peasantHouseholdService; private PeasantHouseholdServiceImpl peasantHouseholdService;
@Resource (type = HygfIcbcRecordMapper.class) @Resource(type = HygfIcbcRecordMapper.class)
private HygfIcbcRecordMapper hygfIcbcRecordMapper; private HygfIcbcRecordMapper hygfIcbcRecordMapper;
public void icbcRegisterWalletUrl(HttpServletRequest req, HttpServletResponse resp) { @Resource(type = HygfIcbcRequestMapper.class)
try { private HygfIcbcRequestMapper hygfIcbcRequestMapper;
UiIcbcClient client = new UiIcbcClient(APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY, IcbcConstants.CHARSET_UTF8);
public void icbcRegisterWalletUrl(HttpServletRequest req, HttpServletResponse resp) {
try {
String userId = req.getParameter("userId"); UiIcbcClient client = new UiIcbcClient(APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY,
IcbcConstants.CHARSET_UTF8);
String userId = req.getParameter("userId");
// String userId = "071301"; // String userId = "071301";
JftUiUserEntrustopenacctSubmitRequestV1 request = new JftUiUserEntrustopenacctSubmitRequestV1(); JftUiUserEntrustopenacctSubmitRequestV1 request = new JftUiUserEntrustopenacctSubmitRequestV1();
request.setServiceUrl(serviceUrl + "/ui/jft/ui/user/entrustopenacct/submit/V1"); request.setServiceUrl(serviceUrl + "/ui/jft/ui/user/entrustopenacct/submit/V1");
JftUiUserEntrustopenacctSubmitRequestV1.JftUiUserEntrustopenacctSubmitRequestV1Biz bizContent = new JftUiUserEntrustopenacctSubmitRequestV1.JftUiUserEntrustopenacctSubmitRequestV1Biz(); JftUiUserEntrustopenacctSubmitRequestV1.JftUiUserEntrustopenacctSubmitRequestV1Biz bizContent = new JftUiUserEntrustopenacctSubmitRequestV1.JftUiUserEntrustopenacctSubmitRequestV1Biz();
bizContent.setAppId(APP_ID); bizContent.setAppId(APP_ID);
bizContent.setCorpNo(corpNo); bizContent.setCorpNo(corpNo);
bizContent.setOutUserId(userId); // 用户唯一id bizContent.setOutUserId(userId); // 用户唯一id
bizContent.setCorpSerno(UUID.randomUUID().toString()); bizContent.setCorpSerno(UUID.randomUUID().toString());
bizContent.setTrxChannel(trxChannel); bizContent.setTrxChannel(trxChannel);
bizContent.setSignProtocol("1"); // 是否对接缴费代扣流程 bizContent.setSignProtocol("1"); // 是否对接缴费代扣流程
bizContent.setOutVendorId(OUT_VENDOR_ID); // 企业外系统编号 bizContent.setOutVendorId(OUT_VENDOR_ID); // 企业外系统编号
bizContent.setProjectId(PROJECT_ID); // 缴费项目编号 bizContent.setProjectId(PROJECT_ID); // 缴费项目编号
bizContent.setBusiCode(userId); // 缴费编号 bizContent.setBusiCode(userId); // 缴费编号
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
Date date = new Date();// 当前时间 Date date = new Date();// 当前时间
calendar.setTime(date); calendar.setTime(date);
int year = 26;// 26年 int year = 26;// 26年
calendar.add(Calendar.YEAR, year);// 在年份增加 calendar.add(Calendar.YEAR, year);// 在年份增加
Date newDate = calendar.getTime(); Date newDate = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = formatter.format(newDate); String formattedDate = formatter.format(newDate);
bizContent.setProtocolEndDate(formattedDate); // 协议到期日 bizContent.setProtocolEndDate(formattedDate); // 协议到期日
bizContent.setProtocolLimitAmount(protocolLimitAmount); // 协议累计额 bizContent.setProtocolLimitAmount(protocolLimitAmount); // 协议累计额
JSONObject templateParams = new JSONObject(); JSONObject templateParams = new JSONObject();
templateParams.put("prtl_enddate", formattedDate);// 协议到期日 templateParams.put("prtl_enddate", formattedDate);// 协议到期日
templateParams.put("loan_total_amt", loanTotalAmt);// 贷款限额(单位:分) templateParams.put("loan_total_amt", loanTotalAmt);// 贷款限额(单位:分)
templateParams.put("trx_lmt_amt", trxLmtAmt);// 单笔限额(单位:分) templateParams.put("trx_lmt_amt", trxLmtAmt);// 单笔限额(单位:分)
templateParams.put("day_lmt_amt", dayLmtAmt);// 日累计限额(单位:分) templateParams.put("day_lmt_amt", dayLmtAmt);// 日累计限额(单位:分)
bizContent.setTemplateParams(templateParams.toJSONString()); bizContent.setTemplateParams(templateParams.toJSONString());
bizContent.setCallbackUrl(callbackUrl); bizContent.setCallbackUrl(callbackUrl);
bizContent.setCamsPublicKey(CAMS_PUBLIC_KEY); bizContent.setCamsPublicKey(CAMS_PUBLIC_KEY);
request.setBizContent(bizContent); request.setBizContent(bizContent);
// 调用工行 SDK,生成自动提交表单,将用户跳转到收方入驻页面 // 调用工行 SDK,生成自动提交表单,将用户跳转到收方入驻页面
log.info("聚富通委托代扣签约同步开户页面接口V1, 入参 => {}", JSON.toJSONString(request)); log.info("聚富通委托代扣签约同步开户页面接口V1, 入参 => {}", JSON.toJSONString(request));
String form = client.buildPostForm(request); String form = client.buildPostForm(request);
log.info("聚富通委托代扣签约同步开户页面接口V1, 响应 => {}", form); log.info("聚富通委托代扣签约同步开户页面接口V1, 响应 => {}", form);
resp.setHeader("Content-Type", "text/html;charset=" + IcbcConstants.CHARSET_UTF8); resp.setHeader("Content-Type", "text/html;charset=" + IcbcConstants.CHARSET_UTF8);
PrintWriter out = resp.getWriter(); PrintWriter out = resp.getWriter();
out.write("<html>"); out.write("<html>");
out.write("<head>"); out.write("<head>");
out.write("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=" + IcbcConstants.CHARSET_UTF8 + "\">"); out.write("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=" + IcbcConstants.CHARSET_UTF8
out.write("</head>"); + "\">");
out.write("<body>"); out.write("</head>");
out.write(form); out.write("<body>");
out.write("</body>"); out.write(form);
out.write("</html>"); out.write("</body>");
} catch (IcbcApiException e) { out.write("</html>");
log.error("聚富通委托代扣签约同步开户页面接口V1, error => ", e); } catch (IcbcApiException e) {
throw new BadRequest(e.getErrMsg()); log.error("聚富通委托代扣签约同步开户页面接口V1, error => ", e);
} catch (Exception e) { throw new BadRequest(e.getErrMsg());
log.error("聚富通委托代扣签约同步开户页面接口V1, error => ", e); } catch (Exception e) {
throw new RuntimeException(e.getMessage()); log.error("聚富通委托代扣签约同步开户页面接口V1, error => ", e);
} throw new RuntimeException(e.getMessage());
}
} }
public JftApiUserEntrustopenacctQueryResponseV1 getHygfIcbcWalletInfo(String userId) { public JftApiUserEntrustopenacctQueryResponseV1 getHygfIcbcWalletInfo(String userId) {
DefaultIcbcClient client = new DefaultIcbcClient( DefaultIcbcClient client = new DefaultIcbcClient(APP_ID, IcbcConstants.SIGN_TYPE_RSA2, MY_PRIVATE_KEY,
APP_ID, IcbcConstants.CHARSET_UTF8, IcbcConstants.FORMAT_JSON, APIGW_PUBLIC_KEY, IcbcConstants.ENCRYPT_TYPE_AES,
IcbcConstants.SIGN_TYPE_RSA2, AES_Key, "", "");
MY_PRIVATE_KEY,
IcbcConstants.CHARSET_UTF8, JftApiUserEntrustopenacctQueryRequestV1 request = new JftApiUserEntrustopenacctQueryRequestV1();
IcbcConstants.FORMAT_JSON, request.setServiceUrl(serviceUrl + "/api/jft/api/user/entrustopenacct/query/V1");
APIGW_PUBLIC_KEY, JftApiUserEntrustopenacctQueryRequestV1.JftApiUserEntrustopenacctQueryRequestV1Biz bizContent = new JftApiUserEntrustopenacctQueryRequestV1.JftApiUserEntrustopenacctQueryRequestV1Biz();
IcbcConstants.ENCRYPT_TYPE_AES, bizContent.setAppId(APP_ID);
AES_Key, bizContent.setOutVendorId(OUT_VENDOR_ID);
"", ""); bizContent.setOutUserId(userId);
bizContent.setProjectId(PROJECT_ID);
JftApiUserEntrustopenacctQueryRequestV1 request = new JftApiUserEntrustopenacctQueryRequestV1(); bizContent.setBusiCode(userId);
request.setServiceUrl(serviceUrl + "/api/jft/api/user/entrustopenacct/query/V1"); request.setBizContent(bizContent);
JftApiUserEntrustopenacctQueryRequestV1.JftApiUserEntrustopenacctQueryRequestV1Biz bizContent = new JftApiUserEntrustopenacctQueryRequestV1.JftApiUserEntrustopenacctQueryRequestV1Biz(); JftApiUserEntrustopenacctQueryResponseV1 response;
bizContent.setAppId(APP_ID); try {
bizContent.setOutVendorId(OUT_VENDOR_ID); log.info("聚富通委托代扣签约同步开户结果查询数据接口V1, => 入参: {}", JSON.toJSONString(request));
bizContent.setOutUserId(userId); response = client.execute(request, System.currentTimeMillis() + "");
bizContent.setProjectId(PROJECT_ID); log.info("聚富通委托代扣签约同步开户结果查询数据接口V1, => 响应: {}", JSON.toJSONString(response));
bizContent.setBusiCode(userId); if (response.isSuccess()) {
request.setBizContent(bizContent); return response;
JftApiUserEntrustopenacctQueryResponseV1 response; } else {
try { // 失败
log.info("聚富通委托代扣签约同步开户结果查询数据接口V1, => 入参: {}", JSON.toJSONString(request)); throw new BadRequest(response.getReturnMsg());
response = client.execute(request, System.currentTimeMillis() + ""); }
log.info("聚富通委托代扣签约同步开户结果查询数据接口V1, => 响应: {}", JSON.toJSONString(response)); } catch (IcbcApiException e) {
if (response.isSuccess()) { e.printStackTrace();
return response; log.error("聚富通委托代扣签约同步开户结果查询数据接口V1 error => ", e);
} else { throw new BadRequest(e.getErrMsg());
// 失败 } catch (Exception e) {
throw new BadRequest(response.getReturnMsg()); e.printStackTrace();
} log.error("聚富通委托代扣签约同步开户结果查询数据接口V1 error => ", e);
} catch (IcbcApiException e) { throw new RuntimeException(e.getMessage());
e.printStackTrace(); }
log.error("聚富通委托代扣签约同步开户结果查询数据接口V1 error => ", e); }
throw new BadRequest(e.getErrMsg());
} catch (Exception e) { /**
log.error("聚富通委托代扣签约同步开户结果查询数据接口V1 error => ", e); * 户用光伏开户签约异步通知使用
throw new RuntimeException(e.getMessage()); *
} * @param request request
} * @param response response
* @return {@link Object}
/** * @throws
* 户用光伏开户签约异步通知使用 * @author yangyang
* * @date 2024/7/18 20:15
* @param request request */
* @param response response public Object registerWalletCallback(HttpServletRequest request, HttpServletResponse response) throws Exception {
* @return {@link Object} log.info("户用光伏开户签约异步通知, => 验签");
* @throws String returnJson;
* @author yangyang // 网关公钥
* @date 2024/7/18 20:15 Map<String, String> params = new HashMap<>();
*/ String api = request.getParameter("api");
public Object registerWalletCallback(HttpServletRequest request, HttpServletResponse response) throws Exception { String from = request.getParameter("from");
log.info("户用光伏开户签约异步通知, => 验签"); String app_id = request.getParameter("app_id");
String returnJson; String charset = request.getParameter("charset");
try { String format = request.getParameter("format");
boolean verifyFlag = verifySignData(request, "/hygf/icbc/notify"); String encrypt_type = request.getParameter("encrypt_type");
if (verifyFlag) { String timestamp = request.getParameter("timestamp");
// 验签成功 String biz_content = request.getParameter("biz_content");
String biz_content = request.getParameter("biz_content"); String sign_type = request.getParameter("sign_type");
String decode = URLDecoder.decode(biz_content, "utf-8"); String sign = request.getParameter("sign");
Map<String, String> data = JSONObject.parseObject(decode, Map.class); params.put("from", from);
log.debug("解密后参数:{}", data);// 进行自己的处理,此处默认处理成功,返回通知方成功,return_code=0 params.put("api", api);
// 其中certNo、custName、newPayAcc字段进行了base64编码,可以调用示例代码中的base64Decode进行解码 params.put("app_id", app_id);
String custName = base64Decode(data.get("custName")); params.put("charset", charset);
String certNo = base64Decode(data.get("certNo")); params.put("format", format);
String newPayAcc = base64Decode(data.get("newPayAcc")); params.put("encrypt_type",
String outUserId = data.get("outUserId"); encrypt_type);
String projectId = data.get("projectId"); params.put("timestamp", timestamp);
String openAccoutSucceedFlag = data.get("openAccoutSucceedFlag"); //params.put("biz_content", "{\"busiCode\":\"11098243\",\"return_msg\":\"success\",\"outUserId\":\"11098243\",\"custName\":\"5p2O5Y2r5Lic\",\"marketingStaffId\":\"\",\"newPayAcc\":\"NjIxNDc2MTUwMjYwMjc5MDc4OQ==\",\"signEntrsutPrtlSucceedFlag\":\"1\",\"certNo\":\"MjI5MDA1MTk3MzEwMjUwMjFY\",\"appId\":\"11000000000000028870\",\"msg_id\":\"20240814190453416\",\"projectId\":\"PJ140014023565102203\",\"openAccoutSucceedFlag\":\"02\",\"return_code\":0}");
String signEntrsutPrtlSucceedFlag = data.get("signEntrsutPrtlSucceedFlag"); params.put("biz_content", biz_content);
JftApiUserEntrustopenacctQueryResponseV1 hygfIcbcWalletInfo = this.getHygfIcbcWalletInfo(outUserId); params.put("sign_type", sign_type);// 目前上行网关签名暂时仅支持RSA
// region 保存数据 params.put("sign", sign);
HygfIcbcRecord hygfIcbcRecord = this.lambdaQuery().eq(HygfIcbcRecord::getAmosUserId, outUserId).last(" limit 1").one(); HygfIcbcRequest hygfIcbcRequest = new HygfIcbcRequest();
if (hygfIcbcRecord == null) { hygfIcbcRequest.setPhase("验签");
hygfIcbcRecord = new HygfIcbcRecord(); hygfIcbcRequest.setContent(JSONObject.toJSONString(params));
} hygfIcbcRequest.setRecDate(new Date());
hygfIcbcRecord.setCustName(custName); hygfIcbcRequestMapper.insert(hygfIcbcRequest);
hygfIcbcRecord.setIdCard(certNo); try {
PeasantHousehold peasantHousehold = peasantHouseholdService.lambdaQuery().select(PeasantHousehold::getTelephone).eq(PeasantHousehold::getAmosUserId, outUserId).last("limit 1").one(); boolean verifyFlag = verifySignData(request, "/hygf/icbc/notify");
hygfIcbcRecord.setPhone(peasantHousehold != null ? peasantHousehold.getTelephone() : ""); if (verifyFlag) {
hygfIcbcRecord.setMediumId(newPayAcc); // 验签成功
hygfIcbcRecord.setProjectId(projectId); hygfIcbcRequest.setPhase("查询");
hygfIcbcRecord.setOpenAccountStatus(openAccoutSucceedFlag); hygfIcbcRequestMapper.updateById(hygfIcbcRequest);
hygfIcbcRecord.setSignEntrsutPrtlStatus(signEntrsutPrtlSucceedFlag);
if (hygfIcbcWalletInfo != null) { // String biz_content = request.getParameter("biz_content");
hygfIcbcRecord.setProtocolStatus(hygfIcbcWalletInfo.getProtocolStatus()); String decode = URLDecoder.decode(biz_content, "utf-8");
hygfIcbcRecord.setProtocolStartTime(hygfIcbcWalletInfo.getProtocolStartDate()); Map<String, String> data = JSONObject.parseObject(decode, Map.class);
hygfIcbcRecord.setProtocolEndTime(hygfIcbcWalletInfo.getProtocolEndDate()); log.debug("解密后参数:{}", data);// 进行自己的处理,此处默认处理成功,返回通知方成功,return_code=0
hygfIcbcRecord.setTrxLimitAmount(hygfIcbcWalletInfo.getTrxLimitAmount()); // 其中certNo、custName、newPayAcc字段进行了base64编码,可以调用示例代码中的base64Decode进行解码
hygfIcbcRecord.setDayLimitAmount(hygfIcbcWalletInfo.getDayLimitAmount()); String custName = base64Decode(data.get("custName"));
hygfIcbcRecord.setProtocolLimitAmount(hygfIcbcWalletInfo.getProtocolLimitAmount()); String certNo = base64Decode(data.get("certNo"));
hygfIcbcRecord.setAppId(hygfIcbcWalletInfo.getAppId()); String newPayAcc = base64Decode(data.get("newPayAcc"));
hygfIcbcRecord.setOutUserId(hygfIcbcWalletInfo.getOutUserId()); String outUserId = data.get("outUserId");
hygfIcbcRecord.setOutVendorId(hygfIcbcWalletInfo.getOutVendorId()); String projectId = data.get("projectId");
} String openAccoutSucceedFlag = data.get("openAccoutSucceedFlag");
// hygfIcbcRecord.setDiscardStatus(); String signEntrsutPrtlSucceedFlag = data.get("signEntrsutPrtlSucceedFlag");
hygfIcbcRecord.setAmosUserId(outUserId); JftApiUserEntrustopenacctQueryResponseV1 hygfIcbcWalletInfo = this.getHygfIcbcWalletInfo(outUserId);
hygfIcbcRecord.setRecDate(new Date()); // region 保存数据
this.saveOrUpdate(hygfIcbcRecord); HygfIcbcRecord hygfIcbcRecord = this.lambdaQuery().eq(HygfIcbcRecord::getAmosUserId, outUserId)
// endregion .last(" limit 1").one();
String copReturnCode = "0";// 通知合作方接收成功的返回码,固定 if (hygfIcbcRecord == null) {
String copReturnMsg = "success";// 合作方的返回信息,固定 hygfIcbcRecord = new HygfIcbcRecord();
returnJson = sign(request, copReturnCode, copReturnMsg); }
log.info("通知响应json结果:{}", returnJson); hygfIcbcRecord.setCustName(custName);
return returnJson; hygfIcbcRecord.setIdCard(certNo);
} else {// 验签失败
String copReturnCode = "‐12345"; hygfIcbcRequest.setPhase("组装");
String copReturnMsg = "icbc jft sign not pass."; hygfIcbcRequestMapper.updateById(hygfIcbcRequest);
returnJson = sign(request, copReturnCode, copReturnMsg);
log.error("通知响应json结果:{}", returnJson); PeasantHousehold peasantHousehold = peasantHouseholdService.lambdaQuery()
} .select(PeasantHousehold::getTelephone).eq(PeasantHousehold::getAmosUserId, outUserId)
} catch (Exception e) { .last("limit 1").one();
log.error("户用光伏开户签约异步通知, => error:", e); hygfIcbcRecord.setPhone(peasantHousehold != null ? peasantHousehold.getTelephone() : "");
String copReturnCode = "‐1"; hygfIcbcRecord.setMediumId(newPayAcc);
String copReturnMsg = "icbc jft error"; hygfIcbcRecord.setProjectId(projectId);
returnJson = sign(request, copReturnCode, copReturnMsg); hygfIcbcRecord.setOpenAccountStatus(openAccoutSucceedFlag);
} hygfIcbcRecord.setSignEntrsutPrtlStatus(signEntrsutPrtlSucceedFlag);
return returnJson; if (hygfIcbcWalletInfo != null) {
} hygfIcbcRecord.setProtocolStatus(hygfIcbcWalletInfo.getProtocolStatus());
hygfIcbcRecord.setProtocolStartTime(hygfIcbcWalletInfo.getProtocolStartDate());
public HygfIcbcRecordDTO getObject(String amosUserId) { hygfIcbcRecord.setProtocolEndTime(hygfIcbcWalletInfo.getProtocolEndDate());
HygfIcbcRecord hygfIcbcRecord = this.lambdaQuery().eq(HygfIcbcRecord::getAmosUserId, amosUserId).last("limit 1").one(); hygfIcbcRecord.setTrxLimitAmount(hygfIcbcWalletInfo.getTrxLimitAmount());
HygfIcbcRecordDTO hygfIcbcRecordDTO = new HygfIcbcRecordDTO(); hygfIcbcRecord.setDayLimitAmount(hygfIcbcWalletInfo.getDayLimitAmount());
if (hygfIcbcRecord == null) { hygfIcbcRecord.setProtocolLimitAmount(hygfIcbcWalletInfo.getProtocolLimitAmount());
PeasantHousehold peasantHousehold = peasantHouseholdService.lambdaQuery() hygfIcbcRecord.setAppId(hygfIcbcWalletInfo.getAppId());
.select(PeasantHousehold::getTelephone, PeasantHousehold::getOwnersName, PeasantHousehold::getIdCard) hygfIcbcRecord.setOutUserId(hygfIcbcWalletInfo.getOutUserId());
.eq(PeasantHousehold::getAmosUserId, amosUserId).last("limit 1").one(); hygfIcbcRecord.setOutVendorId(hygfIcbcWalletInfo.getOutVendorId());
}
hygfIcbcRecordDTO.setCustName(peasantHousehold.getOwnersName()); // hygfIcbcRecord.setDiscardStatus();
hygfIcbcRecordDTO.setIdCard(peasantHousehold.getIdCard()); hygfIcbcRecord.setAmosUserId(outUserId);
hygfIcbcRecordDTO.setPhone(peasantHousehold.getTelephone()); hygfIcbcRecord.setRecDate(new Date());
hygfIcbcRecordDTO.setOpenAccountStatus(IcbcEnum.OpenAccountState.INITIAL.getCode());
hygfIcbcRecordDTO.setOpenAccountStatusName(IcbcEnum.OpenAccountState.getNameByCode(IcbcEnum.OpenAccountState.INITIAL.getCode(), IcbcEnum.OpenAccountState.INITIAL.getName())); hygfIcbcRequest.setPhase("入库");
} else if (IcbcEnum.OpenAccountState.FAIL.getCode().equals(hygfIcbcRecord.getOpenAccountStatus())) { hygfIcbcRequestMapper.updateById(hygfIcbcRequest);
Bean.toModel(hygfIcbcRecord, hygfIcbcRecordDTO);
PeasantHousehold peasantHousehold = peasantHouseholdService.lambdaQuery() this.saveOrUpdate(hygfIcbcRecord);
.select(PeasantHousehold::getTelephone, PeasantHousehold::getOwnersName, PeasantHousehold::getIdCard) // endregion
.eq(PeasantHousehold::getAmosUserId, amosUserId).last("limit 1").one(); String copReturnCode = "0";// 通知合作方接收成功的返回码,固定
String copReturnMsg = "success";// 合作方的返回信息,固定
hygfIcbcRecordDTO.setCustName(peasantHousehold.getOwnersName());
hygfIcbcRecordDTO.setIdCard(peasantHousehold.getIdCard()); hygfIcbcRequest.setPhase("加签返回");
hygfIcbcRecordDTO.setPhone(peasantHousehold.getTelephone()); hygfIcbcRequestMapper.updateById(hygfIcbcRequest);
hygfIcbcRecordDTO.setOpenAccountStatusName(IcbcEnum.OpenAccountState.getNameByCode(hygfIcbcRecordDTO.getOpenAccountStatus(), IcbcEnum.OpenAccountState.INITIAL.getName())); returnJson = sign(request, copReturnCode, copReturnMsg);
hygfIcbcRecordDTO.setProtocolStatusName(IcbcEnum.ProtocolStatus.getNameByCode(hygfIcbcRecordDTO.getProtocolStatus(), "")); log.info("通知响应json结果:{}", returnJson);
} else { return returnJson;
Bean.toModel(hygfIcbcRecord, hygfIcbcRecordDTO); } else {// 验签失败
hygfIcbcRecordDTO.setOpenAccountStatusName(IcbcEnum.OpenAccountState.getNameByCode(hygfIcbcRecordDTO.getOpenAccountStatus(), IcbcEnum.OpenAccountState.INITIAL.getName())); hygfIcbcRequest.setPhase("验签失败");
hygfIcbcRecordDTO.setProtocolStatusName(IcbcEnum.ProtocolStatus.getNameByCode(hygfIcbcRecordDTO.getProtocolStatus(), "")); hygfIcbcRequestMapper.updateById(hygfIcbcRequest);
}
List<String> amosUserIds = Arrays.asList(amosUserId); String copReturnCode = "‐12345";
List<PeasantHousehold> peasantHouseholds = peasantHouseholdService.lambdaQuery().in(PeasantHousehold::getAmosUserId, amosUserIds).list(); String copReturnMsg = "icbc jft sign not pass.";
Map<String, List<PeasantHousehold>> peasantHouseholdMap = peasantHouseholds.stream().collect(Collectors.groupingBy(PeasantHousehold::getAmosUserId));// 根据农户 ID 分组 returnJson = sign(request, copReturnCode, copReturnMsg);
List<PeasantHousehold> peasantHouseholdList = peasantHouseholdMap.get(amosUserId); log.error("通知响应json结果:{}", returnJson);
hygfIcbcRecordDTO.setPeasantHouseholds(Bean.toModels(peasantHouseholdList, HygfIcbcRecordDTO.IcbcPeasantHousehold.class));
return hygfIcbcRecordDTO; }
} } catch (Exception e) {
log.error("户用光伏开户签约异步通知, => error:", e);
public List<HygfIcbcRecordDTO> listObject(HygfIcbcRecordQueryDTO hygfIcbcRecordQueryDTO) {
List<HygfIcbcRecordDTO> list = hygfIcbcRecordMapper.listObject(hygfIcbcRecordQueryDTO); hygfIcbcRequest.setException(JSONObject.toJSONString(e));
return toModels(list);
} hygfIcbcRequestMapper.updateById(hygfIcbcRequest);
String copReturnCode = "‐1";
public Page<HygfIcbcRecordDTO> queryForPage(int current, int size, HygfIcbcRecordQueryDTO hygfIcbcRecordQueryDTO) { String copReturnMsg = "icbc jft error";
// PageHelper.startPage(current, size); returnJson = sign(request, copReturnCode, copReturnMsg);
Integer total = hygfIcbcRecordMapper.listObjectCount(hygfIcbcRecordQueryDTO); }
hygfIcbcRecordQueryDTO.setLimit(size); return returnJson;
if (current == 1) { }
hygfIcbcRecordQueryDTO.setOffset(0);
} else { public HygfIcbcRecordDTO getObject(String amosUserId) {
// int offset = (current - 1) * size > total ? : (current - 1) * size; HygfIcbcRecord hygfIcbcRecord = this.lambdaQuery().eq(HygfIcbcRecord::getAmosUserId, amosUserId).last("limit 1")
hygfIcbcRecordQueryDTO.setOffset((current - 1) * size); .one();
} HygfIcbcRecordDTO hygfIcbcRecordDTO = new HygfIcbcRecordDTO();
List<HygfIcbcRecordDTO> list = hygfIcbcRecordMapper.listObject(hygfIcbcRecordQueryDTO); if (hygfIcbcRecord == null) {
Page<HygfIcbcRecordDTO> page = new Page<>(); PeasantHousehold peasantHousehold = peasantHouseholdService.lambdaQuery()
page.setSize(size); .select(PeasantHousehold::getTelephone, PeasantHousehold::getOwnersName,
page.setCurrent(current); PeasantHousehold::getIdCard)
page.setTotal(total); .eq(PeasantHousehold::getAmosUserId, amosUserId).last("limit 1").one();
page.setRecords(toModels(list));
return page; hygfIcbcRecordDTO.setCustName(peasantHousehold.getOwnersName());
} hygfIcbcRecordDTO.setIdCard(peasantHousehold.getIdCard());
hygfIcbcRecordDTO.setPhone(peasantHousehold.getTelephone());
private List<HygfIcbcRecordDTO> toModels(List<HygfIcbcRecordDTO> hygfIcbcRecords) { hygfIcbcRecordDTO.setOpenAccountStatus(IcbcEnum.OpenAccountState.INITIAL.getCode());
if (CollectionUtils.isEmpty(hygfIcbcRecords)) { hygfIcbcRecordDTO.setOpenAccountStatusName(IcbcEnum.OpenAccountState.getNameByCode(
return Collections.emptyList(); IcbcEnum.OpenAccountState.INITIAL.getCode(), IcbcEnum.OpenAccountState.INITIAL.getName()));
} } else if (IcbcEnum.OpenAccountState.FAIL.getCode().equals(hygfIcbcRecord.getOpenAccountStatus())) {
List<String> amosUserIds = hygfIcbcRecords.stream().map(HygfIcbcRecordDTO::getAmosUserId).collect(Collectors.toList()); Bean.toModel(hygfIcbcRecord, hygfIcbcRecordDTO);
List<PeasantHousehold> peasantHouseholds = peasantHouseholdService.lambdaQuery().select(PeasantHousehold::getAmosUserId, PeasantHousehold::getRegionalCompaniesName, PeasantHousehold::getOwnersName, PeasantHousehold::getIdCard, PeasantHousehold::getTelephone).in(PeasantHousehold::getAmosUserId, amosUserIds).list(); PeasantHousehold peasantHousehold = peasantHouseholdService.lambdaQuery()
Map<String, List<PeasantHousehold>> PeasantHouseholdMap = peasantHouseholds.stream().collect(Collectors.groupingBy(PeasantHousehold::getAmosUserId));// 根据农户 ID 分组 .select(PeasantHousehold::getTelephone, PeasantHousehold::getOwnersName,
return hygfIcbcRecords.stream().map(hygfIcbcRecordDTO -> { PeasantHousehold::getIdCard)
hygfIcbcRecordDTO.setOpenAccountStatusName(IcbcEnum.OpenAccountState.getNameByCode(hygfIcbcRecordDTO.getOpenAccountStatus(), IcbcEnum.OpenAccountState.INITIAL.getName())); .eq(PeasantHousehold::getAmosUserId, amosUserId).last("limit 1").one();
hygfIcbcRecordDTO.setProtocolStatusName(IcbcEnum.ProtocolStatus.getNameByCode(hygfIcbcRecordDTO.getProtocolStatus(), ""));
List<PeasantHousehold> peasantHouseholdList = PeasantHouseholdMap.get(hygfIcbcRecordDTO.getAmosUserId()); hygfIcbcRecordDTO.setCustName(peasantHousehold.getOwnersName());
if (IcbcEnum.OpenAccountState.FAIL.getCode().equals(hygfIcbcRecordDTO.getOpenAccountStatus())) { hygfIcbcRecordDTO.setIdCard(peasantHousehold.getIdCard());
hygfIcbcRecordDTO.setCustName(peasantHouseholds.get(0).getOwnersName()); hygfIcbcRecordDTO.setPhone(peasantHousehold.getTelephone());
hygfIcbcRecordDTO.setIdCard(peasantHouseholds.get(0).getIdCard()); hygfIcbcRecordDTO.setOpenAccountStatusName(IcbcEnum.OpenAccountState.getNameByCode(
hygfIcbcRecordDTO.setPhone(peasantHouseholds.get(0).getTelephone()); hygfIcbcRecordDTO.getOpenAccountStatus(), IcbcEnum.OpenAccountState.INITIAL.getName()));
} hygfIcbcRecordDTO.setProtocolStatusName(
if (!CollectionUtils.isEmpty(peasantHouseholdList)) { IcbcEnum.ProtocolStatus.getNameByCode(hygfIcbcRecordDTO.getProtocolStatus(), ""));
// 根据区域经销商名称去重 } else {
List<HygfIcbcRecordDTO.IcbcPeasantHousehold> icbcPeasantHouseholds = Bean.toModels(peasantHouseholdList, HygfIcbcRecordDTO.IcbcPeasantHousehold.class); Bean.toModel(hygfIcbcRecord, hygfIcbcRecordDTO);
hygfIcbcRecordDTO.setPeasantHouseholds(icbcPeasantHouseholds.stream().filter(distinctByKey(HygfIcbcRecordDTO.IcbcPeasantHousehold::getRegionalCompaniesName)).collect(Collectors.toList())); hygfIcbcRecordDTO.setOpenAccountStatusName(IcbcEnum.OpenAccountState.getNameByCode(
} hygfIcbcRecordDTO.getOpenAccountStatus(), IcbcEnum.OpenAccountState.INITIAL.getName()));
return hygfIcbcRecordDTO; hygfIcbcRecordDTO.setProtocolStatusName(
}).collect(Collectors.toList()); IcbcEnum.ProtocolStatus.getNameByCode(hygfIcbcRecordDTO.getProtocolStatus(), ""));
} }
List<String> amosUserIds = Arrays.asList(amosUserId);
/** List<PeasantHousehold> peasantHouseholds = peasantHouseholdService.lambdaQuery()
* 验签方法 .in(PeasantHousehold::getAmosUserId, amosUserIds).list();
* Map<String, List<PeasantHousehold>> peasantHouseholdMap = peasantHouseholds.stream()
* @param request .collect(Collectors.groupingBy(PeasantHousehold::getAmosUserId));// 根据农户 ID 分组
* @param path List<PeasantHousehold> peasantHouseholdList = peasantHouseholdMap.get(amosUserId);
* @return hygfIcbcRecordDTO.setPeasantHouseholds(
* @throws Exception Bean.toModels(peasantHouseholdList, HygfIcbcRecordDTO.IcbcPeasantHousehold.class));
*/ return hygfIcbcRecordDTO;
private boolean verifySignData(HttpServletRequest request, String path) throws Exception { }
public List<HygfIcbcRecordDTO> listObject(HygfIcbcRecordQueryDTO hygfIcbcRecordQueryDTO) {
List<HygfIcbcRecordDTO> list = hygfIcbcRecordMapper.listObject(hygfIcbcRecordQueryDTO);
return toModels(list);
}
public Page<HygfIcbcRecordDTO> queryForPage(int current, int size, HygfIcbcRecordQueryDTO hygfIcbcRecordQueryDTO) {
// PageHelper.startPage(current, size);
Integer total = hygfIcbcRecordMapper.listObjectCount(hygfIcbcRecordQueryDTO);
hygfIcbcRecordQueryDTO.setLimit(size);
if (current == 1) {
hygfIcbcRecordQueryDTO.setOffset(0);
} else {
// int offset = (current - 1) * size > total ? : (current - 1) * size;
hygfIcbcRecordQueryDTO.setOffset((current - 1) * size);
}
List<HygfIcbcRecordDTO> list = hygfIcbcRecordMapper.listObject(hygfIcbcRecordQueryDTO);
Page<HygfIcbcRecordDTO> page = new Page<>();
page.setSize(size);
page.setCurrent(current);
page.setTotal(total);
page.setRecords(toModels(list));
return page;
}
private List<HygfIcbcRecordDTO> toModels(List<HygfIcbcRecordDTO> hygfIcbcRecords) {
if (CollectionUtils.isEmpty(hygfIcbcRecords)) {
return Collections.emptyList();
}
List<String> amosUserIds = hygfIcbcRecords.stream().map(HygfIcbcRecordDTO::getAmosUserId)
.collect(Collectors.toList());
List<PeasantHousehold> peasantHouseholds = peasantHouseholdService.lambdaQuery()
.select(PeasantHousehold::getAmosUserId, PeasantHousehold::getRegionalCompaniesName,
PeasantHousehold::getOwnersName, PeasantHousehold::getIdCard, PeasantHousehold::getTelephone)
.in(PeasantHousehold::getAmosUserId, amosUserIds).list();
Map<String, List<PeasantHousehold>> PeasantHouseholdMap = peasantHouseholds.stream()
.collect(Collectors.groupingBy(PeasantHousehold::getAmosUserId));// 根据农户 ID 分组
return hygfIcbcRecords.stream().map(hygfIcbcRecordDTO -> {
hygfIcbcRecordDTO.setOpenAccountStatusName(IcbcEnum.OpenAccountState.getNameByCode(
hygfIcbcRecordDTO.getOpenAccountStatus(), IcbcEnum.OpenAccountState.INITIAL.getName()));
hygfIcbcRecordDTO.setProtocolStatusName(
IcbcEnum.ProtocolStatus.getNameByCode(hygfIcbcRecordDTO.getProtocolStatus(), ""));
List<PeasantHousehold> peasantHouseholdList = PeasantHouseholdMap.get(hygfIcbcRecordDTO.getAmosUserId());
if (IcbcEnum.OpenAccountState.FAIL.getCode().equals(hygfIcbcRecordDTO.getOpenAccountStatus())) {
hygfIcbcRecordDTO.setCustName(peasantHouseholds.get(0).getOwnersName());
hygfIcbcRecordDTO.setIdCard(peasantHouseholds.get(0).getIdCard());
hygfIcbcRecordDTO.setPhone(peasantHouseholds.get(0).getTelephone());
}
if (!CollectionUtils.isEmpty(peasantHouseholdList)) {
// 根据区域经销商名称去重
List<HygfIcbcRecordDTO.IcbcPeasantHousehold> icbcPeasantHouseholds = Bean.toModels(peasantHouseholdList,
HygfIcbcRecordDTO.IcbcPeasantHousehold.class);
hygfIcbcRecordDTO.setPeasantHouseholds(icbcPeasantHouseholds.stream()
.filter(distinctByKey(HygfIcbcRecordDTO.IcbcPeasantHousehold::getRegionalCompaniesName))
.collect(Collectors.toList()));
}
return hygfIcbcRecordDTO;
}).collect(Collectors.toList());
}
/**
* 验签方法
*
* @param request
* @param path
* @return
* @throws Exception
*/
private boolean verifySignData(HttpServletRequest request, String path) throws Exception {
// 网关公钥 // 网关公钥
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
String api = request.getParameter("api"); String api = request.getParameter("api");
...@@ -438,48 +510,54 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc ...@@ -438,48 +510,54 @@ public class HygfIcbcServiceImpl extends BaseService<HygfIcbcRecordDTO, HygfIcbc
boolean flag = IcbcSignature.verify(signStr, sign_type, APIGW_PUBLIC_KEY, charset, sign); boolean flag = IcbcSignature.verify(signStr, sign_type, APIGW_PUBLIC_KEY, charset, sign);
log.info("验签结果:[[{}]]", flag); log.info("验签结果:[[{}]]", flag);
return flag; return flag;
} }
/** /**
* 加签方法 * 加签方法
* *
* @param request * @param request
* @param copReturnCode * @param copReturnCode
* @param copReturnMsg * @param copReturnMsg
* @return * @return
* @throws Exception * @throws Exception
*/ */
private String sign(HttpServletRequest request, String copReturnCode, String copReturnMsg) throws Exception { private String sign(HttpServletRequest request, String copReturnCode, String copReturnMsg) throws Exception {
String msg_id = new SimpleDateFormat("yyyyMMdd").format(new Date()) + new SimpleDateFormat("HHmmss").format(new Date()); String msg_id = new SimpleDateFormat("yyyyMMdd").format(new Date())
String responseBizContent = "{\"return_code\":\"" + copReturnCode + "\",\"return_msg\":\"" + copReturnMsg + "\"" + ",\"msg_id\":\"" + msg_id + "\"}"; + new SimpleDateFormat("HHmmss").format(new Date());
String charset = request.getParameter("charset");// 调用过程使用的编码格式 String responseBizContent = "{\"return_code\":\"" + copReturnCode + "\",\"return_msg\":\"" + copReturnMsg + "\""
/**********商户对消息返回响应进行签名,签名方式需与在API平台登记APP的sign_type保持一致(目前基本都是RSA2)**********/ + ",\"msg_id\":\"" + msg_id + "\"}";
// String signType = IcbcConstants.SIGN_TYPE_RSA2; String charset = request.getParameter("charset");// 调用过程使用的编码格式
String signType = IcbcConstants.SIGN_TYPE_RSA; /**********
String signStr = "\"response_biz_content\":" + responseBizContent + "," + "\"sign_type\":" + "\"" + signType + "\""; * 商户对消息返回响应进行签名,签名方式需与在API平台登记APP的sign_type保持一致(目前基本都是RSA2)
String signParam = IcbcSignature.sign(signStr, signType, MY_PRIVATE_KEY, charset); **********/
String returnJson = "{\"response_biz_content\":" + responseBizContent + ",\"sign_type\":\"" + signType + "\"" + ",\"sign\":\"" + signParam + "\"}"; // String signType = IcbcConstants.SIGN_TYPE_RSA2;
return returnJson; String signType = IcbcConstants.SIGN_TYPE_RSA;
} String signStr = "\"response_biz_content\":" + responseBizContent + "," + "\"sign_type\":" + "\"" + signType
+ "\"";
/** String signParam = IcbcSignature.sign(signStr, signType, MY_PRIVATE_KEY, charset);
* base64Decode String returnJson = "{\"response_biz_content\":" + responseBizContent + ",\"sign_type\":\"" + signType + "\""
* + ",\"sign\":\"" + signParam + "\"}";
* @param str return returnJson;
* @return }
* @throws UnsupportedEncodingException
*/ /**
public String base64Decode(String str) throws UnsupportedEncodingException { * base64Decode
if (str == null || "".equals(str)) { *
return ""; * @param str
} * @return
char[] ch = str.toCharArray(); * @throws UnsupportedEncodingException
byte[] bt = Base64.decode(String.valueOf(ch)); */
return new String(bt, "UTF-8"); public String base64Decode(String str) throws UnsupportedEncodingException {
} if (str == null || "".equals(str)) {
return "";
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> distinctField) { }
Map<Object, Boolean> distinctMap = new ConcurrentHashMap<>(); char[] ch = str.toCharArray();
return object -> distinctMap.putIfAbsent(distinctField.apply(object), Boolean.TRUE) == null; byte[] bt = Base64.decode(String.valueOf(ch));
} return new String(bt, "UTF-8");
}
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> distinctField) {
Map<Object, Boolean> distinctMap = new ConcurrentHashMap<>();
return object -> distinctMap.putIfAbsent(distinctField.apply(object), Boolean.TRUE) == null;
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment