Commit 34ac4fea by jiang'yun

修改问题

parent 93c702d5
...@@ -81,11 +81,7 @@ ...@@ -81,11 +81,7 @@
<version>4.3.1.wso2v1</version> <version>4.3.1.wso2v1</version>
</dependency>--> </dependency>-->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.59</version>
</dependency>
<!-- mybatis-plus --> <!-- mybatis-plus -->
<dependency> <dependency>
...@@ -108,11 +104,11 @@ ...@@ -108,11 +104,11 @@
<version>0.4.8</version> <version>0.4.8</version>
</dependency> </dependency>
<dependency> <!-- <dependency>-->
<groupId>org.jpedal</groupId> <!-- <groupId>org.jpedal</groupId>-->
<artifactId>OpenViewerFX</artifactId> <!-- <artifactId>OpenViewerFX</artifactId>-->
<version>6.6.14</version> <!-- <version>6.6.14</version>-->
</dependency> <!-- </dependency>-->
<dependency> <dependency>
<groupId>com.google.code.gson</groupId> <groupId>com.google.code.gson</groupId>
...@@ -192,6 +188,25 @@ ...@@ -192,6 +188,25 @@
<artifactId>weixin-java-mp</artifactId> <artifactId>weixin-java-mp</artifactId>
<version>3.0.0</version> <version>3.0.0</version>
</dependency> </dependency>
<!-- 建行SDK-->
<!-- <dependency>-->
<!-- <groupId>org.bouncycastle</groupId>-->
<!-- <artifactId>bcprov-jdk15on</artifactId>-->
<!-- <version>1.59</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.66</version>
</dependency>
<dependency>
<groupId>CCBMisSdk</groupId>
<artifactId>CCBMisSdk</artifactId>
<version>2.0</version>
<!-- <scope>system</scope>-->
<!-- <systemPath>${basedir}/src/main/resources/lib/CCBMisSdk.jar</systemPath>-->
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.qianhe.system.config;
/**
* @author: Tan Manguang
* @date: 2022/3/29
*/
public class Config {
//地址 https://smartpos.ccb.com/mistest/misapi/
public static final String url = "https://smartpos.ccb.com/mis/misapi/";
//商户号
public static final String merchantCode = "105000149005386";
//终端号
public static final String terminalId = "10846608";
//交易密钥
public static final String key = "3e9c5f4bc0722270c2caf799ec5c592e";
//授权码
public static final String authCode = "307848661387";
//GPS "23.119733,113.351153";
public static final String gps = "37.470666,118.602392";
//地址
public static final String address = "山东省东营市东营区北二路37号";
//金额
public static final String amt = "0.01";
//订单号
public static final String orderNo = "tmgtest202302240018";
public static final String qrCode = "130194194612618039";
public static final String numberId = "123456";
public static final String orderDate = "20210420";
public static final String termSN = "";
public static final String apiVer = null;
}
package com.qianhe.system.controller;
import com.ccb.CCBMisSdk;
import com.fasterxml.jackson.core.type.TypeReference;
import com.qianhe.common.core.domain.AjaxResult;
import com.qianhe.common.utils.DateUtils;
import com.qianhe.common.utils.StringUtils;
import com.qianhe.system.config.Config;
import com.qianhe.system.domain.CcbKey;
import com.qianhe.system.domain.WaterOrder;
import com.qianhe.system.enums.TransRequestEnum;
import com.qianhe.system.mapper.CcbKeyMapper;
import com.qianhe.system.utils.JsonUtil;
import com.qianhe.system.utils.MisApiUtil;
import com.qianhe.system.utils.RequestService;
import com.qianhe.system.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 建行退款
*/
@RestController
@Slf4j
@RequestMapping("/ccbRefund")
public class CCBRefundController {
@Value("${wx.shbh}")
private String shbh;
@Value("${wx.zdbh}")
private String zdbh;
@Autowired
private CcbKeyMapper ccbKeyMapper;
@PostMapping("/refund")
public AjaxResult ccbRefund(WaterOrder waterOrder){
CcbKey ccbKey=new CcbKey();
ccbKey.setSfgq("1");
//第一次根据授权码下载密钥
CcbKey ccbKey1 = ccbKeyMapper.selectCcbKeyList(ccbKey).stream().findFirst().orElse(null);
String key = "";
if(ccbKey1!=null){
key=ccbKey1.getCcbkey();
}
//第一次根据授权码下载密钥
// String key = Config.key;//密钥更新
// String key = MisApiUtil.getAu012Key();//密钥更新
// MisApiUtil.confirmKey(key);;//密钥确认
// System.out.println("key:"+key);
// String key="3e9c5f4bc0722270c2caf799ec5c592e";
if(StringUtils.isEmpty(key)){
return AjaxResult.error("key获取失败");
}
String mchtNo=shbh;//建行15位商户编号(固定)
String termNo=zdbh;//建行8位终端编号(固定)
//参数
String address="山东省东营市东营区北二路37号";//地址
String gps="37.470666,118.602392";//GPS地理位置信息
String amt="0.01";//退款金额
String orderNo=waterOrder.getOrderNum();//订单号
String numberId=waterOrder.getTkbh();//退款订单号
//参数加密
MisApiHttpVo misApiHttpVo = new MisApiHttpVo(TransRequestEnum.RF001, mchtNo, termNo,"1.2.0");
TransRequest transResult = new TransRequest(address,gps);
TransData transData = new TransData();
transData.setAmt(amt);
transData.setOrderNo(orderNo);
transData.setNumberId(numberId);
transResult.setTransData(transData);
System.out.println("transResult:"+JsonUtil.toJsonString(transResult));
//加密参数
misApiHttpVo.encodeData(JsonUtil.toJsonString(transResult), key);
System.out.println("misApiHttpVo:"+JsonUtil.toJsonString(misApiHttpVo));
//发送请求
String result = new RequestService().sendJsonPost(Config.url, null, JsonUtil.toJsonString(misApiHttpVo));
System.out.println("result:"+result);
//json转对象
MisApiResponseVo misApiResponse = JsonUtil.jsonStringToObject(result, new TypeReference<MisApiResponseVo>() {
});
if("00".equals(misApiResponse.getRetCode())){
//解密数据
String transResultStr = CCBMisSdk.CCBMisSdk_DataDecrypt(misApiResponse.getData(), key);
System.out.println(transResultStr);
return AjaxResult.success();
}else{
//请求失败
System.out.println(misApiResponse.getRetErrMsg());
return AjaxResult.error(misApiResponse.getRetErrMsg());
}
}
}
package com.qianhe.system.controller;
import com.qianhe.system.config.Config;
import com.qianhe.system.domain.CcbKey;
import com.qianhe.system.mapper.CcbKeyMapper;
import com.qianhe.system.utils.MisApiUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("CCBTask")
public class CCBTask {
@Autowired
private CcbKeyMapper ccbKeyMapper;
public void ccbKeyTask()
{
CcbKey ccbKey=new CcbKey();
ccbKey.setSfgq("1");
CcbKey ccbKey1 = ccbKeyMapper.selectCcbKeyList(ccbKey).stream().findFirst().orElse(null);
String key = "";
if(ccbKey1!=null){
key=ccbKey1.getCcbkey();
System.out.println("old:"+key);
key= MisApiUtil.getAu012Key(key);//密钥更新
MisApiUtil.confirmKey(key);;//密钥确认
System.out.println("new:"+key);
}else {
//第一次根据授权码下载密钥
key=MisApiUtil.getAu011( Config.authCode);
System.out.println("First:"+key);
}
//先把已有的key改为过期状态
ccbKeyMapper.updateCcbKeySfgq();
//把最新的保存
ccbKey.setCcbkey(key);
System.out.println(ccbKey);
ccbKeyMapper.insertCcbKey(ccbKey);
}
}
package com.qianhe.system.controller; package com.qianhe.system.controller;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.qianhe.common.annotation.Anonymous;
import com.qianhe.common.annotation.Log; import com.qianhe.common.annotation.Log;
import com.qianhe.common.core.controller.BaseController; import com.qianhe.common.core.controller.BaseController;
import com.qianhe.common.core.domain.AjaxResult; import com.qianhe.common.core.domain.AjaxResult;
...@@ -241,6 +242,7 @@ public class WaterGoodsController extends BaseController ...@@ -241,6 +242,7 @@ public class WaterGoodsController extends BaseController
/** /**
* 获取商品详细信息 * 获取商品详细信息
*/ */
@Anonymous
@GetMapping(value = "/{id}") @GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id) public AjaxResult getInfo(@PathVariable("id") Long id)
{ {
......
...@@ -250,7 +250,11 @@ public class WaterOrderController extends BaseController ...@@ -250,7 +250,11 @@ public class WaterOrderController extends BaseController
int i = waterOrderService.updateOrderState(waterOrderVo); int i = waterOrderService.updateOrderState(waterOrderVo);
if(i==3){ if(i==3){
return AjaxResult.success("该订单已超过下单时间的晚上0点,请联系商家退款"); return AjaxResult.success("该订单已超过下单时间的晚上0点,请联系商家退款");
}else { }else if(i==4){
return AjaxResult.success("退款失败");
}else if(i==5){
return AjaxResult.success("退款成功,请注意查收");
} else {
return toAjax(i); return toAjax(i);
} }
......
package com.qianhe.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.qianhe.common.annotation.Excel;
import com.qianhe.common.core.domain.BaseEntity;
/**
* 建行工作密钥对象 ccb_key
*
* @author qianhe
* @date 2024-04-26
*/
@Data
public class CcbKey extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 工作密钥 */
private String ccbkey;
/** 录入时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "录入时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date lrsj;
/** 是否过期(0/过期 1/使用) */
@Excel(name = "是否过期(0/过期 1/使用)")
private String sfgq;
}
...@@ -197,4 +197,11 @@ public class WaterOrder extends BaseEntity ...@@ -197,4 +197,11 @@ public class WaterOrder extends BaseEntity
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "下单时间", dateFormat = "yyyy-MM-dd HH:mm:ss") @Excel(name = "下单时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date xdsj; private Date xdsj;
//退款编号
private String tkbh;
private String authCode;
} }
package com.qianhe.system.enums;
/**
* @author: Tan Manguang
* @date: 2022/3/24
*/
public enum TransRequestEnum {
PY002,
QR002,
PY001,
QR001,
QR003,
RF001,
QR004,
DF001,
RNA01,
AU011,
AU012,
AU013,
RD001,
RD002,
RF003,
EQ001,
EQ002,
EQ003,
}
package com.qianhe.system.mapper;
import java.util.List;
import com.qianhe.system.domain.CcbKey;
/**
* 建行工作密钥Mapper接口
*
* @author qianhe
* @date 2024-04-26
*/
public interface CcbKeyMapper
{
/**
* 查询建行工作密钥
*
* @param key 建行工作密钥主键
* @return 建行工作密钥
*/
public CcbKey selectCcbKeyByKey(String key);
/**
* 查询建行工作密钥列表
*
* @param ccbKey 建行工作密钥
* @return 建行工作密钥集合
*/
public List<CcbKey> selectCcbKeyList(CcbKey ccbKey);
/**
* 新增建行工作密钥
*
* @param ccbKey 建行工作密钥
* @return 结果
*/
public int insertCcbKey(CcbKey ccbKey);
/**
* 修改建行工作密钥
*
* @param ccbKey 建行工作密钥
* @return 结果
*/
public int updateCcbKey(CcbKey ccbKey);
/**
* 删除建行工作密钥
*
* @param key 建行工作密钥主键
* @return 结果
*/
public int deleteCcbKeyByKey(String key);
/**
* 批量删除建行工作密钥
*
* @param keys 需要删除的数据主键集合
* @return 结果
*/
public int deleteCcbKeyByKeys(String[] keys);
int updateCcbKeySfgq();
}
...@@ -7,7 +7,7 @@ import com.qianhe.system.domain.*; ...@@ -7,7 +7,7 @@ import com.qianhe.system.domain.*;
import com.qianhe.system.mapper.*; import com.qianhe.system.mapper.*;
import com.qianhe.system.service.IWaterGoodsService; import com.qianhe.system.service.IWaterGoodsService;
import com.qianhe.system.utils.GraphUtils; import com.qianhe.system.utils.GraphUtils;
import com.qianhe.system.utils.ImageThumbnailsUtil; //import com.qianhe.system.utils.ImageThumbnailsUtil;
import com.qianhe.system.vo.WaterGoodsSpeVo; import com.qianhe.system.vo.WaterGoodsSpeVo;
import com.qianhe.system.vo.WaterGoodsVo; import com.qianhe.system.vo.WaterGoodsVo;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -44,8 +44,8 @@ public class WaterGoodsServiceImpl implements IWaterGoodsService ...@@ -44,8 +44,8 @@ public class WaterGoodsServiceImpl implements IWaterGoodsService
private WaterGoodsTypeMapper waterGoodsTypeMapper; private WaterGoodsTypeMapper waterGoodsTypeMapper;
@Autowired @Autowired
private WaterGoodsCartMapper waterGoodsCartMapper; private WaterGoodsCartMapper waterGoodsCartMapper;
@Autowired // @Autowired
private ImageThumbnailsUtil imageThumbnailsUtil; // private ImageThumbnailsUtil imageThumbnailsUtil;
/** /**
* 查询商品 * 查询商品
......
...@@ -4,17 +4,21 @@ import cn.hutool.http.HttpUtil; ...@@ -4,17 +4,21 @@ import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ccb.CCBMisSdk;
import com.fasterxml.jackson.core.type.TypeReference;
import com.qianhe.common.core.domain.AjaxResult; import com.qianhe.common.core.domain.AjaxResult;
import com.qianhe.common.exception.ServiceException; import com.qianhe.common.exception.ServiceException;
import com.qianhe.common.utils.DateUtils; import com.qianhe.common.utils.DateUtils;
import com.qianhe.common.utils.StringUtils; import com.qianhe.common.utils.StringUtils;
import com.qianhe.system.config.Config;
import com.qianhe.system.domain.*; import com.qianhe.system.domain.*;
import com.qianhe.system.enums.TransRequestEnum;
import com.qianhe.system.mapper.*; import com.qianhe.system.mapper.*;
import com.qianhe.system.service.IWaterOrderService; import com.qianhe.system.service.IWaterOrderService;
import com.qianhe.system.utils.JsonUtil;
import com.qianhe.system.utils.PositionUtil; import com.qianhe.system.utils.PositionUtil;
import com.qianhe.system.vo.WaterOrderVo; import com.qianhe.system.utils.RequestService;
import com.qianhe.system.vo.WaterStationUserVo; import com.qianhe.system.vo.*;
import com.qianhe.system.vo.WaterStationVo;
import io.swagger.models.auth.In; import io.swagger.models.auth.In;
import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.Ellipsoid;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -24,6 +28,7 @@ import org.springframework.stereotype.Service; ...@@ -24,6 +28,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -338,6 +343,7 @@ public class WaterOrderServiceImpl implements IWaterOrderService ...@@ -338,6 +343,7 @@ public class WaterOrderServiceImpl implements IWaterOrderService
throw new ServiceException("该订单已被用户取消!"); throw new ServiceException("该订单已被用户取消!");
} }
} }
int i=0;
//判断是否需要退款 //判断是否需要退款
//传过来订单状态为取消 //传过来订单状态为取消
if (waterOrderVo.getOrderState() == 5){ if (waterOrderVo.getOrderState() == 5){
...@@ -366,7 +372,13 @@ public class WaterOrderServiceImpl implements IWaterOrderService ...@@ -366,7 +372,13 @@ public class WaterOrderServiceImpl implements IWaterOrderService
time2.set(Calendar.MILLISECOND, 0); time2.set(Calendar.MILLISECOND, 0);
if(time1.equals(time2)){ if(time1.equals(time2)){
//相等说明下单时间的晚上0点 //相等说明下单时间的晚上0点
//TODO 执行退款操作 //TODO 执行退款操作\
//先生成成退款单号
String tkbh = getTkNum();
waterOrderVo.setTkbh(tkbh);
waterOrder.setTkbh(tkbh);
//执行退款操作
i = ccbRefund(waterOrder);
//不相等说明下单时间的晚上0点 //不相等说明下单时间的晚上0点
waterOrderVo.setOrderState(6);//已退款 waterOrderVo.setOrderState(6);//已退款
}else { }else {
...@@ -383,7 +395,7 @@ public class WaterOrderServiceImpl implements IWaterOrderService ...@@ -383,7 +395,7 @@ public class WaterOrderServiceImpl implements IWaterOrderService
} }
} }
int i = waterOrderMapper.updateWaterOrder(waterOrderVo); i = waterOrderMapper.updateWaterOrder(waterOrderVo);
if(flag){ if(flag){
i=3; i=3;
} }
...@@ -391,6 +403,99 @@ public class WaterOrderServiceImpl implements IWaterOrderService ...@@ -391,6 +403,99 @@ public class WaterOrderServiceImpl implements IWaterOrderService
} }
/** /**
* 生成退款编号
* @return
*/
public String getTkNum(){
String orderNum = "";
//获取当前年月日
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String today = format.format(DateUtils.getNowDate());
Long rqbh = Long.parseLong(today + "0001");
while (true){
WaterOrder waterOrder = new WaterOrder();
waterOrder.setOrderNum(rqbh.toString());
WaterOrder waterOrder1 = waterOrderMapper.selectWaterOrderNumByOrderNum(rqbh.toString());
if (StringUtils.isNotNull(waterOrder1)){
rqbh ++;
}else {
break;
}
}
//生成随机四位英文字母
Random random = new Random();
String randomletters = "";
for (int i = 0; i < 4; i++) {
int index = random.nextInt(26);
char letter = (char) ('A' + index);
randomletters += letter;
}
orderNum = "TK-"+rqbh + randomletters;
return orderNum;
}
@Autowired
private CcbKeyMapper ccbKeyMapper;
public int ccbRefund(WaterOrder waterOrder){
CcbKey ccbKey=new CcbKey();
ccbKey.setSfgq("1");
//第一次根据授权码下载密钥
CcbKey ccbKey1 = ccbKeyMapper.selectCcbKeyList(ccbKey).stream().findFirst().orElse(null);
String key = "";
if(ccbKey1!=null){
key=ccbKey1.getCcbkey();
}
//密钥更新
// String key = MisApiUtil.getAu012Key();//密钥更新
// MisApiUtil.confirmKey(key);;//密钥确认 确认后才能使用
// System.out.println("key:"+key);
if(StringUtils.isEmpty(key)){
return 4;
}
String mchtNo=Config.merchantCode;//建行15位商户编号(固定)
String termNo=Config.terminalId;//建行8位终端编号(固定)
//参数
String address=Config.address;//地址
String gps=Config.gps;//GPS地理位置信息
String amt=String.format("%.2f", waterOrder.getGoodsVal().setScale(2, BigDecimal.ROUND_DOWN).doubleValue());//退款金额
String orderNo=waterOrder.getOrderNum();//订单号
String numberId=waterOrder.getTkbh();//退款订单号
//参数加密
MisApiHttpVo misApiHttpVo = new MisApiHttpVo(TransRequestEnum.RF001, mchtNo, termNo,"1.2.0");
TransRequest transResult = new TransRequest(address,gps);
TransData transData = new TransData();
transData.setAmt(amt);
transData.setOrderNo(orderNo);
transData.setNumberId(numberId);
transResult.setTransData(transData);
System.out.println("transResult:"+ JsonUtil.toJsonString(transResult));
//加密参数
misApiHttpVo.encodeData(JsonUtil.toJsonString(transResult), key);
System.out.println("misApiHttpVo:"+JsonUtil.toJsonString(misApiHttpVo));
//发送请求
String result = new RequestService().sendJsonPost(Config.url, null, JsonUtil.toJsonString(misApiHttpVo));
System.out.println("result:"+result);
//json转对象
MisApiResponseVo misApiResponse = JsonUtil.jsonStringToObject(result, new TypeReference<MisApiResponseVo>() {
});
if("00".equals(misApiResponse.getRetCode())){
//解密数据
String transResultStr = CCBMisSdk.CCBMisSdk_DataDecrypt(misApiResponse.getData(), key);
System.out.println(transResultStr);
return 5;
}else{
//请求失败
System.out.println(misApiResponse.getRetErrMsg());
return 4;
}
}
/**
* 统计站点订单数量 * 统计站点订单数量
* @param stationId * @param stationId
* @return * @return
...@@ -592,6 +697,7 @@ public class WaterOrderServiceImpl implements IWaterOrderService ...@@ -592,6 +697,7 @@ public class WaterOrderServiceImpl implements IWaterOrderService
user.setStationId(waterOrder.getStationId()); user.setStationId(waterOrder.getStationId());
List<WaterStationUserVo> waterStationUsers = waterStationUserMapper.selectWaterStationUserList(user); List<WaterStationUserVo> waterStationUsers = waterStationUserMapper.selectWaterStationUserList(user);
if(waterStationUsers.size()>0){ if(waterStationUsers.size()>0){
DecimalFormat df1 = new DecimalFormat("#.00");
for(WaterStationUserVo item:waterStationUsers){ for(WaterStationUserVo item:waterStationUsers){
//获取标签标签tagid //获取标签标签tagid
String accessToken= getAccessToken(); String accessToken= getAccessToken();
...@@ -602,7 +708,8 @@ public class WaterOrderServiceImpl implements IWaterOrderService ...@@ -602,7 +708,8 @@ public class WaterOrderServiceImpl implements IWaterOrderService
body.set("template_id",templateId); body.set("template_id",templateId);
JSONObject json=new JSONObject(); JSONObject json=new JSONObject();
json.set("thing27",new JSONObject().set("value",spmc));//商品名称 json.set("thing27",new JSONObject().set("value",spmc));//商品名称
json.set("amount24",new JSONObject().set("value", payType==1?waterOrder.getGoodsVal():"水票"));//金额 System.out.println(waterOrder.getGoodsVal());
json.set("amount24",new JSONObject().set("value", payType==1?String.format("%.2f", waterOrder.getGoodsVal().setScale(2, BigDecimal.ROUND_DOWN).doubleValue()):"水票"));//金额
json.set("time4",new JSONObject().set("value",DateUtils.parseDateToStr("yyyy-MM-dd hh:mm:ss",waterOrder.getCreateTime())));//下单时间 json.set("time4",new JSONObject().set("value",DateUtils.parseDateToStr("yyyy-MM-dd hh:mm:ss",waterOrder.getCreateTime())));//下单时间
json.set("phone_number8",new JSONObject().set("value", waterOrder.getUserPhone()));//用户手机号 json.set("phone_number8",new JSONObject().set("value", waterOrder.getUserPhone()));//用户手机号
body.set("data",json); body.set("data",json);
......
package com.qianhe.system.utils;
import com.ccb.CCBMisSdk;
import com.fasterxml.jackson.core.type.TypeReference;
public class CCBMisSdkUtils {
public static KeyUtilsBean getKeyUtilsBean(){
String json = CCBMisSdk.CCBMisSdk_PPKeyGen();
return JsonUtil.jsonStringToObject(json, new TypeReference<KeyUtilsBean>() {
});
}
}
package com.qianhe.system.utils;
import com.idrsolutions.image.png.PngCompressor;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.name.Rename;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* 图片压缩工具
*/
@Component
public class ImageThumbnailsUtil {
@Value("${ruoyi.profile}")
private String profile;
/***
* 压缩jpg、jpeg格式图片
* @param inputImagePath
* @param outputImagePath
* @throws IOException
*/
public void compressImage(String inputImagePath, String outputImagePath) throws IOException{
// 指定原始图片路径
inputImagePath = profile + inputImagePath.replace("/profile","");
// 设置目标图片保存路径及名称
outputImagePath = profile + outputImagePath.replace("/profile","");
File file = new File(inputImagePath); // 源文件
File outfile = new File(outputImagePath); // 目标输出文件,可与源文件一致,一致会覆盖
PngCompressor.compress(file, outfile);
// // 创建输入流对象
// FileInputStream fis = new FileInputStream(new File(inputImagePath));
//
// // 获取图片信息
// BufferedImage image = ImageIO.read(fis);
//
// // 创建输出流对象
// FileOutputStream fos = new FileOutputStream(new File(outputImagePath));
//
// // 将图片写入到输出流中并进行压缩处理
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
// encoder.encode(image);
//
// // 关闭输入、输出流
// fis.close();
// fos.close();
}
/***
* 压缩PNG格式图片
* @param inputImagePath
* @param outputImagePath
* @throws IOException
*/
public void compressImagePNG(String inputImagePath, String outputImagePath) throws IOException{
// 指定原始图片路径
inputImagePath = profile + inputImagePath.replace("/profile","");
outputImagePath = profile + outputImagePath.replace("/profile","");
File file = new File(inputImagePath); // 源文件
File outfile = new File(outputImagePath); // 目标输出文件,可与源文件一致,一致会覆盖
PngCompressor.compress(file, outfile);
}
// 图片默认缩放比率
private static final double DEFAULT_SCALE = 0.8d;
// 缩略图后缀
private static final String SUFFIX = "-thumbnail";
/**
* 生成缩略图到指定的目录
*
* @param path 目录
* @param files 要生成缩略图的文件列表
* @throws IOException
*/
public static List<String> generateThumbnail2Directory(String path, String... files) throws IOException {
return generateThumbnail2Directory(DEFAULT_SCALE, path, files);
}
/**
* 生成缩略图到指定的目录
*
* @param scale 图片缩放率
* @param pathname 缩略图保存目录
* @param files 要生成缩略图的文件列表
* @throws IOException
*/
public static List<String> generateThumbnail2Directory(double scale, String pathname, String... files) throws IOException {
Thumbnails.of(files)
// 图片缩放率,不能和size()一起使用
.scale(scale)
// 缩略图保存目录,该目录需存在,否则报错
.toFiles(new File(pathname), Rename.NO_CHANGE);
List<String> list = new ArrayList<>(files.length);
for (String file : files) {
list.add(appendSuffix(file, SUFFIX));
}
return list;
}
public static void main(String[] args) throws IOException {
generateDirectoryThumbnail("D:/qianhe/file/送水/水韵照片/2");
}
/**
* 将指定目录下所有图片生成缩略图
*
* @param pathname 文件目录
*/
public static void generateDirectoryThumbnail(String pathname) throws IOException {
generateDirectoryThumbnail(pathname, DEFAULT_SCALE);
}
/**
* 将指定目录下所有图片生成缩略图
*
* @param pathname 文件目录
*/
public static void generateDirectoryThumbnail(String pathname, double scale) throws IOException {
File[] files = new File(pathname).listFiles();
compressRecurse(files, pathname);
}
/**
* 文件追加后缀
*
* @param fileName 原文件名
* @param suffix 文件后缀
* @return
*/
public static String appendSuffix(String fileName, String suffix) {
String newFileName = "";
int indexOfDot = fileName.lastIndexOf('.');
if (indexOfDot != -1) {
newFileName = fileName.substring(0, indexOfDot);
newFileName += suffix;
newFileName += fileName.substring(indexOfDot);
} else {
newFileName = fileName + suffix;
}
return newFileName;
}
private static void compressRecurse(File[] files, String pathname) throws IOException {
for (File file : files) {
// 目录
if (file.isDirectory()) {
File[] subFiles = file.listFiles();
compressRecurse(subFiles, pathname + File.separator + file.getName());
} else {
// 文件包含压缩文件后缀或非图片格式,则不再压缩
String extension = getFileExtention(file.getName());
if (!file.getName().contains(SUFFIX) && isImage(extension)) {
generateThumbnail2Directory(pathname, file.getAbsolutePath());
}
}
}
}
/**
* 根据文件扩展名判断文件是否图片格式
*
* @param extension 文件扩展名
* @return
*/
public static boolean isImage(String extension) {
String[] imageExtension = new String[]{"jpeg", "jpg", "gif", "bmp", "png"};
for (String e : imageExtension) if (extension.toLowerCase().equals(e)) return true;
return false;
}
public static String getFileExtention(String fileName) {
String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
return extension;
}
}
package com.qianhe.system.utils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
/**
* @author Tan Manguang
*/
public class JsonUtil {
public static final String NULL = "null";
private static ObjectMapper getMapper(boolean ignoreUnknown) {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, !ignoreUnknown);
return mapper;
}
/**
* 将结果转成Json串输出
*
* @param value 转换对象
* @return json字符串
*/
public static String toJsonString(Object value) {
if (value == null) {
return NULL;
}
try {
return getMapper(false).writeValueAsString(value);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 将字符串转换成泛型对象,比如List对象(可以用接口类型,对于List会使用ArrayList实例化,对于Map会使用LinkedHashMap实例化),
* json串需要标准格式(即属性名及字符串值要以双引号包含)
* 如::
* jsonStringToObject("[{\"age\":1,\"erpName\":\"aa\"},{\"age\":2,\"erpName\":\"12\"}]",
* new TypeReference<List<Person>>(){});
* 或
* jsonStringToObject("[{\"age\":1,\"erpName\":\"aa\"},{\"age\":2,\"erpName\":\"12\"}]",
* new TypeReference<List<Map<?,?>>>(){});
*
* @param json
* @param type
* @return T
*/
public static <T> T jsonStringToObject(String json, TypeReference<T> type) {
if (StringUtils.isEmpty(json)) {
return null;
}
try {
return getMapper(false).readValue(json, type);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
package com.qianhe.system.utils;
public class KeyUtilsBean {
KeyUtilsBean() {
}
private String privateKey;
private String publicKey;
public String getPrivateKey() {
return privateKey;
}
public void setPrivateKey(String privateKey) {
this.privateKey = privateKey;
}
public String getPublicKey() {
return publicKey;
}
public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
}
\ No newline at end of file
package com.qianhe.system.utils;
import com.ccb.CCBMisSdk;
import com.fasterxml.jackson.core.type.TypeReference;
import com.qianhe.system.config.Config;
import com.qianhe.system.enums.TransRequestEnum;
import com.qianhe.system.vo.MisApiHttpVo;
import com.qianhe.system.vo.MisApiResponseVo;
import org.springframework.beans.factory.annotation.Value;
public class MisApiUtil {
public static void main(String[] args) {
// String au011 = getAu011();
// System.out.println(au011);
String key="046031EFAEAAE920DD5781D054F2B7DB2073F6692013CEF131279C9304D20A854F0D2340C9D5DC5046A74C9554966B69B04CDE4D35A7473D6655C3FD8E60EF0F2754F6E9A598F398E92337B0EE85BC0314969C9F2261CF1A5531927555DE2AC0379C1D4C1ED33CD1A3928ECFD1890F6C94A7E86229C9ED0FD5E2201348C1272896";
String privateKey="308193020100301306072a8648ce3d020106082a811ccf5501822d047930770201010420428e28dc5245f561f8139e4636efe5c9b24a919030c373fa8a436442e331d446a00a06082a811ccf5501822da144034200042093fae35d37b2624dcbd2d00883f81254e9ded5097351ce4736a1028ff8e84535678132ebae70d521a458675125c2bb5c261c676f126fc03dfafaab9e449d7f";
String publicKey="3059301306072a8648ce3d020106082a811ccf5501822d034200042093fae35d37b2624dcbd2d00883f81254e9ded5097351ce4736a1028ff8e84535678132ebae70d521a458675125c2bb5c261c676f126fc03dfafaab9e449d7f";
//
CCBMisSdk.CCBMisSdk_KeyDecrypt(key, privateKey);
System.out.println(CCBMisSdk.CCBMisSdk_KeyDecrypt(key, privateKey));
// KeyUtilsBean misBankKey = CCBMisSdkUtils.getKeyUtilsBean();
}
/**
* 根据授权码获取密钥
* @return
*/
public static String getAu011(String authCode) {
System.out.println("交易码:"+ TransRequestEnum.AU011);
//构建请求参数
MisApiHttpVo misApiHttpVo = new MisApiHttpVo(TransRequestEnum.AU011,Config.merchantCode, Config.terminalId, Config.termSN);
KeyUtilsBean misBankKey = CCBMisSdkUtils.getKeyUtilsBean();
System.out.println("privateKey"+misBankKey.getPrivateKey());
misApiHttpVo.setPublicKey(misBankKey.getPublicKey());
misApiHttpVo.setAuthCode(authCode);
//加密参数
System.out.println("misApiHttpVo:"+JsonUtil.toJsonString(misApiHttpVo));
//发送请求
String result = new RequestService().sendJsonPost(Config.url, null, JsonUtil.toJsonString(misApiHttpVo));
System.out.println("result:"+result);
//json转对象
MisApiResponseVo misApiResponse = JsonUtil.jsonStringToObject(result, new TypeReference<MisApiResponseVo>() {
});
System.out.println("misApiResponse"+misApiResponse);
if("00".equals(misApiResponse.getRetCode())){
//解密数据
System.out.println(CCBMisSdk.CCBMisSdk_KeyDecrypt(misApiResponse.getKey(), misBankKey.getPrivateKey()));
String key=CCBMisSdk.CCBMisSdk_KeyDecrypt(misApiResponse.getKey(), misBankKey.getPrivateKey());
return key;
}else{
//请求失败
System.out.println(misApiResponse.getRetErrMsg());
return null;
}
}
/**
* 密钥更新
* @return
*/
public static String getAu012Key(String key) {
System.out.println("交易码:"+ TransRequestEnum.AU012);
//构建请求参数
MisApiHttpVo misApiHttpVo = new MisApiHttpVo(TransRequestEnum.AU012, Config.merchantCode, Config.terminalId, Config.termSN);
KeyUtilsBean misBankKey = CCBMisSdkUtils.getKeyUtilsBean();
misApiHttpVo.setPublicKey(misBankKey.getPublicKey());
misApiHttpVo.sign(misBankKey.getPrivateKey(), key);
//加密参数
System.out.println("misApiHttpVo:"+ JsonUtil.toJsonString(misApiHttpVo));
//发送请求
String result = new RequestService().sendJsonPost(Config.url, null, JsonUtil.toJsonString(misApiHttpVo));
System.out.println("result:"+result);
//json转对象
MisApiResponseVo misApiResponse = JsonUtil.jsonStringToObject(result, new TypeReference<MisApiResponseVo>() {
});
if("00".equals(misApiResponse.getRetCode())){
//解密数据
System.out.println(CCBMisSdk.CCBMisSdk_KeyDecrypt(misApiResponse.getKey(), misBankKey.getPrivateKey()));
return CCBMisSdk.CCBMisSdk_KeyDecrypt(misApiResponse.getKey(), misBankKey.getPrivateKey());
}else{
//请求失败
System.out.println(misApiResponse.getRetErrMsg());
}
return null;
}
/**
* 密钥确认
* @param key
* @return
*/
public static boolean confirmKey(String key) {
System.out.println("交易码:"+ TransRequestEnum.AU013);
//构建请求参数
MisApiHttpVo misApiHttpVo = new MisApiHttpVo(TransRequestEnum.AU013, Config.merchantCode, Config.terminalId, Config.termSN);
KeyUtilsBean misBankKey = CCBMisSdkUtils.getKeyUtilsBean();
misApiHttpVo.setPublicKey(misBankKey.getPublicKey());
misApiHttpVo.sign(misBankKey.getPrivateKey(), key);
//加密参数
System.out.println("misApiHttpVo:"+ JsonUtil.toJsonString(misApiHttpVo));
//发送请求
String result = new RequestService().sendJsonPost(Config.url, null, JsonUtil.toJsonString(misApiHttpVo));
System.out.println("result:"+result);
//json转对象
MisApiResponseVo misApiResponse = JsonUtil.jsonStringToObject(result, new TypeReference<MisApiResponseVo>() {
});
if("00".equals(misApiResponse.getRetCode())){
//解密数据
System.out.println(misApiResponse.getRetErrMsg());
return true;
}else{
//请求失败
System.out.println(misApiResponse.getRetErrMsg());
return false;
}
}
}
package com.qianhe.system.utils;
/**
* @author: Tan Manguang
* @date: 2021/9/27
*/
public class ProxyConfig {
private String address;
private int port;
public ProxyConfig() {
}
public ProxyConfig(String address, int port) {
this.address = address;
this.port = port;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}
package com.qianhe.system.utils;
import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.util.Map;
public class RequestService {
private static final String TRUE = "true";
private static final String FALSE = "false";
private ProxyConfig proxyConfig;
public ProxyConfig getProxyConfig() {
return proxyConfig;
}
public void setProxyConfig(ProxyConfig proxyConfig) {
this.proxyConfig = proxyConfig;
}
public RequestService(ProxyConfig proxyConfig) {
this.proxyConfig = proxyConfig;
}
public RequestService() {
}
/**
* http请求连接超时(毫秒)
*/
private static final int HTTP_CONNTION_TIMEOUT = 15000;
/**
* http读数据超时(毫秒)
*/
private static final int HTTP_READ_TIMEOUT = 180000;
/**
* 向指定 URL 发送Json串的POST方法请求;
* 如果返回4xx~5xx,抛出HttpStatusCodeException(其中statusCode为具体的http status
*
* @param url 发送请求的 URL
* @param ContentType 内容格式,如果为空,默认为“application/json; charset=UTF-8”
* @param param 请求内容,json串。
* @return 所代表远程资源的响应结果
* @throws Exception
*/
public String sendJsonPost(String url, String ContentType, String param) {
System.out.println(url);
if (StringUtils.isEmpty(ContentType)) {
ContentType = "application/json; charset=UTF-8";
}
return sendPost(url, ContentType, null, param);
}
/**
* 向指定 URL 发送POST方法的请求(以x-www-form-urlencoded格式发送,内容为utf-8编码);
* 如果返回4xx~5xx,抛出HttpStatusCodeException(其中statusCode为具体的http status
*
* @param url 发送请求的 URL
* @param ContentType 内容格式,需要与param值的格式匹配。如果为空,默认为“text/plain; charset=UTF-8”
* @param header 请求头部信息(Key为请求头名,Value为值)
* @param param 请求参数,可以是json串,或以&分隔的名值对,需要与ContentType格式匹配。
* @return 所代表远程资源的响应结果
* @throws Exception
*/
public String sendPost(String url, String ContentType, Map<String, String> header, String param) {
String result = "";
try {
if (StringUtils.isEmpty(ContentType)) {
ContentType = "text/plain; charset=UTF-8";
}
HttpURLConnection conn = getHttpURLConnection(url, ContentType, header);
if (param != null) {
byte[] byData = param.getBytes("UTF-8");
conn.getOutputStream().write(byData);
}
conn.connect();
result = readResponsContent(conn);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
return result;
}
private HttpURLConnection getHttpURLConnection(String url, String ContentType, Map<String, String> header) throws Exception {
URL realUrl = new URL(url);
// 打开和URL之间的连接
HttpURLConnection conn;
if (this.proxyConfig != null) {
Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(this.proxyConfig.getAddress(), this.proxyConfig.getPort()));
conn = (HttpURLConnection) realUrl.openConnection(proxy);
} else {
conn = (HttpURLConnection) realUrl.openConnection();
}
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) Chrome/75.0");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("Content-Type", ContentType);
if (header != null) {
for (Map.Entry<String, String> entry : header.entrySet()) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
}
// setCookie(conn);
conn.setReadTimeout(HTTP_READ_TIMEOUT);
conn.setConnectTimeout(HTTP_CONNTION_TIMEOUT);
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setRequestMethod("POST");
return conn;
}
/**
* 获取返回内容的编码方式(默认为utf-8)
*
* @param conn
* @return
*/
private static String getResponseContentType(HttpURLConnection conn) {
String charset = "UTF-8";
//类似 text/html; charset=utf-8
String sTemp = conn.getContentType()==null?"":conn.getContentType().toLowerCase();
if (sTemp.indexOf("=gbk") > 0 || sTemp.indexOf("=gb2312") > 0) {
charset = "GBK";
}
return charset;
}
private static String readResponsContent(HttpURLConnection conn)
throws Exception {
String result = "";
String charset = getResponseContentType(conn);
int statusCode = conn.getResponseCode();
// 定义BufferedReader输入流来读取URL的响应
StringBuilder sb = new StringBuilder();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));
char[] cBuf = new char[1024];
int iLen;
while ((iLen = in.read(cBuf)) >= 0) {
sb.append(cBuf, 0, iLen);
}
in.close();
result = sb.toString();
if (statusCode >= 300) {
throw new Exception(result);
}
return result;
}
}
package com.qianhe.system.vo;
import com.ccb.CCBMisSdk;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
/**
* @author: Tan Manguang
* @date: 2022/3/24
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class MisApiFather implements Serializable {
private Long timeStamp;
private String data;
private String sign;
private String sysEvtTraceId;
public void encodeData(String data, String key){
this.timeStamp = System.currentTimeMillis();
this.data = CCBMisSdk.CCBMisSdk_DataEncrypt(data, key);
this.sign = CCBMisSdk.CCBMisSdk_DataSign(""+this.timeStamp+""+this.data, key);
}
public Long getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(Long timeStamp) {
this.timeStamp = timeStamp;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getSysEvtTraceId() {
return sysEvtTraceId;
}
public void setSysEvtTraceId(String sysEvtTraceId) {
this.sysEvtTraceId = sysEvtTraceId;
}
}
package com.qianhe.system.vo;
import com.ccb.CCBMisSdk;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.qianhe.system.config.Config;
import com.qianhe.system.enums.TransRequestEnum;
/**
* @author: Tan Manguang
* @date: 2022/3/24
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class MisApiHttpVo extends MisApiFather {
private TransRequestEnum txnCode;
private String mchtNo;
private String termNo;
private String authCode;
private String publicKey;
private String key;
private String termSN;
private String apiVer;
public String getApiVer() {
return apiVer;
}
public void setApiVer(String apiVer) {
this.apiVer = apiVer;
}
public String getTermSN() {
return termSN;
}
public void setTermSN(String termSN) {
this.termSN = termSN;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getAuthCode() {
return authCode;
}
public void setAuthCode(String authCode) {
this.authCode = authCode;
}
public String getPublicKey() {
return publicKey;
}
public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
public MisApiHttpVo() {
}
public MisApiHttpVo(TransRequestEnum txnCode, String mchtNo, String termNo, String termSN) {
this.txnCode = txnCode;
this.mchtNo = mchtNo;
this.termNo = termNo;
this.termSN = termSN;
this.apiVer = Config.apiVer;
}
public String getMchtNo() {
return mchtNo;
}
public void setMchtNo(String mchtNo) {
this.mchtNo = mchtNo;
}
public String getTermNo() {
return termNo;
}
public void setTermNo(String termNo) {
this.termNo = termNo;
}
public void sign(String privateKey, String key) {
this.setTimeStamp(System.currentTimeMillis());
this.setAuthCode(CCBMisSdk.CCBMisSdk_KeySign(key + "" + this.getTimeStamp(), privateKey));
;
}
public TransRequestEnum getTxnCode() {
return txnCode;
}
public void setTxnCode(TransRequestEnum txnCode) {
this.txnCode = txnCode;
}
}
package com.qianhe.system.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
/**
* @author: Tan Manguang
* @date: 2022/3/25
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class MisApiResponseVo extends MisApiHttpVo {
private String retCode;
private String retErrMsg;
private String traceNo;
private String retErrCode;
private String txnTraceNo;
public MisApiResponseVo(){
}
public String getRetCode() {
return retCode;
}
public void setRetCode(String retCode) {
this.retCode = retCode;
}
public String getRetErrMsg() {
return retErrMsg;
}
public void setRetErrMsg(String retErrMsg) {
this.retErrMsg = retErrMsg;
}
public String getTraceNo() {
return traceNo;
}
public void setTraceNo(String traceNo) {
this.traceNo = traceNo;
}
public String getRetErrCode() {
return retErrCode;
}
public void setRetErrCode(String retErrCode) {
this.retErrCode = retErrCode;
}
public String getTxnTraceNo() {
return txnTraceNo;
}
public void setTxnTraceNo(String txnTraceNo) {
this.txnTraceNo = txnTraceNo;
}
}
package com.qianhe.system.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
/**
* @author: Tan Manguang
* @date: 2022/3/24
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class TransData {
private String orderNo;
private String qrCode;
private String amt;
private String numberId;
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getQrCode() {
return qrCode;
}
public void setQrCode(String qrCode) {
this.qrCode = qrCode;
}
public String getAmt() {
return amt;
}
public void setAmt(String amt) {
this.amt = amt;
}
}
package com.qianhe.system.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
/**
* @author: Tan Manguang
* @date: 2022/3/24
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class TransRequest {
private String address;
private String gps;
private TransData transData;
public TransRequest() {
}
public TransRequest(String address, String gps) {
this.address = address;
this.gps = gps;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getGps() {
return gps;
}
public void setGps(String gps) {
this.gps = gps;
}
public TransData getTransData() {
return transData;
}
public void setTransData(TransData transData) {
this.transData = transData;
}
}
package com.qianhe.system.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
/**
* @author: Tan Manguang
* @date: 2022/3/24
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class TransResult {
private String retCode;
private String retMsg;
private String validDate;
private String traceNo;
private String errCode;
private TransData transData;
public String getRetCode() {
return retCode;
}
public void setRetCode(String retCode) {
this.retCode = retCode;
}
public String getRetMsg() {
return retMsg;
}
public void setRetMsg(String retMsg) {
this.retMsg = retMsg;
}
public String getValidDate() {
return validDate;
}
public void setValidDate(String validDate) {
this.validDate = validDate;
}
public String getTraceNo() {
return traceNo;
}
public void setTraceNo(String traceNo) {
this.traceNo = traceNo;
}
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public TransData getTransData() {
return transData;
}
public void setTransData(TransData transData) {
this.transData = transData;
}
}
...@@ -179,4 +179,6 @@ public class WaterOrderVo { ...@@ -179,4 +179,6 @@ public class WaterOrderVo {
private String zfsj; private String zfsj;
private String tkbh;
} }
...@@ -163,6 +163,10 @@ wx: ...@@ -163,6 +163,10 @@ wx:
refundNotifyUrl: https://www.dyzmxx.com/ss/callback/refundNotify/ refundNotifyUrl: https://www.dyzmxx.com/ss/callback/refundNotify/
#证书地址 #证书地址
keyPemPath: apiclient_key.pem keyPemPath: apiclient_key.pem
# 商户编号
shbh: 105000149005386
# 终端编号
zdbh: 10846608
# 送水端小程序 # 送水端小程序
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qianhe.system.mapper.CcbKeyMapper">
<resultMap type="CcbKey" id="CcbKeyResult">
<result property="ccbkey" column="ccbkey" />
<result property="lrsj" column="lrsj" />
<result property="sfgq" column="sfgq" />
</resultMap>
<sql id="selectCcbKeyVo">
select ccbkey, lrsj, sfgq from ccb_key
</sql>
<select id="selectCcbKeyList" parameterType="CcbKey" resultMap="CcbKeyResult">
<include refid="selectCcbKeyVo"/>
<where>
<if test="lrsj != null "> and lrsj = #{lrsj}</if>
<if test="sfgq != null and sfgq != ''"> and sfgq = #{sfgq}</if>
</where>
</select>
<select id="selectCcbKeyByKey" parameterType="String" resultMap="CcbKeyResult">
<include refid="selectCcbKeyVo"/>
where ccbkey = #{ccbkey}
</select>
<insert id="insertCcbKey" parameterType="CcbKey">
insert into ccb_key
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="ccbkey != null">ccbkey,</if>
<if test="lrsj != null">lrsj,</if>
<if test="sfgq != null">sfgq,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="ccbkey != null">#{ccbkey},</if>
<if test="lrsj != null">#{lrsj},</if>
<if test="sfgq != null">#{sfgq},</if>
</trim>
</insert>
<update id="updateCcbKey" parameterType="CcbKey">
update ccb_key
<trim prefix="SET" suffixOverrides=",">
<if test="lrsj != null">lrsj = #{lrsj},</if>
<if test="sfgq != null">sfgq = #{sfgq},</if>
</trim>
where ccbkey = #{ccbkey}
</update>
<update id="updateCcbKeySfgq">
update ccb_key
set sfgq='0'
where 1=1
</update>
<delete id="deleteCcbKeyByKey" parameterType="String">
delete from ccb_key where ccbkey = #{ccbkey}
</delete>
<delete id="deleteCcbKeyByKeys" parameterType="String">
delete from ccb_key where ccbkey in
<foreach item="key" collection="array" open="(" separator="," close=")">
#{ccbkey}
</foreach>
</delete>
</mapper>
\ No newline at end of file
...@@ -268,6 +268,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -268,6 +268,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="goodsVal != null">goods_val = #{goodsVal},</if> <if test="goodsVal != null">goods_val = #{goodsVal},</if>
<if test="orderType != null">order_type = #{orderType},</if> <if test="orderType != null">order_type = #{orderType},</if>
<if test="returnOrderResult != null">return_order_result = #{returnOrderResult},</if> <if test="returnOrderResult != null">return_order_result = #{returnOrderResult},</if>
<if test="tkbh != null">tkbh = #{tkbh},</if>
</trim> </trim>
where id = #{id} where id = #{id}
</update> </update>
......
...@@ -123,10 +123,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter ...@@ -123,10 +123,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
.antMatchers("/ccbback/payNotify/").permitAll() .antMatchers("/ccbback/payNotify/").permitAll()
.antMatchers("/msg/**").permitAll() .antMatchers("/msg/**").permitAll()
.antMatchers("/system/order/gzhSend").permitAll() .antMatchers("/system/order/gzhSend").permitAll()
.antMatchers("/ccbRefund/refund").permitAll()
//通用接口放行 //通用接口放行
.antMatchers("/common/**").permitAll() .antMatchers("/common/**").permitAll()
//测试放行所有接口 //小程序放行
// .antMatchers("/system/**").permitAll() .antMatchers("/system/goods/list","/system/type/getGoodsTypeList","/system/goods/zyImgList","/system/goods/syList").permitAll()
// 静态资源,可匿名访问 // 静态资源,可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
......
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