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

Commit 92a9889c authored by jiangxiulong's avatar jiangxiulong

Merge branch 'jxl_1214_refund' into dev_merchant

# Conflicts:
#	liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/constant/KylinRedisConst.java
#	liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/dto/vo/mongo/KylinPerformanceVo.java
#	liquidnet-bus-api/liquidnet-service-kylin-api/src/main/java/com/liquidnet/service/kylin/service/admin/IKylinPerformancesAdminService.java
#	liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/kylin/KylinExpressModuleController.java
#	liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/kylin/KylinPerformancesController.java
#	liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/kylin/service/impl/KylinPerformancesAdminServiceImpl.java
#	liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/kylin/utils/DataUtils.java
#	liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/entity/KylinExpressModule.java
#	liquidnet-bus-do/liquidnet-service-kylin-do/src/main/java/com/liquidnet/service/kylin/mapper/KylinExpressModuleMapper.java
#	liquidnet-bus-service/liquidnet-service-executor-all/liquidnet-service-executor-main/src/main/java/com/liquidnet/service/executor/main/handler/PlatformTaskHandler.java
#	liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/docu/db_kylin_20211115_express_refund.sql
#	liquidnet-bus-service/liquidnet-service-kylin/liquidnet-service-kylin-impl/src/main/java/com/liquidnet/service/kylin/controller/KylinExpressModuleController.java
parents 9b57a921 bae6ea6c
......@@ -44,6 +44,7 @@ public class KylinRedisConst {
// 手续费
public static final String ORDER_REFUND_POUNDAGE = "kylin:order:poundage";
public static final String ORDER_REFUND_POUNDAGE_EXPLAIN = "kylin:order:poundageExplain";
public static final String REDIS_KEY_KYLIN_REFUND_LOCK = "kylin:order:refund:lock:entitiesId:";
public static final String USERID_BUY_INFO = "kylin:buy:userId:";
public static final String IDCARD_BUY_INFO = "kylin:buy:idCard:";
......
......@@ -63,6 +63,9 @@ public class KylinOrderRefundsAdminVo implements Serializable,Cloneable {
@ApiModelProperty(value = "退款扣除的手续费金额")
private BigDecimal priceCharges;
@ApiModelProperty(value = "纸质票号")
private String ticketNum;
@ApiModelProperty(value = "退款状态: 0请求退款 2取消退款 1审核通过 5驳回退款 7等待退款 3正在退款 4完成退款 6退款失败")
private Integer status;
......
......@@ -64,6 +64,9 @@ public class KylinOrderRefundsVo implements Serializable,Cloneable {
@ApiModelProperty(value = "退款扣除的手续费金额")
private BigDecimal priceCharges;
@ApiModelProperty(value = "纸质票号")
private String ticketNum;
@ApiModelProperty(value = "退款状态: 0请求退款 2取消退款 1审核通过 5驳回退款 7等待退款 3正在退款 4完成退款 6退款失败")
private Integer status;
......
......@@ -82,12 +82,17 @@ public class KylinOrderTicketPreVo implements Serializable, Cloneable {
private String useStart;
@ApiModelProperty(value = "演出图片")
private String performanceImg;
@ApiModelProperty(value = "是否开启退款手续费 0关闭 1开启")
@ApiModelProperty(value = "用户退款是否开启手续费 0关闭不需要手续费 1开启需要手续费")
private Integer isRefundPoundage;
@ApiModelProperty(value = "是否开启是否退优惠券 0关闭 1开启")
private Integer isRefundVoucher;
@ApiModelProperty(value = "isRefundExpress 1用户承担 0无")
@ApiModelProperty(value = "用户退款快递票是否需要自己支付快递费 1用户承担寄付 0公司月结")
private Integer isRefundExpress;
@ApiModelProperty(value = "用户退款快递票是否需要归还纸质演出票 1需要 0不需要")
private Integer isBackPaperTicket;
// 是否退优惠卷(这个是前后台通用的配置 其他都是针对用户自己退款的)
@ApiModelProperty(value = "退款是否退优惠券 0关闭不退 1开启退")
private Integer isRefundVoucher;
@ApiModelProperty(value = "手续费规则列表")
private OrderRefundPoundageAll refundPoundageAll;
......
......@@ -34,9 +34,6 @@ public class ZhengzaiAppVersionController extends BaseController {
@Value("${liquidnet.client.admin.platformUrl}")
private String platformUrl;
@Value("${liquidnet.al-oss.appUrl}")
private String appUrl;
private String prefix = "zhengzai/kylin/zhengzaiAppVersion";
@Autowired
......
......@@ -20,7 +20,7 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">开启退款:</label>
<label class="col-sm-3 control-label is-required">用户申请退款:</label>
<div class="col-sm-8" th:if="*{isCanRefund==1}">
<div class="radio check-box">
<input type="radio" value="1" name="performance_isCanRefund" checked>开启</label>
......@@ -38,8 +38,18 @@
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">用户申请退款定时: </label>
<input th:field="${performanceRefundConfigVo.refundOpenTime}" type="text" style="width: 200px;float: left"
class="form-control" id="startTime" placeholder="开始时间选择" name="refundOpenTime"
required/>
<span class="control-label" style="float: left;margin-left: 10px;margin-right: 10px"></span>
<input th:field="${performanceRefundConfigVo.refundCloseTime}" type="text" style="width: 200px;float: left"
class="form-control" id="endTime" placeholder="结束时间选择" name="refundCloseTime"
required/>
</div>
<div class="form-group" >
<label class="col-sm-3 control-label is-required">手续费:</label>
<label class="col-sm-3 control-label is-required">用户退款手续费:</label>
<div class="col-sm-8" th:if="*{isRefundPoundage==1}">
<div class="radio check-box">
<input type="radio" value="1" name="performance_isRefundPoundage" checked>开启</label>
......@@ -58,40 +68,51 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">退优惠券</label>
<div class="col-sm-8" th:if="*{isRefundVoucher==1}">
<label class="col-sm-3 control-label is-required">用户退款快递票快递费</label>
<div class="col-sm-8" th:if="*{isRefundExpress==1}">
<div class="radio check-box">
<input type="radio" value="1" name="performance_isRefundVoucher" checked>开启</label>
<input type="radio" value="1" name="performance_isRefundExpress" checked>用户承担</label>
</div>
<div class="radio check-box">
<input type="radio" value="0" name="performance_isRefundVoucher">关闭</label>
<input type="radio" value="0" name="performance_isRefundExpress">公司月结</label>
</div>
</div>
<div class="col-sm-8" th:if="*{isRefundVoucher==0}">
<div class="col-sm-8" th:if="*{isRefundExpress==0}">
<div class="radio check-box">
<input type="radio" value="1" name="performance_isRefundVoucher">开启</label>
<input type="radio" value="1" name="performance_isRefundExpress">用户承担</label>
</div>
<div class="radio check-box">
<input type="radio" value="0" name="performance_isRefundVoucher" checked> 关闭</label>
<input type="radio" value="0" name="performance_isRefundExpress" checked>公司月结</label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">快递费</label>
<div class="col-sm-8" th:if="*{isRefundExpress==1}">
<label class="col-sm-3 control-label is-required">用户退款快递票是否需要退回</label>
<div class="col-sm-8">
<div class="radio check-box">
<input type="radio" value="1" name="performance_isRefundExpress" checked>用户承担</label>
<input type="radio" value="0" name="isBackPaperTicket" th:checked="*{isBackPaperTicket==0 ? true : false}" checked> 不需要</label>
</div>
<div class="radio check-box">
<input type="radio" value="1" name="isBackPaperTicket" th:checked="*{isBackPaperTicket==1 ? true : false}">需要</label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">退款是否退优惠券:</label>
<div class="col-sm-8" th:if="*{isRefundVoucher==1}">
<div class="radio check-box">
<input type="radio" value="1" name="performance_isRefundVoucher" checked>开启</label>
</div>
<div class="radio check-box">
<input type="radio" value="0" name="performance_isRefundExpress"></label>
<input type="radio" value="0" name="performance_isRefundVoucher">关闭</label>
</div>
</div>
<div class="col-sm-8" th:if="*{isRefundExpress==0}">
<div class="col-sm-8" th:if="*{isRefundVoucher==0}">
<div class="radio check-box">
<input type="radio" value="1" name="performance_isRefundExpress">用户承担</label>
<input type="radio" value="1" name="performance_isRefundVoucher">开启</label>
</div>
<div class="radio check-box">
<input type="radio" value="0" name="performance_isRefundExpress" checked></label>
<input type="radio" value="0" name="performance_isRefundVoucher" checked> 关闭</label>
</div>
</div>
</div>
......@@ -124,16 +145,6 @@
<input name="title" th:field="*{orderRefundAddress.address}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">定时: </label>
<input th:field="${performanceRefundConfigVo.refundOpenTime}" type="text" style="width: 200px;float: left"
class="form-control" id="startTime" placeholder="开始时间选择" name="refundOpenTime"
required/>
<span class="control-label" style="float: left;margin-left: 10px;margin-right: 10px"></span>
<input th:field="${performanceRefundConfigVo.refundCloseTime}" type="text" style="width: 200px;float: left"
class="form-control" id="endTime" placeholder="结束时间选择" name="refundCloseTime"
required/>
</div>
<button type="button" class="btn btn-w-m btn-success" onclick="submitHandler()">
修改
......@@ -184,4 +195,4 @@
}
</script>
</body>
</html>
</html>
\ No newline at end of file
......@@ -119,6 +119,8 @@
<div class="form-control-static" th:text="*{@dict.getLabel('zhengzai_pay_type',KylinOrderRefundsAdminVo.payType)}"/>
<label class="col-sm-2 control-label">取票方式:</label>
<div class="form-control-static" th:text="${KylinOrderRefundsAdminVo.getTicketType}"></div>
<label class="col-sm-2 control-label">纸质票号:</label>
<div class="form-control-static" th:text="${KylinOrderRefundsAdminVo.ticketNum}"></div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">申请退款类型:</label>
......
......@@ -66,9 +66,9 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
@Autowired
private RedisDataSourceUtil redisDataSourceUtil;
@Value("${liquidnet.url-refund.apply}")
@Value("${liquidnet.service.dragon.urls.refundApply}")
private String applyUrl;
@Value("${liquidnet.url-refund.notify-member}")
@Value("${liquidnet.service.platform.urls.memberRefundNotify}")
private String notifyUrl;
@Override
......
......@@ -41,7 +41,7 @@ import java.util.*;
@Service
public class AdminUpushServiceImpl extends ServiceImpl<AdminUpushMapper, AdminUpush> implements IAdminUpushService {
@Value("${liquidnet.al-oss.imgUrl}")
@Value("${liquidnet.aliyun.oss.imgUrl}")
private String imgUrl;
@Value("${liquidnet.umeng.ios.appkey}")
......@@ -111,20 +111,20 @@ public class AdminUpushServiceImpl extends ServiceImpl<AdminUpushMapper, AdminUp
if (upushParam.getPushRange() == 1) {
if (!CollectionUtil.isEmpty(pushList)) {
if (pushList.size() >= 20) {
pushList.remove(0);
pushList.remove(pushList.size()-1);
}
}
pushList.addFirst(adminUpushVo);
if (!CollectionUtil.isEmpty(pushList2)) {
if (pushList2.size() >= 20) {
pushList2.remove(0);
pushList2.remove(pushList.size()-1);
}
}
pushList2.addFirst(adminUpushVo);
} else {
if (!CollectionUtil.isEmpty(pushList)) {
if (pushList.size() >= 20) {
pushList.remove(0);
pushList.remove(pushList.size()-1);
}
}
pushList.addFirst(adminUpushVo);
......
......@@ -43,7 +43,7 @@ import java.util.stream.Collectors;
@Service
public class KylinBannersServiceImpl extends ServiceImpl<KylinBannersMapper, KylinBanners> implements IKylinBannersService {
@Value("${liquidnet.al-oss.imgUrl}")
@Value("${liquidnet.aliyun.oss.imgUrl}")
private String imgUrl;
@Autowired
......
......@@ -141,7 +141,6 @@ public class KylinOrderRefundsServiceImpl extends ServiceImpl<KylinOrderRefundsM
RefundPriceExpress = priceExpress.subtract(refundPriceExpressSum);
}
// todo 出票未出票
// 选择退款的入场人是否正确
Integer[] entitiesStatus = new Integer[]{KylinTableStatusConst.ENTITIES_IS_PAYMENT1, KylinTableStatusConst.ENTITIES_IS_PAYMENT2, KylinTableStatusConst.ENTITIES_IS_PAYMENT4};
int choiceCount = kylinOrderTicketEntitiesMapper.selectCount(
......
......@@ -3,13 +3,11 @@ package com.liquidnet.client.admin.zhengzai.kylin.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.common.utils.StringUtils;
import com.liquidnet.client.admin.zhengzai.kylin.utils.DataUtils;
import com.liquidnet.client.admin.zhengzai.kylin.utils.MongoVoUtils;
import com.liquidnet.client.admin.zhengzai.kylin.utils.TaobaoTicketUtils;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dto.param.RefundApplyParam;
import com.liquidnet.service.kylin.dto.param.RefundCallbackParam;
......@@ -41,7 +39,6 @@ import org.springframework.util.MultiValueMap;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
......@@ -58,10 +55,10 @@ import java.util.stream.Collectors;
@Service
public class KylinRefundsStatusServiceImpl {
@Value("${liquidnet.url-refund.apply}")
private String applyUrl;
@Value("${liquidnet.url-refund.notify}")
private String notifyUrl;
@Value("${liquidnet.service.dragon.urls.refundApply}")
private String refundApply;
@Value("${liquidnet.service.platform.urls.ticketRefundNotify}")
private String refundNotify;
@Autowired
private KylinOrderTicketsMapper kylinOrderTicketsMapper;
......@@ -111,7 +108,6 @@ public class KylinRefundsStatusServiceImpl {
// 本次退款票总金额
BigDecimal entitiesPriceSum = entitiesPrice.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
// TODO: 2021/5/27 事物 and 部分退款
// 更新数据
// 订单状态表 和 缓存
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
......@@ -430,7 +426,7 @@ public class KylinRefundsStatusServiceImpl {
BigDecimal refundPrice = refund.getPrice().add(refund.getPriceExpress());
MultiValueMap<String, String> params = new LinkedMultiValueMap();
params.add("code", oderInfo.getPayCode());
params.add("notifyUrl", notifyUrl);
params.add("notifyUrl", refundNotify);
params.add("orderCode", oderInfo.getOrderCode());
params.add("orderRefundCode", refund.getOrderRefundCode());
params.add("paymentId", oderInfo.getPaymentId());
......@@ -446,7 +442,7 @@ public class KylinRefundsStatusServiceImpl {
// 请求pay
String postResult = null;
try {
postResult = HttpUtil.post(applyUrl, params, headers);
postResult = HttpUtil.post(refundApply, params, headers);
log.info("退款res" + postResult);
HashMap hashMapResult = JsonUtils.fromJson(postResult, HashMap.class);
Boolean success = (Boolean) hashMapResult.get("success");
......@@ -476,13 +472,12 @@ public class KylinRefundsStatusServiceImpl {
// dataUtils.delOrderRefundVoByOrderId(strings1);
continue;
}else{
//TODO 秀龙 大麦退款
for (KylinOrderRefunds item : refundList) {
KylinOrderTicketVo orderData = dataUtils.getOrderTicketVo(item.getOrderTicketsId());
KylinPerformanceVo vo = dataUtils.getPerformanceVo(orderData.getPerformanceId());
taobaoTicketUtils.refundDamaiOrder(orderData,vo);
}
} else {
// 同步大麦退款
KylinOrderTicketVo orderData = dataUtils.getOrderTicketVo(refund.getOrderTicketsId());
KylinPerformanceVo vo = dataUtils.getPerformanceVo(orderData.getPerformanceId());
taobaoTicketUtils.refundDamaiOrder(orderData, vo);
// TODO: 2021/12/21 jxl 同步票务平台
}
} catch (Exception e) {
log.info("退款请求pay失败e" + e.getMessage());
......@@ -515,8 +510,8 @@ public class KylinRefundsStatusServiceImpl {
headers.add("Accept", "application/json;charset=UTF-8");
log.info("订单主动完成退款orderTicketRefunded:[refundCallbackParam={}, [orderRefundCode={}, notifyUrl={}]",
refundCallbackParam, refundInfo.getOrderRefundCode(), notifyUrl);
String returnData = HttpUtil.post(notifyUrl, params, headers);
refundCallbackParam, refundInfo.getOrderRefundCode(), refundNotify);
String returnData = HttpUtil.post(refundNotify, params, headers);
log.info("订单主动完成退款orderTicketRefunded-platform结果:{}", returnData);
return true;
......
......@@ -37,7 +37,7 @@ import java.util.List;
@Service
public class KylinZhengzaiAppVersionsServiceImpl extends ServiceImpl<KylinBannersMapper, KylinBanners> implements IKylinBannersService {
@Value("${liquidnet.al-oss.appUrl}")
@Value("${liquidnet.aliyun.oss.appUrl}")
private String appUrl;
@Autowired
......
......@@ -222,8 +222,14 @@ public class PerformancesExpressServiceImpl extends ServiceImpl<KylinOrderExpres
hBody.put("jCity", jCity);
hBody.put("jAddress", jAddress);
// TODO: 2021/6/30 前端选择
hBody.put("payMethod", "2");// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
// 1寄付|2到付|3包邮
// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
if (orderStatus.getExpressType() == 1 || orderStatus.getExpressType() == 3) {
hBody.put("payMethod", "0");
} else {
hBody.put("payMethod", "2");
}
hBody.put("expressType", expressType.toString());// 顺丰特快
hBody.put("depositumInfo", depositumInfo);
......
package com.liquidnet.client.admin.zhengzai.kylin.utils;
import com.liquidnet.service.kylin.dto.vo.KylinExpressModuleVo;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundAddress;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.zhengzai.kylin.dto.OrderOutLineVo;
import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.KylinExpressModuleVo;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundAddress;
import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
......@@ -442,6 +442,7 @@ public class DataUtils {
return (PageInfo<OrderOutLineVo>) obj;
}
}
//订单信息存redis
public void orderSetRedis(String orderCode){
KylinOrderTicketVo orderTicketVo = mongoTemplate.findOne(Query.query(Criteria.where("orderCode").is(orderCode)), KylinOrderTicketVo.class, KylinOrderTicketVo.class.getSimpleName());
......
......@@ -96,7 +96,13 @@ liquidnet:
url: http://devstone.zhengzai.tv/stone
dragon:
notifyUrl: https://devdragon.zhengzai.tv/dragon
urls:
refundApply: https://devdragon.zhengzai.tv/dragon/refund/refundSingle
refundResult: https://devdragon.zhengzai.tv/dragon/refund/refund/alipay/result
platform:
urls:
ticketRefundNotify: https://devplatform.zhengzai.tv/platform/refund/callback
memberRefundNotify: https://devplatform.zhengzai.tv/platform/amorder/callack/refund
url: http://devplatform.zhengzai.tv
sweet:
url: http://devsweet.zhengzai.tv
......@@ -112,7 +118,6 @@ liquidnet:
addresses: 39.107.71.112:8090
client:
admin:
phpPayUrl: http://devdragon.zhengzai.tv
phpMallUrl: https://devmall.zhengzai.tv
platformUrl: https://devplatform.zhengzai.tv
h5Url: https://devm.zhengzai.tv
......
......@@ -98,7 +98,13 @@ liquidnet:
localUrl: http://testorder.zhengzai.tv/order/order/syncOrder
dragon:
notifyUrl: https://testdragon.zhengzai.tv/dragon
urls:
refundApply: https://testdragon.zhengzai.tv/dragon/refund/refundSingle
refundResult: https://testdragon.zhengzai.tv/dragon/refund/refund/alipay/result
platform:
urls:
ticketRefundNotify: https://testplatform.zhengzai.tv/platform/refund/callback
memberRefundNotify: https://testplatform.zhengzai.tv/platform/amorder/callack/refund
url: http://testplatform.zhengzai.tv
sweet:
url: http://testsweet.zhengzai.tv
......@@ -115,7 +121,6 @@ liquidnet:
addresses: 192.168.96.147:8090
client:
admin:
phpPayUrl: http://testdragon.zhengzai.tv
phpMallUrl: https://testmall.zhengzai.tv
platformUrl: https://testplatform.zhengzai.tv
h5Url: https://testm.zhengzai.tv
......
......@@ -15,17 +15,10 @@ ruoyi:
#系统自定义配置
liquidnet:
url-refund:
apply: "${liquidnet.client.admin.phpPayUrl}/dragon/refund/refundSingle"
notify: "${liquidnet.client.admin.platformUrl}/platform/refund/callback"
notify-member: ${liquidnet.client.admin.platformUrl}/platform/amorder/callack/refund
url-banner:
url6: "/kylin/performances/recommend/performance/status?pageNum=1&pageSize=50&status=(3,6,7,8,9,10)" #票务
url7: "${liquidnet.client.admin.phpMallUrl}/admin/goodListForQuick?page=1&per_page=50" #商品
url14: "${liquidnet.client.admin.phpMallUrl}/admin/good/collective/quick?page=1&per_page=50" #商品集合
al-oss:
imgUrl: "https://img.zhengzai.tv/"
appUrl: "https://app.zhengzai.tv/"
# 开发环境配置
server:
......
......@@ -165,8 +165,4 @@ global-auth:
# - ${liquidnet.info.context}/station/out
# -----------------------------------------------------------
# -----------------------------------------------------------
liquidnet:
al-oss:
imgUrl: "https://img.zhengzai.tv/"
# -----------------------------------------------------------
\ No newline at end of file
......@@ -19,11 +19,5 @@ liquidnet:
mongodb:
sslEnabled: false
database: dev_ln_scene
al-oss:
imgUrl: "https://img.zhengzai.tv/"
appUrl: "https://app.zhengzai.tv/"
endpoint: http://oss-cn-hangzhou.aliyuncs.com
accessKeyId: LTAI4FxrURzMvvu9reFgwY5o
accessKeySecret: Ym5tfAxOf2zX20MgjikLI3Wz3tlwVV
#以下为spring各环境个性配置
......@@ -19,11 +19,5 @@ liquidnet:
mongodb:
sslEnabled: false
database: test_ln_scene
al-oss:
imgUrl: "https://img.zhengzai.tv/"
appUrl: "https://app.zhengzai.tv/"
endpoint: http://oss-cn-hangzhou.aliyuncs.com
accessKeyId: LTAI4FxrURzMvvu9reFgwY5o
accessKeySecret: Ym5tfAxOf2zX20MgjikLI3Wz3tlwVV
#以下为spring各环境个性配置
package com.liquidnet.service.kylin.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
* 快递模板表
......
......@@ -72,6 +72,11 @@ public class KylinOrderRefunds implements Serializable, Cloneable{
private BigDecimal priceExpress;
private BigDecimal priceCharges;
/**
* 纸质票号
*/
private String ticketNum;
/**
* 退款状态: 0请求退款 2取消退款 1审核通过 5驳回退款 7等待退款 3正在退款 4完成退款 6退款失败
*/
......
......@@ -90,14 +90,14 @@ public class KylinPerformanceStatus implements Serializable ,Cloneable{
private Integer isRecommend;
/**
* 是否支持退款 0否 1是
* 是否开启退款比例 0否 1是
*/
private Integer isCanRefund;
private Integer isOpenRefundPresent;
/**
* 是否开启退款比例 0否 1是
* 是否支持退款 0否 1是
*/
private Integer isOpenRefundPresent;
private Integer isCanRefund;
/**
* 退款开始时间
......@@ -110,34 +110,40 @@ public class KylinPerformanceStatus implements Serializable ,Cloneable{
private LocalDateTime refundCloseTime;
/**
* 是否开启转赠 0否 1是
* 是否有手续费
*/
private Integer isTransfer;
private Integer isRefundPoundage;
/**
* 转赠开始时间
* 用户退款快递票是否需要自己支付快递费 1用户承担寄付 0公司月结
*/
private LocalDateTime transferStartTime;
private Integer isRefundExpress;
/**
* 转赠结束时间
* 快递票是否需要退回
*/
private LocalDateTime transferEndTime;
private Integer isBackPaperTicket;
/**
* 是否有手续费
* 是否退优惠券
* 这个是前后台通用的配置 其他都是针对用户自己退款的
*/
private Integer isRefundPoundage;
private Integer isRefundVoucher;
/**
* 是否退优惠券
* 是否开启转赠 0否 1是
*/
private Integer isRefundVoucher;
private Integer isTransfer;
/**
* 是否退快递费
* 转赠开始时间
*/
private Integer isRefundExpress;
private LocalDateTime transferStartTime;
/**
* 转赠结束时间
*/
private LocalDateTime transferEndTime;
/**
* 是否需要场地审核
......
package com.liquidnet.service.kylin.mapper;
import com.liquidnet.service.kylin.entity.KylinExpressModule;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.kylin.entity.KylinExpressModule;
/**
* <p>
......
package com.liquidnet.service.feign.platform.api;
import com.liquidnet.service.base.ResponseDto;
import feign.hystrix.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
@Component
@FeignClient(
name = "liquidnet-service-platform",
contextId = "FeignPlatformApiClient",
path = "platform",
url = "${liquidnet.service.platform.url}",
fallback = FallbackFactory.Default.class
)
public interface FeignPlatformApiClient {
@GetMapping("refund/overtimeRefund")
ResponseDto<String> overtimeRefund();
}
......@@ -3,6 +3,7 @@ package com.liquidnet.service.executor.main.handler;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.feign.kylin.task.FeignPlatformAlipayBackClient;
import com.liquidnet.service.feign.platform.api.FeignPlatformApiClient;
import com.liquidnet.service.feign.platform.kylin.FeignPlatformFreightClient;
import com.liquidnet.service.feign.platform.task.FeignPlatformCandyTaskClient;
import com.xxl.job.core.biz.model.ReturnT;
......@@ -26,6 +27,24 @@ public class PlatformTaskHandler {
@Autowired
private FeignPlatformFreightClient feignPlatformFreightClient;
@Autowired
FeignPlatformApiClient feignPlatformApiClient;
@XxlJob(value = "sev-platform:overtimeRefund")
public ReturnT<String> overtimeRefund() {
try {
String result = feignPlatformApiClient.overtimeRefund().getData();
log.info("overtimeRefund:结果:"+result);
ReturnT<String> success = ReturnT.SUCCESS;
success.setMsg(result);
return success;
} catch (Exception e) {
log.error("exception of handler:{}", e.getMessage(), e);
ReturnT<String> fail = ReturnT.FAIL;
fail.setMsg(e.getLocalizedMessage());
return fail;
}
}
@XxlJob(value = "sev-platform:alipayActiveCallbackHandler")
public ReturnT<String> alipayActiveCallbackHandler() {
......
......@@ -19,4 +19,6 @@ CREATE TABLE `kylin_express_module`
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '快递模板表';
alter table kylin_performance_status add is_back_paper_ticket tinyint NOT NULL DEFAULT 0 COMMENT '快递票是否需要退回 0不需要 1需要' after is_refund_express;
\ No newline at end of file
alter table kylin_performance_status add is_back_paper_ticket tinyint NOT NULL DEFAULT 0 COMMENT '快递票是否需要退回 0不需要 1需要' after is_refund_express;
alter table kylin_order_refunds add ticket_num varchar(255) NOT NULL DEFAULT '' COMMENT '纸质票号' after price_express;
\ No newline at end of file
......@@ -160,7 +160,7 @@ public class KylinOrderTicketsController {
return orderTicketsService.orderTransferBack(orderId);
}
@GetMapping("toOrderRefundDetails")
/*@GetMapping("toOrderRefundDetails")
@ApiOperation("想要退款订单详情")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<KylinOrderTicketPreVo> toOrderRefundDetails(@RequestParam(value = "orderId", required = false) @NotNull(message = "订单ID不能为空") String orderId) {
......@@ -197,5 +197,5 @@ public class KylinOrderTicketsController {
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<Boolean> orderRefundWithdraw(@RequestParam(value = "orderRefundId", required = true) @NotNull(message = "退款订单ID不能为空") String orderRefundId) {
return orderTicketsService.orderRefundWithdraw(orderRefundId);
}
}*/
}
......@@ -46,6 +46,7 @@ public class KylinOrderTicketsRefundController {
@ApiImplicitParam(type = "form", dataType = "String", name = "orderTicketEntitiesId", value = "订单入场人ID", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "reason", value = "退款申请备注", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "picList", value = "图片"),
@ApiImplicitParam(type = "form", dataType = "String", name = "ticketNum", value = "纸质票号"),
@ApiImplicitParam(type = "form", dataType = "Integer", name = "sendExpressType", value = "快递方式 1上门取件 2自主发货"),
@ApiImplicitParam(type = "form", dataType = "String", name = "expressNumber", value = "自主发货的顺丰订单号"),
@ApiImplicitParam(type = "form", dataType = "String", name = "expressContacts", value = "发货人姓名"),
......@@ -58,6 +59,7 @@ public class KylinOrderTicketsRefundController {
@RequestParam(value = "orderTicketEntitiesId", required = true) @NotNull(message = "票单ID不能为空") String orderTicketEntitiesId,
@RequestParam(value = "reason", required = true) @NotNull(message = "退款原因不能为空") String reason,
@RequestParam(value = "picList", required = false) String picList,
@RequestParam(value = "ticketNum", required = false) String ticketNum,
@RequestParam(value = "sendExpressType", required = false) Integer sendExpressType,
@RequestParam(value = "expressNumber", required = false) String expressNumber,
......@@ -69,7 +71,7 @@ public class KylinOrderTicketsRefundController {
) {
// 退款
return kylinOrderTicketsRefundService.sendOrderRefund(
orderId, orderTicketEntitiesId, reason, picList,
orderId, orderTicketEntitiesId, reason, picList, ticketNum,
sendExpressType, expressNumber, expressContacts, expressPhone, sendExpressAddress, appointmentTime
);
}
......
......@@ -27,7 +27,7 @@ import java.util.List;
@Service
public class BannersServiceImpl implements IKylinBannersService {
@Value("${liquidnet.al-oss.imgUrl}")
@Value("${liquidnet.aliyun.oss.imgUrl}")
private String imgUrl;
@Autowired
......
......@@ -107,7 +107,6 @@ public class KylinOrderTicketsRefundServiceImpl {
item.setChargesRatio(chargesRatio);
item.setChargesPrice(chargesPrice);
// 手续费处理
BeanUtils.copyProperties(item, refundVo);
kylinOrderTicketEntitiesPreRefundVos.add(refundVo);
}
......@@ -130,6 +129,7 @@ public class KylinOrderTicketsRefundServiceImpl {
BeanUtils.copyProperties(orderTicketVo, vo);
vo.setIsRefundPoundage(performanceVo.getIsRefundPoundage());
vo.setIsRefundVoucher(performanceVo.getIsRefundVoucher());
vo.setIsBackPaperTicket(performanceVo.getIsBackPaperTicket());
vo.setRefundPoundageAll(refundPoundageAll);
vo.setOrderCouponList(orderCoupon);
vo.setRefundAddress(refundAddress);
......@@ -143,38 +143,12 @@ public class KylinOrderTicketsRefundServiceImpl {
}
}
public ResponseDto<OrderRefundVo> orderRefundDetails(String orderId, String orderRefundId) {
try {
OrderRefundVo vo = OrderRefundVo.getNew();
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
if (uid.equals("809406") || uid.equals("773650")) {
} else {
if (!orderTicketVo.getUserId().equals(uid)) {
return ResponseDto.failure(ErrorMapping.get("20003"));
}
}
orderTicketVo.setFieldName(performanceVo.getFieldName());
if (orderTicketVo.getOrderCode().length() > 20) {
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10));
}
KylinOrderRefundsVo kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId);
if (kylinOrderRefundsVoBase.getOrderRefundCode().length() > 20) {
kylinOrderRefundsVoBase.setOrderRefundCode(kylinOrderRefundsVoBase.getOrderRefundCode().substring(kylinOrderRefundsVoBase.getOrderRefundCode().length() - 10));
}
vo.setKylinOrderRefundsVoBaseList(kylinOrderRefundsVoBase);
vo.setOrderTicketVo(orderTicketVo);
vo.setKylinOrderExpressVo(dataUtils.getOrderRefundExpressInfo(orderId));
return ResponseDto.success(vo);
} catch (Exception e) {
e.printStackTrace();
return ResponseDto.failure(ErrorMapping.get("20030"));
public ResponseDto sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList, String ticketNum, Integer sendExpressType, String expressNumber, String expressContacts, String expressPhone, String sendExpressAddress, String appointmentTime) {
boolean isLock = dataUtils.setRefundLock(orderTicketEntitiesId);
if (!isLock) {
return ResponseDto.failure("正在处理,请勿重复操作~");
}
}
public ResponseDto sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList, Integer sendExpressType, String expressNumber, String expressContacts, String expressPhone, String sendExpressAddress, String appointmentTime) {
KylinOrderTicketEntitiesVo orderTicketEntitiesVo = null;
try {
String uid = CurrentUtil.getCurrentUid();
......@@ -241,13 +215,15 @@ public class KylinOrderTicketsRefundServiceImpl {
return ResponseDto.failure("申请金额不得小于0哦~");
}
// 快递费 现在只有到付 不作处理
// 如果后期有这种情况 需要判断是否是最后一张入场人票 然后减去已经退的快递费 计算进来即可
// 快递费 判断是否是最后一张入场人票 减去已经退的快递费
BigDecimal priceExpress = BigDecimal.valueOf(0);
if (orderTicketVo.getRefundNumber() + 1 == orderTicketVo.getNumber()) {
priceExpress = orderTicketVo.getPriceExpress().subtract(dataUtils.getCanRefundPriceExpress(kylinOrderRefundsVoBaseList));
}
Map token = CurrentUtil.getTokenClaims();
String username = StringUtils.defaultString(((String) token.get("nickname")), "");
String orderRefundId = refundsStatusService.userOrderTicketRefunding(orderTicketVo, refundSinglePrice, priceExpress, priceCharges, orderTicketEntitiesId, reason, picList, uid, username, kylinOrderRefundsVoBaseList.size(), sendExpressType);
String orderRefundId = refundsStatusService.userOrderTicketRefunding(orderTicketVo, refundSinglePrice, priceExpress, priceCharges, orderTicketEntitiesId, reason, picList, ticketNum, uid, username, kylinOrderRefundsVoBaseList.size(), sendExpressType);
if (!orderRefundId.isEmpty()) {
// 退款申请成功 异步去快递下单
if (orderTicketVo.getGetTicketType().equals("express") && sendExpressType > 0) {// 快递票
......@@ -263,6 +239,40 @@ public class KylinOrderTicketsRefundServiceImpl {
} catch (Exception e) {
log.error("sendOrderRefundException e:[{}]", e);
return ResponseDto.failure("申请失败");
} finally {
// 执行完毕。释放锁
dataUtils.delRefundLock(orderTicketEntitiesId);
}
}
public ResponseDto<OrderRefundVo> orderRefundDetails(String orderId, String orderRefundId) {
try {
OrderRefundVo vo = OrderRefundVo.getNew();
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
if (uid.equals("809406") || uid.equals("773650")) {
} else {
if (!orderTicketVo.getUserId().equals(uid)) {
return ResponseDto.failure(ErrorMapping.get("20003"));
}
}
orderTicketVo.setFieldName(performanceVo.getFieldName());
if (orderTicketVo.getOrderCode().length() > 20) {
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10));
}
KylinOrderRefundsVo kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId);
if (kylinOrderRefundsVoBase.getOrderRefundCode().length() > 20) {
kylinOrderRefundsVoBase.setOrderRefundCode(kylinOrderRefundsVoBase.getOrderRefundCode().substring(kylinOrderRefundsVoBase.getOrderRefundCode().length() - 10));
}
vo.setKylinOrderRefundsVoBaseList(kylinOrderRefundsVoBase);
vo.setOrderTicketVo(orderTicketVo);
vo.setKylinOrderExpressVo(dataUtils.getOrderRefundExpressInfo(orderId));
return ResponseDto.success(vo);
} catch (Exception e) {
e.printStackTrace();
return ResponseDto.failure(ErrorMapping.get("20030"));
}
}
......@@ -307,86 +317,113 @@ public class KylinOrderTicketsRefundServiceImpl {
}
}
return chargesRatio;
} else{ // 无手续费
} else { // 无手续费
return chargesRatio;
}
}
@Async
public void expressPlace(Integer sendExpressType, String expressNumber, String expressContacts, String expressPhone, String sendExpressAddress, String appointmentTime, KylinOrderTicketVo orderTicketVo, KylinPerformanceVo performanceVo, String orderRefundId) {
expressContacts = (null == expressContacts) ? "" : expressContacts;
expressPhone = (null == expressPhone) ? "" : expressPhone;
sendExpressAddress = (null == sendExpressAddress) ? "" : sendExpressAddress;
appointmentTime = (null == appointmentTime) ? "" : appointmentTime;
if (sendExpressType == 1) { // 上门取件
// 请求下单数据
Map<String, String> hBody = new HashMap<>();
hBody.put("custid", custid);
hBody.put("jContact", expressContacts);
hBody.put("jMobile", expressPhone);
hBody.put("jAddress", sendExpressAddress);
hBody.put("sendStartTime", appointmentTime);
Integer isRefundExpress = performanceVo.getIsRefundExpress();
if (isRefundExpress == 1) { // 1用户承担 0无 公司月结
hBody.put("payMethod", "1");// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
} else {
hBody.put("payMethod", "2");// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
}
hBody.put("expressType", expressType.toString());// 顺丰特快
hBody.put("depositumInfo", depositumInfo);
hBody.put("isDoCall", "1"); // 是否通过手持终端通知顺丰收派员上门收件,支持以下值:1-要求;0-不要求
String orderExpressId = IDGenerator.nextSnowId();
String OrderExpressCode = "NOWUR" + orderExpressId;
hBody.put("orderId", OrderExpressCode);
hBody.put("depositumNo", orderTicketVo.getNumber().toString());
OrderRefundAddress refundAddress = dataUtils.getRefundAddress(orderTicketVo.getGetTicketType());
hBody.put("dContact", refundAddress.getName());
hBody.put("dTel", refundAddress.getPhone());
hBody.put("dAddress", refundAddress.getAddress());
// 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequestNew(hBody, "/public/order/v1/placeOrder");
log.info("expressPlaceResult result:[{}]", result);
HashMap hashMap = new HashMap();
try {
hashMap = JsonUtils.fromJson(result, HashMap.class);
} catch (Exception e) {
log.info("expressPlaceParams sendExpressType:[{}], expressNumber:[{}], expressContacts:[{}], expressPhone:[{}], sendExpressAddress:[{}], appointmentTime:[{}], orderTicketVo:[{}], performanceVo:[{}]",
sendExpressType, expressNumber, expressContacts, expressPhone, sendExpressAddress, appointmentTime, orderTicketVo, performanceVo);
log.error("expressPlaceFromJsonException e:[{}]", e);
}
if (null == hashMap.get("succ") || hashMap.get("succ").equals("fail")) {
String msg = "";
if (null == hashMap.get("succ")) {
msg = result;
try {
expressContacts = (null == expressContacts) ? "" : expressContacts;
expressPhone = (null == expressPhone) ? "" : expressPhone;
sendExpressAddress = (null == sendExpressAddress) ? "" : sendExpressAddress;
appointmentTime = (null == appointmentTime) ? "" : appointmentTime;
if (sendExpressType == 1) { // 上门取件
// 请求下单数据
Map<String, String> hBody = new HashMap<>();
hBody.put("custid", custid);
hBody.put("jContact", expressContacts);
hBody.put("jMobile", expressPhone);
hBody.put("jAddress", sendExpressAddress);
hBody.put("sendStartTime", appointmentTime);
Integer isRefundExpress = performanceVo.getIsRefundExpress();
if (isRefundExpress == 1) { // 1用户承担 0无 公司月结
hBody.put("payMethod", "1");// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
} else {
msg = (String) hashMap.get("msg");
hBody.put("payMethod", "2");// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
}
log.info("expressPlaceParams sendExpressType:[{}], expressNumber:[{}], expressContacts:[{}], expressPhone:[{}], sendExpressAddress:[{}], appointmentTime:[{}], orderTicketVo:[{}], performanceVo:[{}]",
sendExpressType, expressNumber, expressContacts, expressPhone, sendExpressAddress, appointmentTime, orderTicketVo, performanceVo);
log.error("expressPlaceResultError msg:[{}]", msg);
} else {
HashMap hashMapResult = (HashMap) hashMap.get("result");
hBody.put("expressType", expressType.toString());// 顺丰特快
hBody.put("depositumInfo", depositumInfo);
hBody.put("isDoCall", "1"); // 是否通过手持终端通知顺丰收派员上门收件,支持以下值:1-要求;0-不要求
String orderExpressId = IDGenerator.nextSnowId();
String OrderExpressCode = "NOWUR" + orderExpressId;
hBody.put("orderId", OrderExpressCode);
hBody.put("depositumNo", orderTicketVo.getNumber().toString());
OrderRefundAddress refundAddress = dataUtils.getRefundAddress(orderTicketVo.getGetTicketType());
hBody.put("dContact", refundAddress.getName());
hBody.put("dTel", refundAddress.getPhone());
hBody.put("dAddress", refundAddress.getAddress());
// 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequestNew(hBody, "/public/order/v1/placeOrder");
log.info("expressPlaceResult result:[{}]", result);
HashMap hashMap = new HashMap();
try {
hashMap = JsonUtils.fromJson(result, HashMap.class);
} catch (Exception e) {
log.info("expressPlaceParams sendExpressType:[{}], expressNumber:[{}], expressContacts:[{}], expressPhone:[{}], sendExpressAddress:[{}], appointmentTime:[{}], orderTicketVo:[{}], performanceVo:[{}]",
sendExpressType, expressNumber, expressContacts, expressPhone, sendExpressAddress, appointmentTime, orderTicketVo, performanceVo);
log.error("expressPlaceFromJsonException e:[{}]", e);
}
if (null == hashMap.get("succ") || hashMap.get("succ").equals("fail")) {
String msg = "";
if (null == hashMap.get("succ")) {
msg = result;
} else {
msg = (String) hashMap.get("msg");
}
log.info("expressPlaceParams sendExpressType:[{}], expressNumber:[{}], expressContacts:[{}], expressPhone:[{}], sendExpressAddress:[{}], appointmentTime:[{}], orderTicketVo:[{}], performanceVo:[{}]",
sendExpressType, expressNumber, expressContacts, expressPhone, sendExpressAddress, appointmentTime, orderTicketVo, performanceVo);
log.error("expressPlaceResultError msg:[{}]", msg);
} else {
HashMap hashMapResult = (HashMap) hashMap.get("result");
// 生成预快递单 REDIS 队列入数据库
LocalDateTime now = LocalDateTime.now();
LinkedList<String> sqls = CollectionUtil.linkedListString();
sqls.add(SqlMapping.get("kylin_order_refund.refundOrderExpress"));
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
String remark = (String) hashMapResult.get("remark");
String proName = (String) hashMapResult.get("proName");
String goodsValueTotal = (String) hashMapResult.get("goodsValueTotal");
String goodsNumber = (String) hashMapResult.get("goodsNumber");
remark = (null == remark) ? "" : remark;
proName = (null == proName) ? "" : proName;
goodsValueTotal = (null == goodsValueTotal) ? "" : goodsValueTotal;
goodsNumber = (null == goodsNumber) ? "" : goodsNumber;
sqlsDataA.add(new Object[]{
orderExpressId, orderTicketVo.getPerformanceId(), orderTicketVo.getOrderTicketsId(), orderRefundId, OrderExpressCode, hashMapResult.get("mailno"), expressType, hashMapResult.get("filter_result"), remark, KylinTableStatusConst.ORDER_EXPRESS_STATUS2
, 2, sendExpressType, expressContacts, expressPhone, sendExpressAddress, appointmentTime
, proName, hashMapResult.get("cargoTypeCode"), hashMapResult.get("limitTypeCode"), hashMapResult.get("expressTypeCode"), goodsValueTotal, goodsNumber
, now
});
queueUtils.sendMsgByRedis(MQConst.KylinQueue.SQL_ORDER_REFUND_EXPRESS.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
KylinOrderExpressVo kylinOrderExpressVo = KylinOrderExpressVo.getNew();
kylinOrderExpressVo.setOrderExpressId(orderExpressId);
kylinOrderExpressVo.setOrderTicketsId(orderTicketVo.getOrderTicketsId());
kylinOrderExpressVo.setOrderExpressCode(OrderExpressCode);
kylinOrderExpressVo.setMailno((String) hashMapResult.get("mailno"));
kylinOrderExpressVo.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS2);
kylinOrderExpressVo.setSendExpressType(sendExpressType);
dataUtils.setOrderRefundExpressInfo(orderTicketVo.getOrderTicketsId(), kylinOrderExpressVo);
}
} else if (sendExpressType == 2) { // 自主发货
// 生成预快递单 REDIS 队列入数据库
String orderExpressId = IDGenerator.nextSnowId();
String OrderExpressCode = "NOWUR" + orderExpressId;
LocalDateTime now = LocalDateTime.now();
LinkedList<String> sqls = CollectionUtil.linkedListString();
sqls.add(SqlMapping.get("kylin_order_refund.refundOrderExpress"));
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
String remark = (String) hashMapResult.get("remark");
String proName = (String) hashMapResult.get("proName");
String goodsValueTotal = (String) hashMapResult.get("goodsValueTotal");
String goodsNumber = (String) hashMapResult.get("goodsNumber");
remark = (null == remark) ? "" : remark;
proName = (null == proName) ? "" : proName;
goodsValueTotal = (null == goodsValueTotal) ? "" : goodsValueTotal;
goodsNumber = (null == goodsNumber) ? "" : goodsNumber;
sqlsDataA.add(new Object[]{
orderExpressId, orderTicketVo.getPerformanceId(), orderTicketVo.getOrderTicketsId(), orderRefundId, OrderExpressCode, hashMapResult.get("mailno"), expressType, hashMapResult.get("filter_result"), remark, KylinTableStatusConst.ORDER_EXPRESS_STATUS2
orderExpressId, orderTicketVo.getPerformanceId(), orderTicketVo.getOrderTicketsId(), orderRefundId, OrderExpressCode, expressNumber, expressType, "", "", KylinTableStatusConst.ORDER_EXPRESS_STATUS2
, 2, sendExpressType, expressContacts, expressPhone, sendExpressAddress, appointmentTime
, proName, hashMapResult.get("cargoTypeCode"), hashMapResult.get("limitTypeCode"), hashMapResult.get("expressTypeCode"), goodsValueTotal, goodsNumber
, "", "", "", "", "", ""
, now
});
queueUtils.sendMsgByRedis(MQConst.KylinQueue.SQL_ORDER_REFUND_EXPRESS.getKey(),
......@@ -396,36 +433,13 @@ public class KylinOrderTicketsRefundServiceImpl {
kylinOrderExpressVo.setOrderExpressId(orderExpressId);
kylinOrderExpressVo.setOrderTicketsId(orderTicketVo.getOrderTicketsId());
kylinOrderExpressVo.setOrderExpressCode(OrderExpressCode);
kylinOrderExpressVo.setMailno((String) hashMapResult.get("mailno"));
kylinOrderExpressVo.setMailno(expressNumber);
kylinOrderExpressVo.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS2);
kylinOrderExpressVo.setSendExpressType(sendExpressType);
dataUtils.setOrderRefundExpressInfo(orderTicketVo.getOrderTicketsId(), kylinOrderExpressVo);
}
} else if (sendExpressType == 2) { // 自主发货
// 生成预快递单 REDIS 队列入数据库
String orderExpressId = IDGenerator.nextSnowId();
String OrderExpressCode = "NOWUR" + orderExpressId;
LocalDateTime now = LocalDateTime.now();
LinkedList<String> sqls = CollectionUtil.linkedListString();
sqls.add(SqlMapping.get("kylin_order_refund.refundOrderExpress"));
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqlsDataA.add(new Object[]{
orderExpressId, orderTicketVo.getPerformanceId(), orderTicketVo.getOrderTicketsId(), orderRefundId, OrderExpressCode, expressNumber, expressType, "", "", KylinTableStatusConst.ORDER_EXPRESS_STATUS2
, 2, sendExpressType, expressContacts, expressPhone, sendExpressAddress, appointmentTime
, "", "", "", "", "", ""
, now
});
queueUtils.sendMsgByRedis(MQConst.KylinQueue.SQL_ORDER_REFUND_EXPRESS.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
KylinOrderExpressVo kylinOrderExpressVo = KylinOrderExpressVo.getNew();
kylinOrderExpressVo.setOrderExpressId(orderExpressId);
kylinOrderExpressVo.setOrderTicketsId(orderTicketVo.getOrderTicketsId());
kylinOrderExpressVo.setOrderExpressCode(OrderExpressCode);
kylinOrderExpressVo.setMailno(expressNumber);
kylinOrderExpressVo.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS2);
kylinOrderExpressVo.setSendExpressType(sendExpressType);
dataUtils.setOrderRefundExpressInfo(orderTicketVo.getOrderTicketsId(), kylinOrderExpressVo);
} catch (Exception e) {
log.error("expressPlaceError e:{}", e);
}
}
......@@ -598,4 +612,4 @@ public class KylinOrderTicketsRefundServiceImpl {
}
}
}
}
\ No newline at end of file
......@@ -12,7 +12,6 @@ import com.liquidnet.service.kylin.utils.DataUtils;
import com.liquidnet.service.kylin.utils.OrderUtils;
import com.liquidnet.service.kylin.utils.QueueUtils;
import com.mongodb.BasicDBObject;
import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
......@@ -25,7 +24,6 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
/**
* <p>
......@@ -58,6 +56,7 @@ public class KylinRefundsStatusServiceImpl {
String orderEntitiesId,
String reason,
String picList,
String ticketNum,
String uid,
String username,
int refundCount,
......@@ -110,6 +109,7 @@ public class KylinRefundsStatusServiceImpl {
kylinOrderRefunds.setPrice(refundPrice);
kylinOrderRefunds.setPriceExpress(priceExpress);
kylinOrderRefunds.setPriceCharges(priceCharges);
kylinOrderRefunds.setTicketNum(ticketNum);
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY);
if (orderInfo.getGetTicketType().equals("express") && sendExpressType > 0) {// 快递票
kylinOrderRefunds.setType(KylinTableStatusConst.ORDER_REFUND_TYPE_APPLY3);
......@@ -180,7 +180,7 @@ public class KylinRefundsStatusServiceImpl {
});
sqlsDataC.add(new Object[]{
kylinOrderRefunds.getOrderRefundsId(), kylinOrderRefunds.getOrderTicketsId(), kylinOrderRefunds.getOrderRefundCode(),
kylinOrderRefunds.getPrice(), kylinOrderRefunds.getPriceExpress(), kylinOrderRefunds.getPriceCharges(), kylinOrderRefunds.getStatus(),
kylinOrderRefunds.getPrice(), kylinOrderRefunds.getPriceExpress(), kylinOrderRefunds.getPriceCharges(), ticketNum, kylinOrderRefunds.getStatus(),
kylinOrderRefunds.getType(), kylinOrderRefunds.getApplicantId(), kylinOrderRefunds.getApplicantName(),
kylinOrderRefunds.getApplicantAt(), kylinOrderRefunds.getReason(), kylinOrderRefunds.getCreatedAt()
});
......@@ -356,4 +356,4 @@ public class KylinRefundsStatusServiceImpl {
}
}
}
}
\ No newline at end of file
......@@ -24,7 +24,7 @@ import java.util.LinkedList;
@Service
public class KylinUpushServiceImpl {
@Value("${liquidnet.al-oss.imgUrl}")
@Value("${liquidnet.aliyun.oss.imgUrl}")
private String imgUrl;
@Autowired
......
......@@ -26,6 +26,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -816,4 +817,31 @@ public class DataUtils {
// return data.get(0);
// }
}
/**
* 获取已经退了的快递费
* @return
*/
public BigDecimal getCanRefundPriceExpress(List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList) {
BigDecimal priceExpress = BigDecimal.valueOf(0);
if (!CollectionUtils.isEmpty(kylinOrderRefundsVoBaseList)) {
kylinOrderRefundsVoBaseList.forEach(r -> {
priceExpress.add(r.getPriceExpress());
});
}
return priceExpress;
}
public boolean setRefundLock(String orderTicketEntitiesId) {
String redisKey = KylinRedisConst.REDIS_KEY_KYLIN_REFUND_LOCK
.concat(orderTicketEntitiesId);
return redisUtil.lock(redisKey, 1, 60);
}
public void delRefundLock(String orderTicketEntitiesId) {
String redisKey = KylinRedisConst.REDIS_KEY_KYLIN_REFUND_LOCK
.concat(orderTicketEntitiesId);
redisUtil.uLock(redisKey);
}
}
......@@ -16,7 +16,7 @@ kylin_order_ticket_entities.synPay=UPDATE kylin_order_ticket_entities SET is_pay
# ------------------------用户发起订单退款----------------------------
kylin_order_ticket_status.refund=UPDATE kylin_order_ticket_status SET status = ? ,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_order_ticket_entities.refund=UPDATE kylin_order_ticket_entities SET is_payment = ? ,updated_at = ? WHERE order_ticket_entities_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
kylin_order_refund.refund=INSERT INTO kylin_order_refunds (order_refunds_id,order_tickets_id,order_refund_code,price,price_express,price_charges,status,type,applicant_id,applicant_name,applicant_at,reason,created_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_order_refund.refund=INSERT INTO kylin_order_refunds (order_refunds_id,order_tickets_id,order_refund_code,price,price_express,price_charges,ticket_num,status,type,applicant_id,applicant_name,applicant_at,reason,created_at) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)
kylin_order_refund_entities.refund=INSERT INTO kylin_order_refund_entities (order_refunds_entities_id,order_refunds_id,refund_price,order_ticket_entities_id,created_at) VALUES(?,?,?,?,?)
kylin_order_refund_pic.refund=INSERT INTO kylin_order_refund_pic (refund_pic_id,order_refunds_id,pic_url,created_at) VALUES (?,?,?,?)
kylin_order_refund.refundOrderExpress=INSERT INTO kylin_order_express (order_express_id,performances_id,order_tickets_id,order_refunds_id,order_express_code,mailno,express_type,filter_result,remark,express_status,send_type,send_express_type,express_contacts,express_phone,send_express_address,appointment_time,pro_name,cargo_type_code,limit_type_code,express_type_code,goods_value_total,goods_number,created_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
......
......@@ -5,9 +5,11 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.entity.KylinOrderCoupons;
import com.liquidnet.service.kylin.service.IKylinOrderRefundsService;
import com.liquidnet.service.order.utils.DataUtils;
import com.liquidnet.service.order.utils.TaobaoTicketUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -40,15 +42,14 @@ public class OrderRefundOvertimeServiceImpl implements IKylinOrderRefundsService
@Autowired
private DataUtils dataUtils;
@Value("${liquidnet.service.candy.url}")
private String candyUrl;
@Autowired
private TaobaoTicketUtils taobaoTicketUtils;
public Boolean refundApply(String orderTicketsId, String paymentId, String paymentType) {
log.info("订单超时支付refundApply-Start:[orderTicketsId={}, [paymentId={}, paymentType={}]",
orderTicketsId, paymentId, paymentType);
KylinOrderTicketVo orderInfo = dataUtils.getOrderTicketVo(orderTicketsId);
// 快递费 未进行判断
BigDecimal RefundPriceExpress = orderInfo.getPriceExpress();
// 金额
BigDecimal priceActual = orderInfo.getPriceActual();
BigDecimal priceExpress = orderInfo.getPriceExpress();
......@@ -61,39 +62,21 @@ public class OrderRefundOvertimeServiceImpl implements IKylinOrderRefundsService
entities.setCanRefundedPrice(onePrice);
}
}
List<String> ticketEntityIds = entitiesList.stream().map(KylinOrderTicketEntities -> KylinOrderTicketEntities.getOrderTicketEntitiesId()).collect(Collectors.toList());
List<BigDecimal> entitiesPrice = entitiesList.stream().map(KylinOrderTicketEntities -> KylinOrderTicketEntities.getCanRefundedPrice()).collect(Collectors.toList());
boolean res = kylinRefundsStatusServiceImpl.orderTicketRefunding(
orderInfo, orderTicketsId,
RefundPriceExpress,
priceExpress,
ticketEntityIds, entitiesPrice, paymentId, paymentType
);
if (res) {
// 超时直接退还库存
// for (KylinOrderTicketEntitiesVo entitiesInfo : entitiesList) {
// // 因固定状态为未支付 所以无需判断 entitiesInfo.getIsPayment() == KylinTableStatusConst.ENTITIES_IS_PAYMENT3
// dataUtils.changeSurplusGeneral(entitiesInfo.getTicketId(), 1);
// dataUtils.changeBuyInfo(orderInfo.getUserId(), entitiesInfo.getEnterIdCode(), orderInfo.getPerformanceId(), entitiesInfo.getTicketId(), -1);
// }
// 退所有优惠券
/*ArrayList<KylinOrderCoupons> orderCoupon = dataUtils.getOrderCoupon(orderTicketsId);
if (!CollectionUtil.isEmpty(orderCoupon)) {
List<String> uCouponIds = orderCoupon.stream().map(KylinOrderCoupons -> KylinOrderCoupons.getCouponCode()).collect(Collectors.toList());
String uCouponIdsStr = Joiner.on(",").join(uCouponIds);
MultiValueMap<String, String> params = CollectionUtil.linkedMultiValueMapStringString();
params.add("uCouponIds", uCouponIdsStr);
params.add("uid", orderInfo.getUserId());
MultiValueMap<String, String> headers = CollectionUtil.linkedMultiValueMapStringString();
headers.add("Accept", "application/json;charset=UTF-8");
log.info("订单超时支付refundApply-退所有优惠券:[orderTicketsId={}, [params={}, candyUrl={}]",
orderTicketsId, params, candyUrl);
String returnData = HttpUtil.post(candyUrl + "/candy-coupon/useBack", params, headers);
log.info("订单超时支付refundApply-退券结果:[returnData={}]", returnData);
}*/
// 优惠券 库存 积分 大美已自己处理
// 同步大麦退款
KylinOrderTicketVo orderData = dataUtils.getOrderTicketVo(orderTicketsId);
KylinPerformanceVo vo = dataUtils.getPerformanceVo(orderData.getPerformanceId());
taobaoTicketUtils.refundDamaiOrder(orderData, vo);
// TODO: 2021/12/21 jxl 同步票务平台
return true;
} else {
return false;
......@@ -104,4 +87,4 @@ public class OrderRefundOvertimeServiceImpl implements IKylinOrderRefundsService
public String getOrderRefundCode(String orderRefundCode, int type) {
return null;
}
}
}
\ No newline at end of file
package com.liquidnet.service.order.utils;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.request.AlibabaDamaiMevOpenWithdrawticketRequest;
import com.taobao.api.response.AlibabaDamaiMevOpenWithdrawticketResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class TaobaoTicketUtils {
......@@ -47,4 +57,52 @@ public class TaobaoTicketUtils {
return false;
}
}
public boolean refundDamaiOrder(KylinOrderTicketVo orderData, KylinPerformanceVo vo) {
try {
int isSysDamai = 0;
for (int x = 0; x < vo.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = vo.getTicketTimeList().get(x);
for (int y = 0; y < timeItem.getTicketList().size(); y++) {
KylinTicketVo ticketItem = timeItem.getTicketList().get(y);
if (ticketItem.getTicketsId().equals(orderData.getTicketId())) {
isSysDamai = ticketItem.getSysDamai();
break;
}
}
}
if (isSysDamai == 1) {
List<KylinOrderTicketEntitiesVo> listData = orderData.getEntitiesVoList();
for (int i = 0; i < listData.size(); i++) {
KylinOrderTicketEntitiesVo item = listData.get(i);
long ticketTimesKey;
if (item.getTicketId().length() > 13) {
ticketTimesKey = Long.valueOf(IDGenerator.getDamaiCode(item.getTimeId()));
} else {
ticketTimesKey = Long.parseLong(item.getTimeId());
}
long orderTicketEntitiesKey;
// if (item.getOrderTicketEntitiesId().length() > 13) {
// orderTicketEntitiesKey = Long.valueOf(IDGenerator.getDamaiCode(item.getOrderTicketEntitiesId()));
// } else {
// orderTicketEntitiesKey = Long.valueOf(item.getOrderTicketEntitiesId());//票单号 入场人id
// }
if (orderData.getIsMember() == 1) {
orderTicketEntitiesKey = Long.valueOf(IDGenerator.getDamaiCode(item.getOrderTicketEntitiesId()).toString().concat("010"));
} else {
orderTicketEntitiesKey = Long.valueOf(IDGenerator.getDamaiCode(item.getOrderTicketEntitiesId()).toString().concat("020"));
}
withdrawDamaiOrder(ticketTimesKey, orderTicketEntitiesKey);
}
return true;
}
return true;
}catch (Exception e){
log.info("REFUND DAMAI ERROR = {}",e);
return false;
}
}
}
......@@ -45,11 +45,11 @@ import java.util.UUID;
@RequestMapping("basicServices/alOss")
public class AlOssController {
@Value("${liquidnet.al-oss.endpoint}")
@Value("${liquidnet.aliyun.oss.endpoint}")
private String endpoint;
@Value("${liquidnet.al-oss.accessKeyId}")
@Value("${liquidnet.aliyun.oss.accessKeyId}")
private String accessKeyId;
@Value("${liquidnet.al-oss.accessKeySecret}")
@Value("${liquidnet.aliyun.oss.accessKeySecret}")
private String accessKeySecret;
@Autowired
......
......@@ -39,4 +39,11 @@ public class OrderRefundCallbackController {
String result = orderRefundsCallbackServiceImpl.alipayActiveCallback();
return result;
}
@GetMapping("overtimeRefund")
@ApiOperation("超时支付自动退款")
public String overtimeRefund() {
String result = orderRefundsCallbackServiceImpl.overtimeRefund();
return result;
}
}
......@@ -28,7 +28,7 @@ import java.util.LinkedList;
@Service
public class AdminUpushServiceImpl extends ServiceImpl<AdminUpushMapper, AdminUpush> implements IAdminUpushService {
@Value("${liquidnet.al-oss.imgUrl}")
@Value("${liquidnet.aliyun.oss.imgUrl}")
private String imgUrl;
@Autowired
......
......@@ -3,18 +3,21 @@ package com.liquidnet.service.platform.service.refund;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dto.param.RefundCallbackParam;
import com.liquidnet.service.kylin.dto.vo.returns.KylinOrderRefundsVo;
import com.liquidnet.service.kylin.entity.KylinOrderRefunds;
import com.liquidnet.service.kylin.entity.KylinOrderTicketStatus;
import com.liquidnet.service.kylin.entity.KylinOrderTickets;
import com.liquidnet.service.kylin.mapper.*;
import com.liquidnet.service.kylin.mapper.KylinOrderRefundsMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketStatusMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketsMapper;
import com.liquidnet.service.kylin.service.IKylinOrderRefundsService;
import com.liquidnet.service.platform.utils.DataUtils;
import com.mongodb.BasicDBObject;
import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -22,11 +25,15 @@ 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.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
/**
......@@ -40,10 +47,13 @@ import java.util.List;
@Slf4j
@Service
public class OrderRefundsCallbackServiceImpl extends ServiceImpl<KylinOrderRefundsMapper, KylinOrderRefunds> implements IKylinOrderRefundsService {
@Value("${liquidnet.client.admin.platformUrl}")
private String platformUrl;
@Value("${liquidnet.client.admin.phpPayUrl}")
private String phpPayUrl;
@Value("${liquidnet.service.dragon.urls.refundApply}")
private String refundApply;
@Value("${liquidnet.service.dragon.urls.refundResult}")
private String refundResult;
@Value("${liquidnet.service.platform.urls.ticketRefundNotify}")
private String refundNotify;
@Autowired
private KylinRefundsStatusServiceImpl kylinRefundsStatusServiceImpl;
......@@ -124,13 +134,13 @@ public class OrderRefundsCallbackServiceImpl extends ServiceImpl<KylinOrderRefun
}
@Override
public String getOrderRefundCode(String orderRefundCode,int type) {
public String getOrderRefundCode(String orderRefundCode, int type) {
return null;
}
public String alipayActiveCallback() {
LocalDateTime startTime = LocalDateTime.now();
LocalDateTime newTime = startTime.minusHours(8);
LocalDateTime startTime = LocalDateTime.now();
LocalDateTime newTime = startTime.minusHours(2);
List<KylinOrderRefunds> kylinOrderRefunds = kylinOrderRefundsMapper.selectList(
Wrappers.lambdaQuery(KylinOrderRefunds.class)
.eq(KylinOrderRefunds::getStatus, KylinTableStatusConst.ORDER_REFUND_STATUS_UNFILLED)
......@@ -144,16 +154,15 @@ public class OrderRefundsCallbackServiceImpl extends ServiceImpl<KylinOrderRefun
if (null != orderInfo.getPaymentType() && (orderInfo.getPaymentType().equals("WAPALIPAY") || orderInfo.getPaymentType().equals("APPALIPAY"))) {
log.info("\n支付宝退款主动查询处理结果:\n[{}] ", orderInfo.getOrderTicketsId());
MultiValueMap<String, String> params = new LinkedMultiValueMap();
params.add("callBackUrl", platformUrl.concat("/platform/refund/callback"));
params.add("callBackUrl", refundNotify);
params.add("orderCode", orderInfo.getOrderCode());
params.add("orderRefundCode", refundInfo.getOrderRefundCode());
params.add("paymentId", orderInfo.getPaymentId());
// log.info("退款参数" + JsonUtils.toJson(params));
log.info("\n支付宝退款主动查询参数:\n[{}] ", params.toString());
// 请求pay
// 请求dragon
try {
String postResult = HttpUtil.post(phpPayUrl.concat("/dragon/refund/refund/alipay/result"), params);
String postResult = HttpUtil.post(refundResult, params);
log.info("\n支付宝退款主动查询处理结果:\n[{}] " + postResult);
} catch (Exception e) {
log.info("\n支付宝退款主动查询失败:[errorMsg=[{}], [orderRefundsId=[{}]", e.getMessage(), refundInfo.getOrderRefundsId());
......@@ -163,4 +172,113 @@ public class OrderRefundsCallbackServiceImpl extends ServiceImpl<KylinOrderRefun
}
return "success";
}
public String overtimeRefund() {
List<KylinOrderRefunds> refundList = kylinOrderRefundsMapper.selectList(
Wrappers.lambdaQuery(KylinOrderRefunds.class)
.eq(KylinOrderRefunds::getType, KylinTableStatusConst.ORDER_REFUND_TYPE_AUTO)
.in(KylinOrderRefunds::getStatus, Arrays.asList(
KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY,
KylinTableStatusConst.ORDER_REFUND_STATUS_APPROVED
))
);
for (KylinOrderRefunds refundInfo : refundList) {
String refundId = refundInfo.getOrderRefundsId();
String orderId = refundInfo.getOrderTicketsId();
LocalDateTime nowTime = LocalDateTime.now();
KylinOrderRefunds kylinOrderRefunds = KylinOrderRefunds.getNew();
// 运营审核
// kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_APPROVED);
kylinOrderRefunds.setAuditorId("system");
kylinOrderRefunds.setAuditorName("system");
kylinOrderRefunds.setAuditorAt(nowTime);
kylinOrderRefunds.setReject("系统审核通过");
// 财务审核
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_UNFILLED);
kylinOrderRefunds.setExecutorId("system");
kylinOrderRefunds.setExecutorName("system");
kylinOrderRefunds.setExecutorAt(nowTime);
kylinOrderRefunds.setRefuse("系统审核通过");
kylinOrderRefunds.setUpdatedAt(nowTime);
// 数据库
kylinOrderRefundsMapper.update(
kylinOrderRefunds,
Wrappers.lambdaUpdate(KylinOrderRefunds.class).eq(KylinOrderRefunds::getOrderRefundsId, refundId)
);
// 缓存
KylinOrderRefundsVo kylinOrderRefundsVo = KylinOrderRefundsVo.getNew();
BeanUtils.copyProperties(kylinOrderRefunds, kylinOrderRefundsVo);
UpdateResult result = mongoTemplate.updateFirst(
Query.query(Criteria.where("orderRefundsId").is(refundId)),
Update.fromDocument(Document.parse(JsonUtils.toJson(kylinOrderRefundsVo))),
KylinOrderRefundsVo.class, KylinOrderRefundsVo.class.getSimpleName()
);
dataUtils.delOrderRefundVo(refundId);
dataUtils.delOrderRefundVoByOrderId(orderId);
KylinOrderTickets oderInfo = kylinOrderTicketsMapper.selectOne(
Wrappers.lambdaQuery(KylinOrderTickets.class)
.eq(KylinOrderTickets::getOrderTicketsId, orderId)
);
BigDecimal refundPrice = refundInfo.getPrice().add(refundInfo.getPriceExpress());
MultiValueMap<String, String> params = new LinkedMultiValueMap();
params.add("code", oderInfo.getPayCode());
params.add("notifyUrl", refundNotify);
params.add("orderCode", oderInfo.getOrderCode());
params.add("orderRefundCode", refundInfo.getOrderRefundCode());
params.add("paymentId", oderInfo.getPaymentId());
params.add("paymentType", oderInfo.getPaymentType());
params.add("price", String.valueOf(refundPrice));
params.add("priceTotal", String.valueOf(oderInfo.getPriceActual()));
params.add("reason", "按需退款");
MultiValueMap<String, String> headers = new LinkedMultiValueMap();
headers.add("Accept", "application/json;charset=UTF-8");
log.info("退款参数" + JsonUtils.toJson(params));
// 请求pay
String postResult = null;
try {
postResult = HttpUtil.post(refundApply, params, headers);
log.info("退款res" + postResult);
HashMap hashMapResult = JsonUtils.fromJson(postResult, HashMap.class);
Boolean success = (Boolean) hashMapResult.get("success");
if (!success) {
String message = (String) hashMapResult.get("message");
log.info("退款pay返回失败" + message);
KylinOrderRefunds kylinOrderRefundsFail = new KylinOrderRefunds();
kylinOrderRefundsFail.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_ERROR);
kylinOrderRefundsFail.setRefundError(message);
kylinOrderRefundsFail.setUpdatedAt(LocalDateTime.now());
kylinOrderRefundsMapper.update(
kylinOrderRefundsFail,
Wrappers.lambdaUpdate(KylinOrderRefunds.class).eq(KylinOrderRefunds::getOrderRefundsId, refundId)
);
// 修改缓存
KylinOrderRefundsVo kylinOrderRefundsVoFail = new KylinOrderRefundsVo();
BeanUtils.copyProperties(kylinOrderRefundsFail, kylinOrderRefundsVoFail);
/*BasicDBObject objectFail = new BasicDBObject("$set", mongoConverter.convertToMongoType(kylinOrderRefundsVoFail));
UpdateResult updateFailResult = mongoTemplate.getCollection(KylinOrderRefundsVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderRefundsId").is(refundId)).getQueryObject(),
objectFail
);*/
UpdateResult failResult = mongoTemplate.updateFirst(
Query.query(Criteria.where("orderRefundsId").is(refundId)),
Update.fromDocument(Document.parse(JsonUtils.toJson(kylinOrderRefundsVoFail))),
KylinOrderRefundsVo.class, KylinOrderRefundsVo.class.getSimpleName()
);
dataUtils.delOrderRefundVo(refundId);
dataUtils.delOrderRefundVoByOrderId(orderId);
continue;
}
// 同步票务平台 和 大麦 order申请时候就做了
} catch (Exception e) {
log.info("退款请求pay失败e" + e.getMessage());
continue;
}
}
return "success";
}
}
......@@ -11,4 +11,6 @@ CREATE TABLE `sweet_wechat_maodeng` (
PRIMARY KEY (`mid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 38 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;
\ No newline at end of file
SET FOREIGN_KEY_CHECKS = 1;
ALTER TABLE `sweet_wechat_maodeng` ADD INDEX idx_maodeng_open_id (`user_id`);
\ No newline at end of file
......@@ -439,6 +439,8 @@ CREATE TABLE `sweet_wechat_users`
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '正在现场服务号关注事件储存用户信息表';
ALTER TABLE `sweet_wechat_users` ADD INDEX idx_wechat_open_id (`open_id`);
ALTER TABLE `sweet_wechat_users` ADD INDEX idx_wechat_union_id (`union_id`);
-- 小程序登录记录用户解密后信息表
drop TABLE if exists `sweet_applet_users`;
......@@ -461,6 +463,7 @@ CREATE TABLE `sweet_applet_users`
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '小程序登录记录用户解密后信息表';
ALTER TABLE `sweet_applet_users` ADD INDEX idx_applet_union_id (`union_id`);
-- 答题表
drop TABLE if exists `sweet_answer`;
......
-- use prod_ln_scene;
-- 创建集合
-- db.createCollection("IntegralActivityDrawVo");
-- 创建分片
-- sh.enableSharding("prod_ln_scene");
-- sh.shardCollection("prod_ln_scene.IntegralActivityDrawVo",{"drawId":"hashed"});
-- 创建索引
db.IntegralActivityDrawVo.createIndex({drawId:"hashed"});
db.IntegralActivityDrawVo.createIndex({userId:"hashed"});
-- 删除集合内数据
-- db.IntegralActivityDrawVo.deleteMany({});
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