记得上下班打卡 | git大法好,push需谨慎

Commit b9fe5d3a authored by 胡佳晨's avatar 胡佳晨

Merge remote-tracking branch 'origin/dev' into dev

parents cf38951d 978ed28d
...@@ -79,6 +79,7 @@ public class KylinTableStatusConst { ...@@ -79,6 +79,7 @@ public class KylinTableStatusConst {
/** /**
* 快递 * 快递
*/ */
public static final Integer ORDER_EXPRESS_STATUS1 = 1; // 申请 public static final Integer ORDER_EXPRESS_STATUS1 = 1; // 申请 顺丰返回失败
public static final Integer ORDER_EXPRESS_STATUS2 = 2; // 取消 public static final Integer ORDER_EXPRESS_STATUS2 = 2; // 申请 顺丰返回成功 或 通过主动再查询更新
public static final Integer ORDER_EXPRESS_STATUS3 = 3; // 取消
} }
...@@ -31,13 +31,6 @@ public class PerformancesExpressController extends BaseController { ...@@ -31,13 +31,6 @@ public class PerformancesExpressController extends BaseController {
private String prefix = "zhengzai/kylin/performancesExpress"; private String prefix = "zhengzai/kylin/performancesExpress";
/*@Value("${liquidnet.shunfeng.url}")
public String url;
@Value("${liquidnet.shunfeng.sk}")
private String sk;
@Value("${liquidnet.shunfeng.appid}")
private String appid;*/
@Autowired @Autowired
private PerformancesExpressServiceImpl performancesExpressServiceImpl; private PerformancesExpressServiceImpl performancesExpressServiceImpl;
...@@ -115,7 +108,26 @@ public class PerformancesExpressController extends BaseController { ...@@ -115,7 +108,26 @@ public class PerformancesExpressController extends BaseController {
} }
/** /**
* 结果主动查询 * 订单运费估算
*/
@RequiresPermissions("kylin:performancesExpress:getFreight")
@PostMapping("/getFreight")
@ResponseBody
public AjaxResult getFreight(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
ResponseDto res = performancesExpressServiceImpl.getFreight(performanceExpressSearchAdminParam);
try {
if (res.isSuccess()) {
return success();
} else {
return error(res.getMessage());
}
} catch (Exception e) {
return error(e.getMessage());
}
}
/**
* 下单结果主动查询
*/ */
@RequiresPermissions("kylin:performancesExpress:getResult") @RequiresPermissions("kylin:performancesExpress:getResult")
@PostMapping("/getResult") @PostMapping("/getResult")
...@@ -133,4 +145,69 @@ public class PerformancesExpressController extends BaseController { ...@@ -133,4 +145,69 @@ public class PerformancesExpressController extends BaseController {
} }
} }
/**
* 运费主动查询
*/
@RequiresPermissions("kylin:performancesExpress:getListFreight")
@PostMapping("/getListFreight")
@ResponseBody
public AjaxResult getListFreight(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
ResponseDto res = performancesExpressServiceImpl.getListFreight(performanceExpressSearchAdminParam);
try {
if (res.isSuccess()) {
return success();
} else {
return error(res.getMessage());
}
} catch (Exception e) {
return error(e.getMessage());
}
}
/**
* 路由主动查询
*/
@RequiresPermissions("kylin:performancesExpress:listOrderRoute")
@PostMapping("/listOrderRoute")
@ResponseBody
public AjaxResult listOrderRoute(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
ResponseDto res = performancesExpressServiceImpl.listOrderRoute(performanceExpressSearchAdminParam);
try {
if (res.isSuccess()) {
return success();
} else {
return error(res.getMessage());
}
} catch (Exception e) {
return error(e.getMessage());
}
}
/**
* 订单状态推送
*/
/**
* 路由推送
*/
/**
* 清单运费推送
*/
/**
* 预计派件时间
*/
/**
* 通缉拦截
* 该接口只能在揽收后,派送成功前生效
* 同一订单在成功通缉拦截一次后,不可再次进行通缉拦截
* 1-转寄;2-退回;3-优派;4-再派;5-改自取(改派-其他自取点取件);6-改派送(上门派送);7-更改派送时间;8-修改收件人信息;9-更改付款方式;10-修改代收货款;12-作废;
*/
/**
* 订单确认 快递员上门揽收前,如需修改部分下单内容(如收件人信息等
*/
} }
...@@ -71,6 +71,9 @@ ...@@ -71,6 +71,9 @@
var placeOrderFlag = [[${@permission.hasPermi('kylin:performancesExpress:placeOrder')}]]; var placeOrderFlag = [[${@permission.hasPermi('kylin:performancesExpress:placeOrder')}]];
var cancelOrderFlag = [[${@permission.hasPermi('kylin:performancesExpress:cancelOrder')}]]; var cancelOrderFlag = [[${@permission.hasPermi('kylin:performancesExpress:cancelOrder')}]];
var getResultFlag = [[${@permission.hasPermi('kylin:performancesExpress:getResult')}]]; var getResultFlag = [[${@permission.hasPermi('kylin:performancesExpress:getResult')}]];
var getFreightFlag = [[${@permission.hasPermi('kylin:performancesExpress:getFreight')}]];
var getListFreightFlag = [[${@permission.hasPermi('kylin:performancesExpress:getListFreight')}]];
var listOrderRouteFlag = [[${@permission.hasPermi('kylin:performancesExpress:listOrderRoute')}]];
var prefix = ctx + "kylin/performancesExpress"; var prefix = ctx + "kylin/performancesExpress";
...@@ -82,7 +85,10 @@ ...@@ -82,7 +85,10 @@
modalName: "演出订单", modalName: "演出订单",
placeOrderUrl: prefix + "/placeOrder", placeOrderUrl: prefix + "/placeOrder",
cancelOrderUrl: prefix + "/cancelOrder", cancelOrderUrl: prefix + "/cancelOrder",
getFreightUrl: prefix + "/getFreight",
getListFreightUrl: prefix + "/getListFreight",
getResultUrl: prefix + "/getResult", getResultUrl: prefix + "/getResult",
listOrderRouteUrl: prefix + "/listOrderRoute",
columns: [{ columns: [{
checkbox: true checkbox: true
}, },
...@@ -126,7 +132,7 @@ ...@@ -126,7 +132,7 @@
}, },
{ {
field: '', field: '',
title: '收用户', title: '收用户',
formatter: function(value, row, index) { formatter: function(value, row, index) {
var expressContacts = row.expressContacts; var expressContacts = row.expressContacts;
var expressAddress = row.expressAddress; var expressAddress = row.expressAddress;
...@@ -142,6 +148,9 @@ ...@@ -142,6 +148,9 @@
actions.push('<a class="btn btn-success btn-xs ' + placeOrderFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.orderTicketsId + '\', \'确定下单吗?\', table.options.placeOrderUrl)"></i>下单</a> '); actions.push('<a class="btn btn-success btn-xs ' + placeOrderFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.orderTicketsId + '\', \'确定下单吗?\', table.options.placeOrderUrl)"></i>下单</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + cancelOrderFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.orderTicketsId + '\', \'确定取消快递单吗?\', table.options.cancelOrderUrl)"></i>取消</a> '); actions.push('<a class="btn btn-danger btn-xs ' + cancelOrderFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.orderTicketsId + '\', \'确定取消快递单吗?\', table.options.cancelOrderUrl)"></i>取消</a> ');
actions.push('<a class="btn btn-default btn-xs ' + getResultFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.orderTicketsId + '\', \'确定获取快递信息吗?\', table.options.getResultUrl)"></i>主动获取下单信息</a> '); actions.push('<a class="btn btn-default btn-xs ' + getResultFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.orderTicketsId + '\', \'确定获取快递信息吗?\', table.options.getResultUrl)"></i>主动获取下单信息</a> ');
actions.push('<a class="btn btn-default btn-xs ' + getFreightFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.orderTicketsId + '\', \'确定获取估算运费吗?\', table.options.getFreightUrl)"></i>运费估算</a> ');
actions.push('<a class="btn btn-default btn-xs ' + getListFreightFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.orderTicketsId + '\', \'确定获取运费信息吗?\', table.options.getListFreightUrl)"></i>主动获取运费</a> ');
actions.push('<a class="btn btn-default btn-xs ' + listOrderRouteFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.orderTicketsId + '\', \'确定获取路由信息吗?\', table.options.listOrderRouteUrl)"></i>路由主动查询</a> ');
return actions.join(''); return actions.join('');
} }
}] }]
......
...@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; ...@@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.client.admin.common.utils.StringUtils; import com.liquidnet.client.admin.common.utils.StringUtils;
import com.liquidnet.client.admin.zhengzai.kylin.utils.ShunfengSignUtils; import com.liquidnet.client.admin.zhengzai.kylin.utils.ShunfengSignUtils;
import com.liquidnet.commons.lang.util.BeanUtil; import com.liquidnet.commons.lang.util.*;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst; import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dao.*; import com.liquidnet.service.kylin.dao.*;
...@@ -22,7 +19,7 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -22,7 +19,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -46,16 +43,14 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -46,16 +43,14 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
private String jCompany; private String jCompany;
@Value("${liquidnet.shunfeng.jContact}") @Value("${liquidnet.shunfeng.jContact}")
private String jContact; private String jContact;
@Value("${liquidnet.shunfeng.jMobile}") @Value("${liquidnet.shunfeng.jTel}")
private String jMobile; private String jTel;
@Value("${liquidnet.shunfeng.jProvince}") @Value("${liquidnet.shunfeng.jProvince}")
private String jProvince; private String jProvince;
@Value("${liquidnet.shunfeng.jCity}") @Value("${liquidnet.shunfeng.jCity}")
private String jCity; private String jCity;
@Value("${liquidnet.shunfeng.jAddress}") @Value("${liquidnet.shunfeng.jAddress}")
private String jAddress; private String jAddress;
@Value("${liquidnet.shunfeng.payMethod}")
private Integer payMethod;
@Value("${liquidnet.shunfeng.expressType}") @Value("${liquidnet.shunfeng.expressType}")
private Integer expressType; private Integer expressType;
@Value("${liquidnet.shunfeng.depositumInfo}") @Value("${liquidnet.shunfeng.depositumInfo}")
...@@ -76,6 +71,12 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -76,6 +71,12 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
@Autowired @Autowired
private KylinOrderExpressMapper kylinOrderExpressMapper; private KylinOrderExpressMapper kylinOrderExpressMapper;
@Autowired
private KylinOrderExpressFeeInfoMapper kylinOrderExpressFeeInfoMapper;
@Autowired
private KylinOrderExpressRouteMapper kylinOrderExpressRouteMapper;
public List<PerformanceExpressPerformanceListAdminDao> getPerformancesList(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) { public List<PerformanceExpressPerformanceListAdminDao> getPerformancesList(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
List<PerformanceExpressPerformanceListAdminDao> voList = new ArrayList(); List<PerformanceExpressPerformanceListAdminDao> voList = new ArrayList();
try { try {
...@@ -99,45 +100,61 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -99,45 +100,61 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
public ResponseDto placeOrder(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) { public ResponseDto placeOrder(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
List<String> ids = performanceExpressSearchAdminParam.getIds(); List<String> ids = performanceExpressSearchAdminParam.getIds();
for (String orderTicketsId : ids) { for (String orderTicketsId : ids) {
// 已经存在未取消的下单数据过滤掉
Integer[] expressStatus = {KylinTableStatusConst.ORDER_EXPRESS_STATUS1, KylinTableStatusConst.ORDER_EXPRESS_STATUS3};
KylinOrderExpress orderExpressInfo = kylinOrderExpressMapper.selectOne(
new QueryWrapper<KylinOrderExpress>().eq("order_tickets_id", orderTicketsId)
.notIn("express_status", expressStatus)
);
if (null != orderExpressInfo) {
continue;
}
KylinOrderTickets orderInfo = kylinOrderTicketsMapper.selectOne( KylinOrderTickets orderInfo = kylinOrderTicketsMapper.selectOne(
new QueryWrapper<KylinOrderTickets>().eq("order_tickets_id", orderTicketsId) new QueryWrapper<KylinOrderTickets>().eq("order_tickets_id", orderTicketsId)
); );
HashMap<String, Object> hBody = new HashMap<>(); // 生成预快递单 防止因失败没办法再次发起也不能主动获取数据
KylinOrderExpress kylinOrderExpressPre = new KylinOrderExpress();
String orderExpressId = IDGenerator.nextSnowId();
kylinOrderExpressPre.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS1);
kylinOrderExpressPre.setOrderExpressId(orderExpressId);
kylinOrderExpressPre.setOrderTicketsId(orderTicketsId);
// 防止重复前面加上 "NEW" 因取消后再发起订单号也不能一致所有后面做补位操作
Integer placeCount = kylinOrderExpressMapper.selectCount(
new QueryWrapper<KylinOrderExpress>()
.eq("order_tickets_id", orderTicketsId)
);
String codeNum = StringUtils.leftPad(String.valueOf(placeCount), 3, "0");
String OrderExpressCode = "NEW" + orderInfo.getOrderCode().concat(codeNum);
kylinOrderExpressPre.setOrderExpressCode(OrderExpressCode);
kylinOrderExpressPre.setExpressType(expressType);
kylinOrderExpressPre.setCreatedAt(DateUtil.getNowTime());
kylinOrderExpressMapper.insert(kylinOrderExpressPre);
// 请求下单数据
HashMap<String, Object> hBody = new HashMap<>();
hBody.put("custid", custid); hBody.put("custid", custid);
hBody.put("jCompany", jCompany); hBody.put("jCompany", jCompany);
hBody.put("jContact", jContact); hBody.put("jContact", jContact);
// hBody.put("jTel", "010"); hBody.put("jTel", jTel);
hBody.put("jMobile", jMobile);
hBody.put("jProvince", jProvince); hBody.put("jProvince", jProvince);
hBody.put("jCity", jCity); hBody.put("jCity", jCity);
hBody.put("jAddress", jAddress); hBody.put("jAddress", jAddress);
hBody.put("payMethod", payMethod);// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付; hBody.put("payMethod", 0);// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
hBody.put("expressType", expressType);// 顺丰特快 hBody.put("expressType", expressType);// 顺丰特快
hBody.put("depositumInfo", depositumInfo); hBody.put("depositumInfo", depositumInfo);
Integer placeCount = kylinOrderExpressMapper.selectCount(
new QueryWrapper<KylinOrderExpress>()
.eq("order_tickets_id", orderTicketsId)
);
String codeNum = StringUtils.leftPad(String.valueOf(placeCount), 3, "0");
String OrderExpressCode = "NEW"+orderInfo.getOrderCode().concat(codeNum);
hBody.put("orderId", OrderExpressCode); hBody.put("orderId", OrderExpressCode);
hBody.put("depositumNo", orderInfo.getNumber()); hBody.put("depositumNo", orderInfo.getNumber());
hBody.put("dContact", orderInfo.getExpressContacts()); hBody.put("dContact", orderInfo.getExpressContacts());
hBody.put("dMobile", orderInfo.getExpressPhone()); hBody.put("dMobile", orderInfo.getExpressPhone());
// hBody.put("dProvince", "北京");
// hBody.put("dCity", "北京市");
hBody.put("dAddress", orderInfo.getExpressAddress()); hBody.put("dAddress", orderInfo.getExpressAddress());
// 时间戳
long currentTimeMillis = System.currentTimeMillis();
// 生成签名并请求 // 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequest(currentTimeMillis + "", hBody, "/public/order/v1/placeOrder"); String result = shunfengSignUtils.generateSignatureAndRequest(hBody, "/public/order/v1/placeOrder");
HashMap hashMap = JsonUtils.fromJson(result, HashMap.class); HashMap hashMap = JsonUtils.fromJson(result, HashMap.class);
System.out.println(result); System.out.println(result);
if (hashMap.get("succ").equals("fail")) { if (hashMap.get("succ").equals("fail")) {
...@@ -146,13 +163,8 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -146,13 +163,8 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
} else { } else {
HashMap hashMapResult = (HashMap) hashMap.get("result"); HashMap hashMapResult = (HashMap) hashMap.get("result");
KylinOrderExpress kylinOrderExpress = new KylinOrderExpress(); KylinOrderExpress kylinOrderExpress = new KylinOrderExpress();
String orderExpressId = IDGenerator.nextSnowId(); kylinOrderExpress.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS2);
kylinOrderExpress.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS1);
kylinOrderExpress.setOrderExpressId(orderExpressId);
kylinOrderExpress.setOrderTicketsId(orderTicketsId);
kylinOrderExpress.setOrderExpressCode(OrderExpressCode);
kylinOrderExpress.setMailno((String) hashMapResult.get("mailno")); kylinOrderExpress.setMailno((String) hashMapResult.get("mailno"));
kylinOrderExpress.setExpressType(expressType);
kylinOrderExpress.setFilterResult(hashMapResult.get("filter_result").toString()); kylinOrderExpress.setFilterResult(hashMapResult.get("filter_result").toString());
kylinOrderExpress.setRemark((String) hashMapResult.get("remark")); kylinOrderExpress.setRemark((String) hashMapResult.get("remark"));
kylinOrderExpress.setOrigincode((String) hashMapResult.get("origincode")); kylinOrderExpress.setOrigincode((String) hashMapResult.get("origincode"));
...@@ -160,8 +172,11 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -160,8 +172,11 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
kylinOrderExpress.setPrintIcon((String) hashMapResult.get("printIcon")); kylinOrderExpress.setPrintIcon((String) hashMapResult.get("printIcon"));
kylinOrderExpress.setPrintFlag((String) hashMapResult.get("printFlag")); kylinOrderExpress.setPrintFlag((String) hashMapResult.get("printFlag"));
kylinOrderExpress.setTwoDimensionCode((String) hashMapResult.get("twoDimensionCode")); kylinOrderExpress.setTwoDimensionCode((String) hashMapResult.get("twoDimensionCode"));
kylinOrderExpress.setCreatedAt(DateUtil.getNowTime()); kylinOrderExpress.setUpdatedAt(DateUtil.getNowTime());
kylinOrderExpressMapper.insert(kylinOrderExpress); kylinOrderExpressMapper.update(
kylinOrderExpress
, new UpdateWrapper<KylinOrderExpress>().in("order_express_id", orderExpressId)
);
} }
} }
return ResponseDto.success(); return ResponseDto.success();
...@@ -169,20 +184,18 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -169,20 +184,18 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
public ResponseDto cancelOrder(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) { public ResponseDto cancelOrder(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
List<String> ids = performanceExpressSearchAdminParam.getIds(); List<String> ids = performanceExpressSearchAdminParam.getIds();
Integer[] expressStatus = {KylinTableStatusConst.ORDER_EXPRESS_STATUS1, KylinTableStatusConst.ORDER_EXPRESS_STATUS3};
for (String orderTicketsId : ids) { for (String orderTicketsId : ids) {
KylinOrderExpress orderExpressInfo = kylinOrderExpressMapper.selectOne( KylinOrderExpress orderExpressInfo = kylinOrderExpressMapper.selectOne(
new QueryWrapper<KylinOrderExpress>().eq("order_tickets_id", orderTicketsId) new QueryWrapper<KylinOrderExpress>().eq("order_tickets_id", orderTicketsId)
.ne("express_status", KylinTableStatusConst.ORDER_EXPRESS_STATUS2) .notIn("express_status", expressStatus)
); );
if (null != orderExpressInfo) { if (null != orderExpressInfo) {
HashMap<String, Object> hBody = new HashMap<>(); HashMap<String, Object> hBody = new HashMap<>();
hBody.put("orderId", orderExpressInfo.getOrderExpressCode()); hBody.put("orderId", orderExpressInfo.getOrderExpressCode());
// 时间戳
long currentTimeMillis = System.currentTimeMillis();
// 生成签名并请求 // 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequest(currentTimeMillis + "", hBody, "/public/order/v1/cancelOrder"); String result = shunfengSignUtils.generateSignatureAndRequest(hBody, "/public/order/v1/cancelOrder");
HashMap hashMap = JsonUtils.fromJson(result, HashMap.class); HashMap hashMap = JsonUtils.fromJson(result, HashMap.class);
System.out.println(result); System.out.println(result);
if (hashMap.get("succ").equals("fail")) { if (hashMap.get("succ").equals("fail")) {
...@@ -190,7 +203,7 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -190,7 +203,7 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
return ResponseDto.failure(msg); return ResponseDto.failure(msg);
} else { } else {
KylinOrderExpress kylinOrderExpress = new KylinOrderExpress(); KylinOrderExpress kylinOrderExpress = new KylinOrderExpress();
kylinOrderExpress.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS2); kylinOrderExpress.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS3);
kylinOrderExpress.setUpdatedAt(DateUtil.getNowTime()); kylinOrderExpress.setUpdatedAt(DateUtil.getNowTime());
kylinOrderExpressMapper.update( kylinOrderExpressMapper.update(
kylinOrderExpress kylinOrderExpress
...@@ -204,31 +217,19 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -204,31 +217,19 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
public ResponseDto getResult(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) { public ResponseDto getResult(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
List<String> ids = performanceExpressSearchAdminParam.getIds(); List<String> ids = performanceExpressSearchAdminParam.getIds();
Integer[] expressStatus = {KylinTableStatusConst.ORDER_EXPRESS_STATUS1, KylinTableStatusConst.ORDER_EXPRESS_STATUS3};
for (String orderTicketsId : ids) { for (String orderTicketsId : ids) {
KylinOrderExpress orderExpressInfo = kylinOrderExpressMapper.selectOne( KylinOrderExpress orderExpressInfo = kylinOrderExpressMapper.selectOne(
new QueryWrapper<KylinOrderExpress>().eq("order_tickets_id", orderTicketsId) new QueryWrapper<KylinOrderExpress>().eq("order_tickets_id", orderTicketsId)
.ne("express_status", KylinTableStatusConst.ORDER_EXPRESS_STATUS2) .notIn("express_status", expressStatus)
); );
if (null != orderExpressInfo) { if (null != orderExpressInfo) {
KylinOrderTickets orderInfo = kylinOrderTicketsMapper.selectOne(
new QueryWrapper<KylinOrderTickets>().eq("order_tickets_id", orderTicketsId)
);
Integer placeCount = kylinOrderExpressMapper.selectCount(
new QueryWrapper<KylinOrderExpress>()
.eq("order_tickets_id", orderTicketsId)
);
String codeNum = StringUtils.leftPad(String.valueOf(placeCount), 3, "0");
String OrderExpressCode = "NEW"+orderInfo.getOrderCode().concat(codeNum);
HashMap<String, Object> hBody = new HashMap<>(); HashMap<String, Object> hBody = new HashMap<>();
hBody.put("orderId", OrderExpressCode); hBody.put("orderId", orderExpressInfo.getOrderExpressCode());
hBody.put("searchType", 1); //查询类型:1,正向单查询,传入的orderid为正向定单号,2,退货单查询,传入的orderid为退货原始订单号 hBody.put("searchType", 1); //查询类型:1,正向单查询,传入的orderid为正向定单号,2,退货单查询,传入的orderid为退货原始订单号
// 时间戳
long currentTimeMillis = System.currentTimeMillis();
// 生成签名并请求 // 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequest(currentTimeMillis + "", hBody, "/public/order/v1/getResult"); String result = shunfengSignUtils.generateSignatureAndRequest(hBody, "/public/order/v1/getResult");
HashMap hashMap = JsonUtils.fromJson(result, HashMap.class); HashMap hashMap = JsonUtils.fromJson(result, HashMap.class);
System.out.println(result); System.out.println(result);
if (hashMap.get("succ").equals("fail")) { if (hashMap.get("succ").equals("fail")) {
...@@ -237,13 +238,8 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -237,13 +238,8 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
} else { } else {
HashMap hashMapResult = (HashMap) hashMap.get("result"); HashMap hashMapResult = (HashMap) hashMap.get("result");
KylinOrderExpress kylinOrderExpress = new KylinOrderExpress(); KylinOrderExpress kylinOrderExpress = new KylinOrderExpress();
String orderExpressId = IDGenerator.nextSnowId(); kylinOrderExpress.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS2);
kylinOrderExpress.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS1);
kylinOrderExpress.setOrderExpressId(orderExpressId);
kylinOrderExpress.setOrderTicketsId(orderTicketsId);
kylinOrderExpress.setOrderExpressCode(OrderExpressCode);
kylinOrderExpress.setMailno((String) hashMapResult.get("mailno")); kylinOrderExpress.setMailno((String) hashMapResult.get("mailno"));
kylinOrderExpress.setExpressType(expressType);
kylinOrderExpress.setFilterResult(hashMapResult.get("filter_result").toString()); kylinOrderExpress.setFilterResult(hashMapResult.get("filter_result").toString());
kylinOrderExpress.setRemark((String) hashMapResult.get("remark")); kylinOrderExpress.setRemark((String) hashMapResult.get("remark"));
kylinOrderExpress.setOrigincode((String) hashMapResult.get("origincode")); kylinOrderExpress.setOrigincode((String) hashMapResult.get("origincode"));
...@@ -251,11 +247,154 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres ...@@ -251,11 +247,154 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
kylinOrderExpress.setPrintIcon((String) hashMapResult.get("printIcon")); kylinOrderExpress.setPrintIcon((String) hashMapResult.get("printIcon"));
kylinOrderExpress.setPrintFlag((String) hashMapResult.get("printFlag")); kylinOrderExpress.setPrintFlag((String) hashMapResult.get("printFlag"));
kylinOrderExpress.setTwoDimensionCode((String) hashMapResult.get("twoDimensionCode")); kylinOrderExpress.setTwoDimensionCode((String) hashMapResult.get("twoDimensionCode"));
kylinOrderExpress.setCreatedAt(DateUtil.getNowTime()); kylinOrderExpress.setUpdatedAt(DateUtil.getNowTime());
kylinOrderExpressMapper.insert(kylinOrderExpress); kylinOrderExpressMapper.update(
kylinOrderExpress
, new UpdateWrapper<KylinOrderExpress>().in("order_express_id", orderExpressInfo.getOrderExpressId())
);
}
}
}
return ResponseDto.success();
}
public ResponseDto getListFreight(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
List<String> ids = performanceExpressSearchAdminParam.getIds();
Integer[] expressStatus = {KylinTableStatusConst.ORDER_EXPRESS_STATUS1, KylinTableStatusConst.ORDER_EXPRESS_STATUS3};
for (String orderTicketsId : ids) {
KylinOrderExpress orderExpressInfo = kylinOrderExpressMapper.selectOne(
new QueryWrapper<KylinOrderExpress>().eq("order_tickets_id", orderTicketsId)
.notIn("express_status", expressStatus)
);
if (null != orderExpressInfo) {
HashMap<String, Object> hBody = new HashMap<>();
hBody.put("orderId", orderExpressInfo.getOrderExpressCode());
// 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequest(hBody, "/public/order/v1/getListFreight");
HashMap hashMap = JsonUtils.fromJson(result, HashMap.class);
System.out.println(result);
if (hashMap.get("succ").equals("fail")) {
String msg = (String) hashMap.get("msg");
return ResponseDto.failure(msg);
} else {
HashMap resultResult = (HashMap) hashMap.get("result");
List<HashMap> feeList = (List) resultResult.get("feeList");
if (!CollectionUtil.isEmpty(feeList)) {
kylinOrderExpressFeeInfoMapper.delete(new QueryWrapper<KylinOrderExpressFeeInfo>().eq("order_express_id", orderExpressInfo.getOrderExpressId()));
for (HashMap feeInfo : feeList) {
KylinOrderExpressFeeInfo kylinOrderExpressFeeInfo = new KylinOrderExpressFeeInfo();
String orderExpressFeeInfoId = IDGenerator.nextSnowId();
kylinOrderExpressFeeInfo.setOrderExpressFeeInfoId(orderExpressFeeInfoId);
kylinOrderExpressFeeInfo.setOrderExpressId(orderExpressInfo.getOrderExpressId());
kylinOrderExpressFeeInfo.setType((String) feeInfo.get("type"));
kylinOrderExpressFeeInfo.setName((String) feeInfo.get("name"));
kylinOrderExpressFeeInfo.setValue(new BigDecimal(feeInfo.get("value").toString()));
kylinOrderExpressFeeInfo.setCreatedAt(DateUtil.getNowTime());
kylinOrderExpressFeeInfoMapper.insert(kylinOrderExpressFeeInfo);
}
}
} }
} }
} }
return ResponseDto.success(); return ResponseDto.success();
} }
public ResponseDto listOrderRoute(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
List<String> ids = performanceExpressSearchAdminParam.getIds();
Integer[] expressStatus = {KylinTableStatusConst.ORDER_EXPRESS_STATUS1, KylinTableStatusConst.ORDER_EXPRESS_STATUS3};
for (String orderTicketsId : ids) {
KylinOrderExpress orderExpressInfo = kylinOrderExpressMapper.selectOne(
new QueryWrapper<KylinOrderExpress>().eq("order_tickets_id", orderTicketsId)
.notIn("express_status", expressStatus)
);
if (null != orderExpressInfo) {
HashMap<String, Object> hBody = new HashMap<>();
hBody.put("orderId", orderExpressInfo.getOrderExpressCode());
// 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequest(hBody, "/public/order/v1/listOrderRoute");
HashMap hashMap = JsonUtils.fromJson(result, HashMap.class);
System.out.println(result);
if (hashMap.get("succ").equals("fail")) {
String msg = (String) hashMap.get("msg");
return ResponseDto.failure(msg);
} else {
List<HashMap> resultResult = (List) hashMap.get("result");
if (!CollectionUtil.isEmpty(resultResult)) {
kylinOrderExpressRouteMapper.delete(new QueryWrapper<KylinOrderExpressRoute>().eq("order_express_id", orderExpressInfo.getOrderExpressId()));
for (HashMap routeInfo : resultResult) {
KylinOrderExpressRoute kylinOrderExpressRoute = new KylinOrderExpressRoute();
String orderExpressRouteId = IDGenerator.nextSnowId();
kylinOrderExpressRoute.setOrderExpressRouteId(orderExpressRouteId);
kylinOrderExpressRoute.setOrderExpressId(orderExpressInfo.getOrderExpressId());
kylinOrderExpressRoute.setAcceptAddress((String) routeInfo.get("accept_address"));
kylinOrderExpressRoute.setAcceptDate((String) routeInfo.get("accept_date"));
kylinOrderExpressRoute.setAcceptTime((String) routeInfo.get("accept_time"));
kylinOrderExpressRoute.setAcceptTotaltime((String) routeInfo.get("accept_totaltime"));
kylinOrderExpressRoute.setRemark((String) routeInfo.get("remark"));
kylinOrderExpressRoute.setOpcode((String) routeInfo.get("opcode"));
kylinOrderExpressRoute.setCreatedAt(DateUtil.getNowTime());
kylinOrderExpressRouteMapper.insert(kylinOrderExpressRoute);
}
}
}
}
}
return ResponseDto.success();
}
public ResponseDto getFreight(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
List<String> ids = performanceExpressSearchAdminParam.getIds();
Integer[] expressStatus = {KylinTableStatusConst.ORDER_EXPRESS_STATUS1, KylinTableStatusConst.ORDER_EXPRESS_STATUS3};
for (String orderTicketsId : ids) {
KylinOrderExpress orderExpressInfo = kylinOrderExpressMapper.selectOne(
new QueryWrapper<KylinOrderExpress>().eq("order_tickets_id", orderTicketsId)
.notIn("express_status", expressStatus)
);
KylinOrderTickets orderInfo = kylinOrderTicketsMapper.selectOne(
new QueryWrapper<KylinOrderTickets>().eq("order_tickets_id", orderTicketsId)
);
if (null != orderExpressInfo) {
HashMap<String, Object> hBody = new HashMap<>();
hBody.put("jProvince", jProvince);
hBody.put("jCity", jCity);
hBody.put("jAddress", jAddress);
hBody.put("dProvince", "北京市");
hBody.put("dCity", "北京城区");
hBody.put("dAddress", orderInfo.getExpressAddress());
hBody.put("expressType", expressType);
// hBody.put("parcelWeighs", 2.00);
// hBody.put("volume", "10,10,20");
// 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequest(hBody, "/public/order/v1/getFreight");
HashMap hashMap = JsonUtils.fromJson(result, HashMap.class);
System.out.println(result);
if (hashMap.get("succ").equals("fail")) {
String msg = (String) hashMap.get("msg");
return ResponseDto.failure(msg);
} else {
/*HashMap resultResult = (HashMap) hashMap.get("result");
List<HashMap> feeList = (List) resultResult.get("feeList");
if (!CollectionUtil.isEmpty(feeList)) {
for (HashMap feeInfo : feeList) {
KylinOrderExpressFeeInfo kylinOrderExpressFeeInfo = new KylinOrderExpressFeeInfo();
String orderExpressFeeInfoId = IDGenerator.nextSnowId();
kylinOrderExpressFeeInfo.setOrderExpressFeeInfoId(orderExpressFeeInfoId);
kylinOrderExpressFeeInfo.setOrderExpressId(orderExpressInfo.getOrderExpressId());
kylinOrderExpressFeeInfo.setType((String) feeInfo.get("type"));
kylinOrderExpressFeeInfo.setName((String) feeInfo.get("name"));
kylinOrderExpressFeeInfo.setValue(new BigDecimal(feeInfo.get("value").toString()));
kylinOrderExpressFeeInfo.setCreatedAt(DateUtil.getNowTime());
kylinOrderExpressFeeInfoMapper.insert(kylinOrderExpressFeeInfo);
}
}*/
}
}
}
return ResponseDto.success();
}
} }
package com.liquidnet.client.admin.zhengzai.kylin.utils; package com.liquidnet.client.admin.zhengzai.kylin.utils;
import com.liquidnet.client.admin.common.json.JSONObject;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.UserPathDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -28,6 +29,7 @@ import java.util.HashMap; ...@@ -28,6 +29,7 @@ import java.util.HashMap;
* @since 2021-06-24 8:00 下午 * @since 2021-06-24 8:00 下午
*/ */
@Component @Component
@Slf4j
public class ShunfengSignUtils { public class ShunfengSignUtils {
/** /**
* appId * appId
...@@ -51,11 +53,12 @@ public class ShunfengSignUtils { ...@@ -51,11 +53,12 @@ public class ShunfengSignUtils {
/** /**
* 生成签名并请求 * 生成签名并请求
* @param timestamp 时间戳
* @param hbody 请求body * @param hbody 请求body
* @return * @return
*/ */
public String generateSignatureAndRequest(String timestamp, HashMap<String, Object> hbody, String url) { public String generateSignatureAndRequest(HashMap<String, Object> hbody, String url) {
long currentTimeMillis = System.currentTimeMillis(); // 时间戳
String timestamp = currentTimeMillis + "";
hbody.put("companyId", APP_ID); hbody.put("companyId", APP_ID);
String body = JsonUtils.toJson(hbody); String body = JsonUtils.toJson(hbody);
// 生成签名 // 生成签名
...@@ -75,6 +78,9 @@ public class ShunfengSignUtils { ...@@ -75,6 +78,9 @@ public class ShunfengSignUtils {
// 请求body体需和获取验签时一致且编码UTF8!!! // 请求body体需和获取验签时一致且编码UTF8!!!
httpPost.setEntity(new StringEntity(body, "utf-8")); httpPost.setEntity(new StringEntity(body, "utf-8"));
CloseableHttpResponse response = null; CloseableHttpResponse response = null;
log.info(UserPathDto.setData("header", "", httpPost.getAllHeaders()));
log.info(UserPathDto.setData("body", "", body));
try { try {
response = client.execute(httpPost); response = client.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) { if (response.getStatusLine().getStatusCode() == 200) {
......
...@@ -45,14 +45,13 @@ liquidnet: ...@@ -45,14 +45,13 @@ liquidnet:
appid: ${liquidnet.client.admin.shunfeng.appid} appid: ${liquidnet.client.admin.shunfeng.appid}
custid: ${liquidnet.client.admin.shunfeng.custid} custid: ${liquidnet.client.admin.shunfeng.custid}
jCompany: 北京正在映画互联网有限公司 jCompany: 北京正在映画互联网有限公司
jContact: 姜秀龙 jContact: 摩登天空票务部
jMobile: 15811009011 jTel: 4001680650
jProvince: 北京 jProvince: 北京
jCity: 北京市 jCity: 北京市
jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空 jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
payMethod: 0 expressType: 1 # 默认顺丰特快
expressType: 1 depositumInfo: 演出纸质票
depositumInfo: 演出票
# 开发环境配置 # 开发环境配置
server: server:
......
...@@ -19,5 +19,18 @@ liquidnet: ...@@ -19,5 +19,18 @@ liquidnet:
mongodb: mongodb:
sslEnabled: false sslEnabled: false
database: dev_ln_scene database: dev_ln_scene
shunfeng:
url: ${liquidnet.client.admin.shunfeng.url}
sk: ${liquidnet.client.admin.shunfeng.sk}
appid: ${liquidnet.client.admin.shunfeng.appid}
custid: ${liquidnet.client.admin.shunfeng.custid}
jCompany: 北京正在映画互联网有限公司
jContact: 摩登天空票务部
jTel: 4001680650
jProvince: 北京
jCity: 北京市
jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType: 1 # 默认顺丰特快
depositumInfo: 演出纸质票
#以下为spring各环境个性配置 #以下为spring各环境个性配置
liquidnet:
system:
updating:
switch: false
info:
port: 9001
context: /platform
name: liquidnet-service-platform
logfile:
path: /data/logs
name: service-platform
config: classpath:logback-spring.xml
file-max-size: 200MB
level: info
rabbitmq:
connection-timeout: 5000
mysql:
database-name: test_ln_scene
mongodb:
sslEnabled: false
database: test_ln_scene
shunfeng:
url: ${liquidnet.client.admin.shunfeng.url}
sk: ${liquidnet.client.admin.shunfeng.sk}
appid: ${liquidnet.client.admin.shunfeng.appid}
custid: ${liquidnet.client.admin.shunfeng.custid}
jCompany: 北京正在映画互联网有限公司
jContact: 摩登天空票务部
jTel: 4001680650
jProvince: 北京
jCity: 北京市
jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType: 1 # 默认顺丰特快
depositumInfo: 演出纸质票
#以下为spring各环境个性配置
package com.liquidnet.service.kylin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* <p>
* 订单快递运费
* </p>
*
* @author jiangxiulong
* @since 2021-06-28
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class KylinOrderExpressFeeInfo implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Integer mid;
private String orderExpressFeeInfoId;
private String orderExpressId;
private String type;
private String name;
private BigDecimal value;
/**
* 创建时间
*/
private String createdAt;
/**
* 修改时间
*/
private String updatedAt;
}
package com.liquidnet.service.kylin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
* 订单快递路由
* </p>
*
* @author jiangxiulong
* @since 2021-06-28
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class KylinOrderExpressRoute implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Integer mid;
private String orderExpressRouteId;
private String orderExpressId;
private String acceptAddress;
private String acceptDate;
private String acceptTime;
private String acceptTotaltime;
private String remark;
private String opcode;
/**
* 创建时间
*/
private String createdAt;
/**
* 修改时间
*/
private String updatedAt;
}
package com.liquidnet.service.kylin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.kylin.entity.KylinOrderExpressFeeInfo;
/**
* <p>
* 订单快递运费信息 Mapper 接口 处理数据库
* </p>
*
* @author jiangxiulong
* @since 2021-06-28
*/
public interface KylinOrderExpressFeeInfoMapper extends BaseMapper<KylinOrderExpressFeeInfo> {
}
...@@ -9,7 +9,7 @@ import com.liquidnet.service.kylin.entity.KylinOrderExpress; ...@@ -9,7 +9,7 @@ import com.liquidnet.service.kylin.entity.KylinOrderExpress;
* </p> * </p>
* *
* @author jiangxiulong * @author jiangxiulong
* @since 2021-05-01 * @since 2021-06-27
*/ */
public interface KylinOrderExpressMapper extends BaseMapper<KylinOrderExpress> { public interface KylinOrderExpressMapper extends BaseMapper<KylinOrderExpress> {
......
package com.liquidnet.service.kylin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.kylin.entity.KylinOrderExpressRoute;
/**
* <p>
* 订单快递路由 Mapper 接口 处理数据库
* </p>
*
* @author jiangxiulong
* @since 2021-06-28
*/
public interface KylinOrderExpressRouteMapper extends BaseMapper<KylinOrderExpressRoute> {
}
...@@ -756,10 +756,43 @@ CREATE TABLE `kylin_order_express` ...@@ -756,10 +756,43 @@ CREATE TABLE `kylin_order_express`
`two_dimension_code` varchar(255) NOT NULL DEFAULT '' COMMENT '二维码', `two_dimension_code` varchar(255) NOT NULL DEFAULT '' COMMENT '二维码',
`created_at` timestamp NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL,
KEY `kylin_order_express_order_express_id_index` (`order_express_id`), KEY `order_express_id_index` (`order_express_id`),
PRIMARY KEY (`mid`) PRIMARY KEY (`mid`)
) ENGINE = InnoDB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '订单快递表'; ) ENGINE = InnoDB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '订单快递表';
drop TABLE if exists `kylin_order_express_fee_info`;
CREATE TABLE `kylin_order_express_fee_info`
(
`mid` int unsigned NOT NULL AUTO_INCREMENT,
`order_express_fee_info_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'order_express_fee_info_id',
`order_express_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'order_express_id',
`type` varchar(2) NOT NULL DEFAULT '0' COMMENT '费用类型',
`name` varchar(200) NOT NULL DEFAULT '' COMMENT '费用名称',
`value` decimal(11, 2) NOT NULL DEFAULT '0.00' COMMENT '金额',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
KEY `order_express_fee_info_id_index` (`order_express_fee_info_id`),
PRIMARY KEY (`mid`)
) ENGINE = InnoDB COMMENT '订单快递费用信息表';
drop TABLE if exists `kylin_order_express_route`;
CREATE TABLE `kylin_order_express_route`
(
`mid` int unsigned NOT NULL AUTO_INCREMENT,
`order_express_route_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'order_express_route_id',
`order_express_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'order_express_id',
`accept_address` varchar(200) NOT NULL DEFAULT '0' COMMENT '路由节点发生的城市',
`accept_date` varchar(200) NOT NULL DEFAULT '' COMMENT 'YYYY-MM-DD',
`accept_time` varchar(200) NOT NULL DEFAULT '0.00' COMMENT 'HH24:MM:SS',
`accept_totaltime` varchar(200) NOT NULL DEFAULT '0.00' COMMENT 'YYYY-MM-DD HH24:MM:SS',
`remark` varchar(255) NOT NULL DEFAULT '0.00' COMMENT '路由节点具体描述',
`opcode` varchar(200) NOT NULL DEFAULT '0.00' COMMENT '路由节点操作码',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
KEY `order_express_route_id_index` (`order_express_route_id`),
PRIMARY KEY (`mid`)
) ENGINE = InnoDB COMMENT '订单快递路由表';
drop TABLE if exists `kylin_order_refund_pic`; drop TABLE if exists `kylin_order_refund_pic`;
CREATE TABLE `kylin_order_refund_pic` CREATE TABLE `kylin_order_refund_pic`
( (
......
...@@ -7,13 +7,13 @@ import org.springframework.context.annotation.Configuration; ...@@ -7,13 +7,13 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
@Configuration @Configuration
public class KylinWebMvcConfig extends WebMvcConfig { public class PlatformWebMvcConfig extends WebMvcConfig {
@Autowired // @Autowired
GlobalAuthorityInterceptor globalAuthorityInterceptor; // GlobalAuthorityInterceptor globalAuthorityInterceptor;
//
@Override // @Override
protected void addInterceptors(InterceptorRegistry registry) { // protected void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor(globalAuthorityInterceptor).addPathPatterns("/**"); // registry.addInterceptor(globalAuthorityInterceptor).addPathPatterns("/**");
// super.addInterceptors(registry); // super.addInterceptors(registry);
} // }
} }
package com.liquidnet.service.platform.controller.express.shunfeng;
import com.liquidnet.service.platform.service.express.shunfeng.PerformancesExpressCallbackServiceImpl;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 演出快递 顺丰推送
* </p>
*
* @author jiangxiulong
* @since 2021-06-29
*/
@Api(tags = "前端-shunfengBack")
@RestController
@RequestMapping("performancesExpress")
public class PerformancesExpressCallbackController {
@Autowired
private PerformancesExpressCallbackServiceImpl performancesExpressServiceImpl;
/**
* 订单状态推送
*/
/**
* 路由推送
*/
/**
* 清单运费推送
*/
}
package com.liquidnet.service.platform.controller.refund;
import com.liquidnet.service.kylin.dto.param.RefundCallbackParam;
import com.liquidnet.service.platform.service.refund.OrderRefundsCallbackServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 退款回掉
* </p>
*
* @author jiangxiulong
* @since 2021-06-11 6:10 下午
*/
@Api(tags = "前端-退款回调")
@RestController
@RequestMapping("refund")
public class OrderRefundCallbackController {
@Autowired
private OrderRefundsCallbackServiceImpl orderRefundsCallbackServiceImpl;
@PostMapping("apply")
@ApiOperation("超时退款")
@ApiImplicitParams({
@ApiImplicitParam(type = "body", dataType = "String", name = "orderTicketsId", value = "订单ID", required = true),
})
public Boolean refundApply(@RequestParam() String orderTicketsId) {
try {
Boolean res = orderRefundsCallbackServiceImpl.refundApply(orderTicketsId);
if (res) {
return true;
} else {
return false;
}
} catch (Exception e) {
return false;
}
}
@PostMapping("callback")
@ApiOperation("退款回调")
public String refundCallback(RefundCallbackParam refundCallbackParam) {
String result = orderRefundsCallbackServiceImpl.refundCallback(refundCallbackParam);
return result;
}
}
package com.liquidnet.service.platform.service.express.shunfeng;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dto.param.PerformanceExpressSearchAdminParam;
import com.liquidnet.service.kylin.entity.KylinOrderExpress;
import com.liquidnet.service.kylin.entity.KylinOrderTickets;
import com.liquidnet.service.kylin.mapper.*;
import com.liquidnet.service.kylin.service.IKylinOrderExpress;
import com.liquidnet.service.platform.utils.ShunfengSignUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
/**
* <p>
* 演出 服务实现类
* </p>
*
* @author liquidnet
* @since 2021-05-05
*/
@Service
@Slf4j
public class PerformancesExpressCallbackServiceImpl extends ServiceImpl<KylinOrderExpressMapper, KylinOrderExpress> implements IKylinOrderExpress {
@Value("${liquidnet.shunfeng.custid}")
private String custid;
@Value("${liquidnet.shunfeng.jCompany}")
private String jCompany;
@Value("${liquidnet.shunfeng.jContact}")
private String jContact;
@Value("${liquidnet.shunfeng.jTel}")
private String jTel;
@Value("${liquidnet.shunfeng.jProvince}")
private String jProvince;
@Value("${liquidnet.shunfeng.jCity}")
private String jCity;
@Value("${liquidnet.shunfeng.jAddress}")
private String jAddress;
@Value("${liquidnet.shunfeng.expressType}")
private Integer expressType;
@Value("${liquidnet.shunfeng.depositumInfo}")
private String depositumInfo;
@Autowired
MongoTemplate mongoTemplate;
@Autowired
private ShunfengSignUtils shunfengSignUtils;
@Autowired
private KylinPerformancesMapper performancesMapper;
@Autowired
private KylinOrderTicketsMapper kylinOrderTicketsMapper;
@Autowired
private KylinOrderExpressMapper kylinOrderExpressMapper;
@Autowired
private KylinOrderExpressFeeInfoMapper kylinOrderExpressFeeInfoMapper;
public ResponseDto getFreight(PerformanceExpressSearchAdminParam performanceExpressSearchAdminParam) {
List<String> ids = performanceExpressSearchAdminParam.getIds();
Integer[] expressStatus = {KylinTableStatusConst.ORDER_EXPRESS_STATUS1, KylinTableStatusConst.ORDER_EXPRESS_STATUS3};
for (String orderTicketsId : ids) {
KylinOrderExpress orderExpressInfo = kylinOrderExpressMapper.selectOne(
new QueryWrapper<KylinOrderExpress>().eq("order_tickets_id", orderTicketsId)
.notIn("express_status", expressStatus)
);
KylinOrderTickets orderInfo = kylinOrderTicketsMapper.selectOne(
new QueryWrapper<KylinOrderTickets>().eq("order_tickets_id", orderTicketsId)
);
if (null != orderExpressInfo) {
HashMap<String, Object> hBody = new HashMap<>();
hBody.put("jProvince", jProvince);
hBody.put("jCity", jCity);
hBody.put("jAddress", jAddress);
hBody.put("dProvince", "北京市");
hBody.put("dCity", "北京城区");
hBody.put("dAddress", orderInfo.getExpressAddress());
hBody.put("expressType", expressType);
// hBody.put("parcelWeighs", 2.00);
// hBody.put("volume", "10,10,20");
// 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequest(hBody, "/public/order/v1/getFreight");
HashMap hashMap = JsonUtils.fromJson(result, HashMap.class);
System.out.println(result);
if (hashMap.get("succ").equals("fail")) {
String msg = (String) hashMap.get("msg");
return ResponseDto.failure(msg);
} else {
/*HashMap resultResult = (HashMap) hashMap.get("result");
List<HashMap> feeList = (List) resultResult.get("feeList");
if (!CollectionUtil.isEmpty(feeList)) {
for (HashMap feeInfo : feeList) {
KylinOrderExpressFeeInfo kylinOrderExpressFeeInfo = new KylinOrderExpressFeeInfo();
String orderExpressFeeInfoId = IDGenerator.nextSnowId();
kylinOrderExpressFeeInfo.setOrderExpressFeeInfoId(orderExpressFeeInfoId);
kylinOrderExpressFeeInfo.setOrderExpressId(orderExpressInfo.getOrderExpressId());
kylinOrderExpressFeeInfo.setType((String) feeInfo.get("type"));
kylinOrderExpressFeeInfo.setName((String) feeInfo.get("name"));
kylinOrderExpressFeeInfo.setValue(new BigDecimal(feeInfo.get("value").toString()));
kylinOrderExpressFeeInfo.setCreatedAt(DateUtil.getNowTime());
kylinOrderExpressFeeInfoMapper.insert(kylinOrderExpressFeeInfo);
}
}*/
}
}
}
return ResponseDto.success();
}
}
package com.liquidnet.service.platform.service.refund;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.liquidnet.common.mq.constant.MQConst;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dto.param.RefundCallbackParam;
import com.liquidnet.service.kylin.dto.vo.mongo.*;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.mapper.*;
import com.liquidnet.service.platform.utils.DataUtils;
import com.liquidnet.service.platform.utils.MongoVoUtils;
import com.mongodb.BasicDBObject;
import com.mongodb.client.model.FindOneAndUpdateOptions;
import com.mongodb.client.model.ReturnDocument;
import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.bson.Document;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 订单退款表 服务实现类 处理数据 退款后状态的变化
* </p>
*
* @author jiaangxiulong
* @since 2021-05-26
*/
@Slf4j
@Service
public class KylinRefundsStatusServiceImpl {
@Autowired
private KylinOrderTicketsMapper kylinOrderTicketsMapper;
@Autowired
private KylinOrderTicketStatusMapper kylinOrderTicketStatusMapper;
@Autowired
private KylinOrderRefundsMapper kylinOrderRefundsMapper;
@Autowired
private KylinOrderTicketEntitiesMapper kylinOrderTicketEntitiesMapper;
@Autowired
private KylinOrderRefundsEntitiesMapper kylinOrderRefundsEntitiesMapper;
@Autowired
private KylinOrderTicketRelationsMapper kylinOrderTicketRelationsMapper;
@Autowired
MongoTemplate mongoTemplate;
@Autowired
private MongoConverter mongoConverter;
@Autowired
private DataUtils dataUtils;
@Autowired
private MongoVoUtils mongoVoUtils;
@Autowired
private RabbitTemplate rabbitTemplate;
public boolean orderTicketRefunded(RefundCallbackParam refundCallbackParam, KylinOrderRefunds refundInfo) {
List<KylinOrderRefundEntities> refundEntities = kylinOrderRefundsEntitiesMapper.selectList(
new QueryWrapper<KylinOrderRefundEntities>().eq("order_refunds_id", refundInfo.getOrderRefundsId())
);
List<String> orderTicketEntitiesIdsArr = refundEntities.stream().map(KylinOrderTicketEntities -> KylinOrderTicketEntities.getOrderTicketEntitiesId()).collect(Collectors.toList());
String orderTicketsId = refundInfo.getOrderTicketsId();
KylinOrderTicketRelations orderRelations = kylinOrderTicketRelationsMapper.selectOne(
new QueryWrapper<KylinOrderTicketRelations>().eq("order_id", orderTicketsId)
);
// 更新数据
// 订单状态表
KylinOrderTickets orderInfo = kylinOrderTicketsMapper.selectOne(
new QueryWrapper<KylinOrderTickets>().eq("order_tickets_id", orderTicketsId)
);
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
int newStatus = 0;
if (refundCallbackParam.getRefund_price() + orderInfo.getPriceRefund().doubleValue() == orderInfo.getPriceActual().doubleValue()) {
newStatus = KylinTableStatusConst.ORDER_STATUS4;
} else {
newStatus = KylinTableStatusConst.ORDER_STATUS6;
}
orderStatusTable.setStatus(newStatus);
orderStatusTable.setUpdatedAt(LocalDateTime.now());
kylinOrderTicketStatusMapper.update(
orderStatusTable, new UpdateWrapper<KylinOrderTicketStatus>()
.eq("order_id", orderTicketsId)
);
// 入场人
double priceActual = orderInfo.getPriceActual().doubleValue();
double priceExpress = orderInfo.getPriceExpress().doubleValue();
int allEntitiesCount = kylinOrderTicketEntitiesMapper.selectCount(// 总入场人数量 排出未付款的 用来计算单入场人的价格
new QueryWrapper<KylinOrderTicketEntities>()
.eq("order_id", orderTicketsId)
.ne("is_payment", KylinTableStatusConst.ENTITIES_IS_PAYMENT0)
);
double onePrice = (priceActual - priceExpress) / allEntitiesCount;//单价
int refundNumber = 0;
for (String entitiesId : orderTicketEntitiesIdsArr) {
KylinOrderTicketEntities EntitiesInfo = kylinOrderTicketEntitiesMapper.selectOne(//已退完成的
new QueryWrapper<KylinOrderTicketEntities>()
.eq("order_ticket_entities_id", entitiesId)
);
BigDecimal refundedPrice = EntitiesInfo.getRefundPrice();
KylinOrderRefundEntities refundEntitiesInfo = kylinOrderRefundsEntitiesMapper.selectOne(
new QueryWrapper<KylinOrderRefundEntities>()
.eq("order_refunds_id", refundInfo.getOrderRefundsId())
.eq("order_ticket_entities_id", entitiesId)
);
KylinOrderTicketEntities entitiesTable = new KylinOrderTicketEntities();
double priceNew = refundEntitiesInfo.getRefundPrice().doubleValue() + refundedPrice.doubleValue();
int isPayment = 0;
if (priceNew == onePrice) {
isPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT3;
refundNumber++;
} else {
isPayment = KylinTableStatusConst.ENTITIES_IS_PAYMENT4;
}
entitiesTable.setIsPayment(isPayment);
entitiesTable.setUpdatedAt(LocalDateTime.now());
entitiesTable.setRefundPrice(BigDecimal.valueOf(priceNew));
Integer[] entitiesTableIsPayment = {KylinTableStatusConst.ENTITIES_IS_PAYMENT2, KylinTableStatusConst.ENTITIES_IS_PAYMENT4};
kylinOrderTicketEntitiesMapper.update(entitiesTable, new UpdateWrapper<KylinOrderTicketEntities>()
.eq("order_ticket_entities_id", entitiesId)
.in("is_payment", entitiesTableIsPayment)
);
HashMap<String, Object> EntitiesVo = new HashMap<>();
EntitiesVo.put("updatedAt", DateUtil.getNowTime());
EntitiesVo.put("refundPrice", BigDecimal.valueOf(priceNew));
EntitiesVo.put("isPayment", isPayment);
BasicDBObject EntitiesVov = new BasicDBObject("$set", mongoConverter.convertToMongoType(EntitiesVo));
UpdateResult updateResult = mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketEntitiesId").is(entitiesId)).getQueryObject(),
EntitiesVov
);
dataUtils.delOrderTicketEntitiesRedis(entitiesId);
}
// 订单表
double price = orderInfo.getPriceRefund().doubleValue() + refundCallbackParam.getRefund_price();
Integer num = orderInfo.getRefundNumber() + refundNumber;
KylinOrderTickets update = new KylinOrderTickets();
update.setRefundNumber(num);
update.setPriceRefund(BigDecimal.valueOf(price));
update.setUpdatedAt(LocalDateTime.now());
kylinOrderTicketsMapper.update(
update, new UpdateWrapper<KylinOrderTickets>()
.eq("order_tickets_id", orderTicketsId)
);
HashMap<String, Object> orderVo = new HashMap<>();
orderVo.put("updatedAt", DateUtil.getNowTime());
orderVo.put("priceRefund", BigDecimal.valueOf(price));
orderVo.put("status", newStatus);
orderVo.put("refundNumber", num);
BasicDBObject orderVov = new BasicDBObject("$set", mongoConverter.convertToMongoType(orderVo));
UpdateResult orderUpdateResult = mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketsId").is(orderTicketsId)).getQueryObject(),
orderVov
);
dataUtils.delOrderTicketRedis(orderTicketsId);
mongoVoUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderTicketsId, null);
// 退款单完成
KylinOrderRefunds kylinOrderRefunds = new KylinOrderRefunds();
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_REFUNDED);
kylinOrderRefunds.setRefundCode(refundCallbackParam.getRefund_code());
kylinOrderRefunds.setRefundType(refundCallbackParam.getRefund_type());
kylinOrderRefunds.setRefundId(refundCallbackParam.getRefund_id());
kylinOrderRefunds.setRefundAt(refundCallbackParam.getRefund_at());
kylinOrderRefunds.setUpdatedAt(LocalDateTime.now());
kylinOrderRefundsMapper.update(
kylinOrderRefunds,
new UpdateWrapper<KylinOrderRefunds>().in("order_refunds_id", refundInfo.getOrderRefundsId())
);
if (refundInfo.getType() == KylinTableStatusConst.ORDER_REFUND_TYPE_APPLY) {
// 退还库存
for (String entitiesId : orderTicketEntitiesIdsArr) {
KylinOrderTicketEntities entitiesInfo = kylinOrderTicketEntitiesMapper.selectOne(
new QueryWrapper<KylinOrderTicketEntities>().eq("order_ticket_entities_id", entitiesId)
);
if (entitiesInfo.getIsPayment() == KylinTableStatusConst.ENTITIES_IS_PAYMENT3) {
dataUtils.changeSurplusGeneral(entitiesInfo.getTicketId(), 1);
log.info(UserPathDto.setData("changeBuyInfo", "UserId=" + orderInfo.getUserId() + "idCard=" + entitiesInfo.getEnterIdCode() + " PerformanceId=" + orderRelations.getPerformanceId() + " TicketId=" + entitiesInfo.getTicketId(), "info"));
dataUtils.changeBuyInfo(orderInfo.getUserId(), entitiesInfo.getEnterIdCode(), orderRelations.getPerformanceId(), entitiesInfo.getTicketId(), -1);
}
}
}
return true;
}
public Boolean orderTicketRefunding(
KylinOrderTickets orderInfo, String orderTicketsId,
double RefundPriceExpress,
List<String> ticketEntityIds, List<Double> entitiesPrice
) {
if (CollectionUtil.isEmpty(ticketEntityIds)) {
return false;
}
// 基础数据
String authId = "";
String authName = "system_overtime_order_refund";
String reason = "订单支付超时自动退款";
// 本次退款票总金额
double entitiesPriceSum = entitiesPrice.stream().mapToDouble(Double::doubleValue).sum();
// TODO: 2021/5/27 事物 and 部分退款
// 更新数据
// 订单状态表 和 缓存
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
orderStatusTable.setStatus(KylinTableStatusConst.ORDER_STATUS3);
kylinOrderTicketStatusMapper.update(orderStatusTable, new UpdateWrapper<KylinOrderTicketStatus>()
.eq("order_id", orderTicketsId));
KylinOrderTicketVo kylinOrderTicketVo = new KylinOrderTicketVo();
kylinOrderTicketVo.setStatus(KylinTableStatusConst.ORDER_STATUS3);
BasicDBObject orderObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketVo)));
Document orderDoc = mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).findOneAndUpdate(
Query.query(Criteria.where("orderTicketsId").is(orderTicketsId)).getQueryObject(),
orderObject,
new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)
);
dataUtils.delOrderTicketRedis(orderTicketsId);
mongoVoUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderTicketsId, null);
// 订单入场人表 和 缓存
for (String v : ticketEntityIds) {
KylinOrderTicketEntities entitiesTable = new KylinOrderTicketEntities();
entitiesTable.setIsPayment(KylinTableStatusConst.ENTITIES_IS_PAYMENT2);
kylinOrderTicketEntitiesMapper.update(entitiesTable, new UpdateWrapper<KylinOrderTicketEntities>()
.eq("order_ticket_entities_id", v));
KylinOrderTicketEntitiesVo kylinOrderTicketEntitiesVo = new KylinOrderTicketEntitiesVo();
kylinOrderTicketEntitiesVo.setIsPayment(KylinTableStatusConst.ENTITIES_IS_PAYMENT2);
BasicDBObject entitiesObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketEntitiesVo)));
Document entitiesDoc = mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).findOneAndUpdate(
Query.query(Criteria.where("orderTicketEntitiesId").is(v)).getQueryObject(),
entitiesObject,
new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)
);
dataUtils.delOrderTicketEntitiesRedis(v);
}
// 退款明细
KylinOrderRefunds kylinOrderRefunds = new KylinOrderRefunds();
String orderRefundsId = IDGenerator.nextSnowId();
kylinOrderRefunds.setOrderRefundsId(orderRefundsId);
kylinOrderRefunds.setOrderTicketsId(orderTicketsId);
Integer refundCount = kylinOrderRefundsMapper.selectCount(
new QueryWrapper<KylinOrderRefunds>()
.eq("order_tickets_id", orderTicketsId)
);
String orderRefundCode = orderInfo.getOrderCode();
String codeNum = StringUtils.leftPad(String.valueOf(refundCount), 3, "0");
kylinOrderRefunds.setOrderRefundCode(orderRefundCode.concat(codeNum));
kylinOrderRefunds.setPrice(BigDecimal.valueOf(entitiesPriceSum));
kylinOrderRefunds.setPriceExpress(BigDecimal.valueOf(RefundPriceExpress));
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY);
kylinOrderRefunds.setType(KylinTableStatusConst.ORDER_REFUND_TYPE_APPLY);
kylinOrderRefunds.setApplicantId(authId);
kylinOrderRefunds.setApplicantName(authName);
kylinOrderRefunds.setApplicantAt(LocalDateTime.now());
kylinOrderRefunds.setType(1);
kylinOrderRefunds.setReason(reason);
if (RefundPriceExpress > 0 && entitiesPriceSum > 0) {
kylinOrderRefunds.setRefundCate(KylinTableStatusConst.ORDER_REFUND_CATE3);
} else if (RefundPriceExpress > 0) {
kylinOrderRefunds.setRefundCate(KylinTableStatusConst.ORDER_REFUND_CATE2);
} else if (entitiesPriceSum > 0) {
kylinOrderRefunds.setRefundCate(KylinTableStatusConst.ORDER_REFUND_CATE1);
}
kylinOrderRefunds.setCreatedAt(LocalDateTime.now());
int rows = kylinOrderRefundsMapper.insert(kylinOrderRefunds);
// 退款入场人表
KylinOrderRefundEntities kylinOrderRefundEntities = new KylinOrderRefundEntities();
for (int i = 0; i <= ticketEntityIds.size() - 1; i++) {
String orderRefundsEntitiesId = IDGenerator.nextSnowId();
kylinOrderRefundEntities.setOrderRefundsEntitiesId(orderRefundsEntitiesId);
kylinOrderRefundEntities.setOrderRefundsId(orderRefundsId);
kylinOrderRefundEntities.setRefundPrice(BigDecimal.valueOf(entitiesPrice.get(i)));
kylinOrderRefundEntities.setOrderTicketEntitiesId(ticketEntityIds.get(i));
kylinOrderRefundEntities.setCreatedAt(LocalDateTime.now());
int rowsR = kylinOrderRefundsEntitiesMapper.insert(kylinOrderRefundEntities);
}
return true;
}
public Boolean userOrderTicketRefunding(
KylinOrderTicketVo orderInfo,
double refundPrice,
String orderEntitiesId,
String reason,
String picList,
String uid,
String username,
int refundCount
) {
try {
LocalDateTime time = LocalDateTime.now();
String strTime = DateUtil.Formatter.yyyyMMddHHmmss.format(time);
// 订单状态表 和 缓存
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
orderStatusTable.setStatus(KylinTableStatusConst.ORDER_STATUS3);
orderStatusTable.setUpdatedAt(time);
KylinOrderTicketVo kylinOrderTicketVo = new KylinOrderTicketVo();
kylinOrderTicketVo.setStatus(KylinTableStatusConst.ORDER_STATUS3);
kylinOrderTicketVo.setUpdatedAt(DateUtil.Formatter.yyyyMMddHHmmss.format(time));
BasicDBObject orderObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketVo)));
mongoTemplate.getCollection(KylinOrderTicketVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketsId").is(orderInfo.getOrderTicketsId())).getQueryObject(),
orderObject
);
dataUtils.delOrderTicketRedis(orderInfo.getOrderTicketsId());
mongoVoUtils.resetOrderListVo(orderInfo.getUserId(), 2, orderInfo.getOrderTicketsId(), null);
// 订单入场人表 和 缓存
KylinOrderTicketEntities entitiesTable = new KylinOrderTicketEntities();
entitiesTable.setIsPayment(KylinTableStatusConst.ENTITIES_IS_PAYMENT2);
entitiesTable.setUpdatedAt(time);
KylinOrderTicketEntitiesVo kylinOrderTicketEntitiesVo = new KylinOrderTicketEntitiesVo();
kylinOrderTicketEntitiesVo.setIsPayment(KylinTableStatusConst.ENTITIES_IS_PAYMENT2);
kylinOrderTicketEntitiesVo.setUpdatedAt(strTime);
BasicDBObject entitiesObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(kylinOrderTicketEntitiesVo)));
mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderTicketEntitiesId").is(orderEntitiesId)).getQueryObject(),
entitiesObject
);
dataUtils.delOrderTicketEntitiesRedis(orderEntitiesId);
// 退款明细
KylinOrderRefunds kylinOrderRefunds = new KylinOrderRefunds();
String orderRefundsId = IDGenerator.nextSnowId();
kylinOrderRefunds.setOrderRefundsId(orderRefundsId);
kylinOrderRefunds.setOrderTicketsId(orderInfo.getOrderTicketsId());
String orderRefundCode = orderInfo.getOrderCode();
String codeNum = StringUtils.leftPad(String.valueOf(refundCount), 3, "0");
kylinOrderRefunds.setOrderRefundCode(orderRefundCode.concat(codeNum));
kylinOrderRefunds.setPrice(BigDecimal.valueOf(refundPrice));
kylinOrderRefunds.setPriceExpress(orderInfo.getPriceExpress());
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY);
kylinOrderRefunds.setType(KylinTableStatusConst.ORDER_REFUND_TYPE_APPLY);
kylinOrderRefunds.setApplicantId(uid);
kylinOrderRefunds.setApplicantName(username);
kylinOrderRefunds.setApplicantAt(time);
kylinOrderRefunds.setReason(reason);
if (orderInfo.getPriceExpress().doubleValue() > 0 && refundPrice > 0) {
kylinOrderRefunds.setRefundCate(KylinTableStatusConst.ORDER_REFUND_CATE3);
} else if (orderInfo.getPriceExpress().doubleValue() > 0) {
kylinOrderRefunds.setRefundCate(KylinTableStatusConst.ORDER_REFUND_CATE2);
} else if (refundPrice > 0) {
kylinOrderRefunds.setRefundCate(KylinTableStatusConst.ORDER_REFUND_CATE1);
}
kylinOrderRefunds.setCreatedAt(time);
KylinOrderRefundsVoBase orderRefundsVo = new KylinOrderRefundsVoBase();
BeanUtils.copyProperties(kylinOrderRefunds,orderRefundsVo);
orderRefundsVo.setCreatedAt(strTime);
orderRefundsVo.setApplicantAt(strTime);
mongoTemplate.insert(orderRefundsVo, KylinOrderRefundsVoBase.class.getSimpleName());
// 退款入场人表
KylinOrderRefundEntities kylinOrderRefundEntities = new KylinOrderRefundEntities();
String orderRefundsEntitiesId = IDGenerator.nextSnowId();
kylinOrderRefundEntities.setOrderRefundsEntitiesId(orderRefundsEntitiesId);
kylinOrderRefundEntities.setOrderRefundsId(orderRefundsId);
kylinOrderRefundEntities.setRefundPrice(BigDecimal.valueOf(refundPrice));
kylinOrderRefundEntities.setOrderTicketEntitiesId(orderEntitiesId);
kylinOrderRefundEntities.setCreatedAt(time);
KylinOrderRefundEntitiesVo orderRefundEntitiesVo = new KylinOrderRefundEntitiesVo();
BeanUtils.copyProperties(kylinOrderRefundEntities,orderRefundEntitiesVo);
orderRefundEntitiesVo.setCreatedAt(strTime);
mongoTemplate.insert(orderRefundEntitiesVo,KylinOrderRefundEntitiesVo.class.getSimpleName());
//退款图片
KylinOrderRefundPic orderRefundPic = new KylinOrderRefundPic();
orderRefundPic.setRefundPicId(IDGenerator.nextSnowId());
orderRefundPic.setOrderRefundsId(kylinOrderRefunds.getOrderRefundsId());
orderRefundPic.setPicUrl(picList);
orderRefundPic.setCreatedAt(time);
KylinOrderRefundPicVo orderRefundPicVo = new KylinOrderRefundPicVo();
BeanUtils.copyProperties(orderRefundPic,orderRefundPicVo);
orderRefundPicVo.setCreatedAt(strTime);
mongoTemplate.insert(orderRefundPicVo,KylinOrderRefundPicVo.class.getSimpleName());
dataUtils.delOrderRefundVoByOrderId(orderInfo.getOrderTicketsId());
//MQ
LinkedList<String> sqls = new LinkedList<>();
LinkedList<Object[]> sqlsDataA = new LinkedList<>();
LinkedList<Object[]> sqlsDataB = new LinkedList<>();
LinkedList<Object[]> sqlsDataC = new LinkedList<>();
LinkedList<Object[]> sqlsDataD = new LinkedList<>();
LinkedList <Object[]> sqlsDataE = new LinkedList<>();
sqls.add(SqlMapping.get("kylin_order_ticket_status.refund"));
sqls.add(SqlMapping.get("kylin_order_ticket_entities.refund"));
sqls.add(SqlMapping.get("kylin_order_refund.refund"));
sqls.add(SqlMapping.get("kylin_order_refund_entities.refund"));
sqls.add(SqlMapping.get("kylin_order_refund_pic.refund"));
sqlsDataA.add(new Object[]{
orderStatusTable.getStatus(), orderStatusTable.getUpdatedAt(), orderInfo.getOrderTicketsId(), orderInfo.getChangeDate(), orderInfo.getChangeDate()
});
sqlsDataB.add(new Object[]{
entitiesTable.getIsPayment(), entitiesTable.getUpdatedAt(), orderEntitiesId, orderInfo.getChangeDate(), orderInfo.getChangeDate()
});
sqlsDataC.add(new Object[]{
kylinOrderRefunds.getOrderRefundsId(), kylinOrderRefunds.getOrderTicketsId(), kylinOrderRefunds.getOrderRefundCode(),
kylinOrderRefunds.getPrice(), kylinOrderRefunds.getPriceExpress(), kylinOrderRefunds.getStatus(),
kylinOrderRefunds.getType(), kylinOrderRefunds.getApplicantId(), kylinOrderRefunds.getApplicantName(),
kylinOrderRefunds.getApplicantAt(), kylinOrderRefunds.getReason(),
kylinOrderRefunds.getRefundCate(), kylinOrderRefunds.getCreatedAt()
});
sqlsDataD.add(new Object[]{
kylinOrderRefundEntities.getOrderRefundsEntitiesId(), kylinOrderRefundEntities.getOrderRefundsId(), kylinOrderRefundEntities.getRefundPrice(),
kylinOrderRefundEntities.getOrderTicketEntitiesId(), kylinOrderRefundEntities.getCreatedAt()
});
sqlsDataE.add(new Object[]{
orderRefundPic.getOrderRefundsId(), orderRefundPic.getOrderRefundsId(), orderRefundPic.getPicUrl(), orderRefundPic.getCreatedAt()
});
//TODO 生成新QUERY
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL_ORDER_REFUND, MQConst.ROUTING_KEY_SQL_ORDER_REFUND,
SqlMapping.gets(sqls, sqlsDataA, sqlsDataB, sqlsDataC, sqlsDataD, sqlsDataE));
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
}
package com.liquidnet.service.platform.service.refund;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dao.KylinOrderTicketEntitiesDao;
import com.liquidnet.service.kylin.dto.param.RefundCallbackParam;
import com.liquidnet.service.kylin.entity.KylinOrderRefunds;
import com.liquidnet.service.kylin.entity.KylinOrderTicketEntities;
import com.liquidnet.service.kylin.entity.KylinOrderTicketRelations;
import com.liquidnet.service.kylin.entity.KylinOrderTickets;
import com.liquidnet.service.kylin.mapper.*;
import com.liquidnet.service.kylin.service.IKylinOrderRefundsService;
import com.liquidnet.service.platform.utils.DataUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 订单退款表 服务实现类 处理逻辑判断
* </p>
*
* @author jiangxiulong
* @since 2021-05-26
*/
@Slf4j
@Service
public class OrderRefundsCallbackServiceImpl extends ServiceImpl<KylinOrderRefundsMapper, KylinOrderRefunds> implements IKylinOrderRefundsService {
@Autowired
private KylinRefundsStatusServiceImpl kylinRefundsStatusServiceImpl;
@Autowired
private KylinOrderRefundsMapper kylinOrderRefundsMapper;
@Autowired
private KylinOrderTicketsMapper kylinOrderTicketsMapper;
@Autowired
private KylinOrderTicketEntitiesMapper kylinOrderTicketEntitiesMapper;
@Autowired
private KylinOrderTicketRelationsMapper kylinOrderTicketRelationsMapper;
@Autowired
MongoTemplate mongoTemplate;
@Autowired
private DataUtils dataUtils;
public String refundCallback(RefundCallbackParam refundCallbackParam) {
KylinOrderRefunds refundInfo = kylinOrderRefundsMapper.selectOne(
new UpdateWrapper<KylinOrderRefunds>()
.eq("order_refund_code", refundCallbackParam.getOrder_refund_code())
);
if (refundInfo == null) {
log.info("Failed:{}.RefundController refundCallback: 退款订单查询失败,编号{}", "KylinOrderRefundsServiceImplRefundCallback", refundCallbackParam.getOrder_refund_code());
return "fail";
}
if (refundInfo.getStatus() == KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL) {
log.info("Failed:{}.RefundController refundCallback: 退款订单已取消,编号{}", "KylinOrderRefundsServiceImplRefundCallback", refundCallbackParam.getOrder_refund_code());
return "fail";
}
if (refundInfo.getStatus() == KylinTableStatusConst.ORDER_REFUND_STATUS_REFUNDED) {
log.info("Failed:{}.RefundController refundCallback: 退款订单已退款,编号{}", "KylinOrderRefundsServiceImplRefundCallback", refundCallbackParam.getOrder_refund_code());
return "success";
}
Integer status = refundCallbackParam.getStatus();
if (1 == status) { // 退款成功
boolean res = kylinRefundsStatusServiceImpl.orderTicketRefunded(refundCallbackParam, refundInfo);
if (res) {
return "success";
} else {
return "fail";
}
}
if (0 == status) { // 退款失败
KylinOrderRefunds kylinOrderRefunds = new KylinOrderRefunds();
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_ERROR);
kylinOrderRefunds.setRefundCode(refundCallbackParam.getRefund_code());
kylinOrderRefunds.setRefundType(refundCallbackParam.getRefund_type());
kylinOrderRefunds.setRefundId(refundCallbackParam.getRefund_id());
kylinOrderRefunds.setRefundAt(refundCallbackParam.getRefund_at());
kylinOrderRefunds.setRefundError(refundCallbackParam.getRefund_error());
kylinOrderRefunds.setUpdatedAt(LocalDateTime.now());
kylinOrderRefundsMapper.update(
kylinOrderRefunds,
new UpdateWrapper<KylinOrderRefunds>().eq("order_refund_code", refundCallbackParam.getOrder_refund_code())
);
}
return "success";
}
public Boolean refundApply(String orderTicketsId) {
KylinOrderTickets orderInfo = kylinOrderTicketsMapper.selectOne(
new QueryWrapper<KylinOrderTickets>().eq("order_tickets_id", orderTicketsId)
);
KylinOrderTicketRelations orderRelations = kylinOrderTicketRelationsMapper.selectOne(
new QueryWrapper<KylinOrderTicketRelations>().eq("order_id", orderTicketsId)
);
// 传的快递费不能大于实际的快递费=(支付的快递费-已退的快递费)
Double refundPriceExpressSum = kylinOrderRefundsMapper.RefundPriceExpressSum(// 已退快递费
orderTicketsId,
KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL
);
if (null == refundPriceExpressSum) {
refundPriceExpressSum = 0.0;
}
Double RefundPriceExpress = orderInfo.getPriceExpress().doubleValue() - refundPriceExpressSum;
// 查询订单入场人
List<KylinOrderTicketEntitiesDao> entitiesListTemp = kylinOrderTicketEntitiesMapper.getOvertimeRefundEntitiesList(orderTicketsId);
List<KylinOrderTicketEntitiesDao> entitiesList = new ArrayList<>();
if(entitiesListTemp.size() > 0) {
double priceActual = orderInfo.getPriceActual().doubleValue();
double priceExpress = orderInfo.getPriceExpress().doubleValue();
int allEntitiesCount = kylinOrderTicketEntitiesMapper.selectCount(// 总入场人数量 排出未付款的 用来计算单入场人的价格
new QueryWrapper<KylinOrderTicketEntities>()
.eq("order_id", orderInfo.getOrderTicketsId())
// .ne("is_payment", KylinTableStatusConst.ENTITIES_IS_PAYMENT0)
);
double onePrice = (priceActual - priceExpress) / allEntitiesCount;//单价
for (KylinOrderTicketEntitiesDao entities : entitiesListTemp) {
Double refundedPrice = kylinOrderTicketEntitiesMapper.getRefundEntitiesPrice(//已退 包含退款中
orderInfo.getOrderTicketsId(),
KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL,
entities.getOrderTicketEntitiesId()
);
double canRefundedPrice;
if (null != refundedPrice) {
canRefundedPrice = onePrice - refundedPrice;
} else {
canRefundedPrice = onePrice;
}
entities.setCanRefundedPrice(BigDecimal.valueOf(canRefundedPrice));
if (canRefundedPrice > 0) { // 退款中但是可退款金额为0不展示
entitiesList.add(entities);
}
}
}
List<String> ticketEntityIds = entitiesList.stream().map(KylinOrderTicketEntities -> KylinOrderTicketEntities.getOrderTicketEntitiesId()).collect(Collectors.toList());
List<Double> entitiesPrice = entitiesList.stream().map(KylinOrderTicketEntities -> KylinOrderTicketEntities.getCanRefundedPrice().doubleValue()).collect(Collectors.toList());
boolean res = kylinRefundsStatusServiceImpl.orderTicketRefunding(
orderInfo, orderTicketsId,
RefundPriceExpress,
ticketEntityIds, entitiesPrice
);
if (res) {
// 超时直接退还库存
for (String entitiesId : ticketEntityIds) {
KylinOrderTicketEntities entitiesInfo = kylinOrderTicketEntitiesMapper.selectOne(
new QueryWrapper<KylinOrderTicketEntities>().eq("order_ticket_entities_id", entitiesId)
);
if (entitiesInfo.getIsPayment() == KylinTableStatusConst.ENTITIES_IS_PAYMENT3) {
dataUtils.changeSurplusGeneral(entitiesInfo.getTicketId(), 1);
dataUtils.changeBuyInfo(orderInfo.getUserId(), entitiesInfo.getEnterIdCode(), orderRelations.getPerformanceId(), entitiesInfo.getTicketId(), -1);
}
}
return true;
} else {
return false;
}
}
}
package com.liquidnet.service.platform.utils;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.UserPathDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
/**
* <p>
* 顺丰
* </p>
*
* @author jiangxiulong
* @since 2021-06-24 8:00 下午
*/
@Component
@Slf4j
public class ShunfengSignUtils {
/**
* appId
*/
@Value("${liquidnet.shunfeng.appid}")
private String APP_ID;
/**
* sk
*/
@Value("${liquidnet.shunfeng.sk}")
private String SK;
/**
* url
*/
@Value("${liquidnet.shunfeng.url}")
private String URL;
/**
* 签名有效期(可根据实际业务设定)单位:毫秒
*/
private final static Long CHECK_TIME = 600000L;
/**
* 生成签名并请求
* @param hbody 请求body
* @return
*/
public String generateSignatureAndRequest(HashMap<String, Object> hbody, String url) {
long currentTimeMillis = System.currentTimeMillis(); // 时间戳
String timestamp = currentTimeMillis + "";
hbody.put("companyId", APP_ID);
String body = JsonUtils.toJson(hbody);
// 生成签名
String sign = genSign(timestamp,body);
CloseableHttpClient client = HttpClients.createDefault();
// 请求下单地址
HttpPost httpPost = new HttpPost(URL + url);
// sendAppId(sendAppId需赋值appId)
httpPost.addHeader("sendAppId", APP_ID);
// 时间戳需和获取验签时一致!!!
httpPost.addHeader("timestamp", timestamp);
// 签名
httpPost.addHeader("sign", sign);
httpPost.addHeader("Content-Type", "application/json;charset=utf-8");
httpPost.addHeader("Accept", "application/json");
// 请求body体需和获取验签时一致且编码UTF8!!!
httpPost.setEntity(new StringEntity(body, "utf-8"));
CloseableHttpResponse response = null;
log.info(UserPathDto.setData("header", "", httpPost.getAllHeaders()));
log.info(UserPathDto.setData("body", "", body));
try {
response = client.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
System.out.println("发送请求成功");
HttpEntity entity = response.getEntity();
// 发送响应且编码UTF8!!!
return EntityUtils.toString(entity, "utf-8");
}
} catch (Exception e) {
System.out.println("发送请求失败");
e.printStackTrace();
} finally {
if (client != null) {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (response != null) {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
/**
* 生成签名
* @param timestamp 时间戳
* @param body 请求body
* @return
*/
private String genSign(String timestamp, String body) {
if (StringUtils.isEmpty(body)) {
body = "";
}
StringBuffer sb = new StringBuffer();
sb.append(body);
sb.append("&sk=").append(SK);
sb.append("&timestamp=").append(timestamp);
byte[] bytes = DigestUtils.sha512(sb.toString());
return Base64.encodeBase64URLSafeString(bytes);
}
/**
* 接收请求且验签(可在控制层调用此方法)
* @param params 接收请求参数
* @param request 接收请求
* @return
*/
public boolean receiveRequestAndCheckSign(String params, HttpServletRequest request) {
// 请求方APPID
String sendAppId = request.getHeader("sendAppId");
// 请求方时间戳
String timestamp = request.getHeader("timestamp");
// 请求方签名
String sign = request.getHeader("sign");
if (StringUtils.isBlank(sendAppId)) {
System.out.println("参数sendAppId不能为空");
return false;
}
if (StringUtils.isBlank(timestamp)) {
System.out.println("参数timestamp不能为空");
return false;
}
if (StringUtils.isBlank(sign)) {
System.out.println("参数sign不能为空");
return false;
}
// 校验签名是否过期
long requestTime = Long.parseLong(timestamp);
long now = System.currentTimeMillis();
if (Math.abs(now - requestTime) > CHECK_TIME) {
System.out.println("签名过期!");
return false;
}
// 请求方参数+请求方时间戳+SK 生成签名
String thisSign = genSign(timestamp, params);
// 获取的签名和请求方签名比较是否一致
if (!thisSign.equals(sign)) {
System.out.println("签名错误");
return false;
}
return true;
}
}
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