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

Commit faa8ffc7 authored by dongchun's avatar dongchun

合并代码

parents 71359808 ff1223ab
package com.liquidnet.client.admin.web.controller.zhengzai.tools;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/tools")
public class ToolsBaseController extends BaseController {
private String prefix = "zhengzai/tools";
@GetMapping()
public String tools() {
return prefix + "/tools";
}
@GetMapping(value = "/details/{id}")
public String detailsRoadShow(@PathVariable("id") Integer id, ModelMap mmap) {
if (id == 1) {
return prefix + "/fun1";
} else {
return prefix + "/edit";
}
}
@PostMapping("/export/mobile")
@ResponseBody
public AjaxResult exportMobile(Integer mobileType) {
System.out.println(mobileType);
return toAjax(mobileType);
}
}
......@@ -38,7 +38,7 @@
</div>
</div>
</div>
<div class="form-group" style="display: none">
<div class="form-group" >
<label class="col-sm-3 control-label is-required">手续费:</label>
<div class="col-sm-8" th:if="*{isRefundPoundage==1}">
<div class="radio check-box">
......@@ -57,7 +57,7 @@
</div>
</div>
</div>
<div class="form-group" style="display: none">
<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">
......@@ -76,7 +76,7 @@
</div>
</div>
</div>
<div class="form-group" style="display: none">
<div class="form-group">
<label class="col-sm-3 control-label is-required">快递费:</label>
<div class="col-sm-8" th:if="*{isRefundExpress==1}">
<div class="radio check-box">
......@@ -95,19 +95,19 @@
</div>
</div>
</div>
<div class="form-group" style="display: none">
<div class="form-group">
<label class="col-sm-3 control-label">收货人:</label>
<div class="col-sm-8">
<input name="title" th:field="*{orderRefundAddress.name}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group" style="display: none">
<div class="form-group">
<label class="col-sm-3 control-label">电话:</label>
<div class="col-sm-8">
<input name="title" th:field="*{orderRefundAddress.phone}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group" style="display: none">
<div class="form-group">
<label class="col-sm-3 control-label">收货地址:</label>
<div class="col-sm-8">
<input name="title" th:field="*{orderRefundAddress.address}" class="form-control" type="text" readonly>
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('工具库')"/>
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<div class="form-group">
<div class="radio check-box">
<input type="radio" value="1" name="mobileType" checked> 购票用户</label>
</div>
<div class="radio check-box">
<input type="radio" value="2" name="mobileType"> 下单用户</label>
</div>
</div>
</div>
<th:block th:include="include :: footer"/>
<script th:inline="javascript">
var prefix = ctx + "/tools";
function submitHandler() {
// $.operate.save(prefix + "/export/mobile", $('#form-fun1-edit').serialize());
var param = {
"mobileType": document.getElementsByName("mobileType")[0].checked ? 1 : 2
};
// $.operate.save(prefix + "/export/mobile", param);
$.operate.post(prefix + "/export/mobile", param, function (res) {
});
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<th:block th:include="include :: header('工具库')"/>
</head>
<style>
td {
horiz-align: center;
text-align: left;
padding: 10px;
}
</style>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-member-edit">
<div class="form-group">
<button id="fun1" type="button" class="btn btn-w-m btn-success" href="javascript:void(0)"
onclick="$.operate.edit(1)">
导出演出订单手机号
</button>
</div>
</form>
</div>
<th:block th:include="include :: footer"/>
<script th:inline="javascript">
var prefix = ctx+"tools/";
console.log(ctx);
var options = {
url: prefix,
modalName: "",
updateUrl: prefix + "details/{id}"
};
$.table.init(options);
var fun1Flag = [[${@permission.hasPermi('tools:fun1')}]];
if (fun1Flag == "hidden") {
document.getElementById("fun1").style.display = "none";
}
</script>
</body>
</html>
......@@ -84,7 +84,8 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
//initCoupon.setRedeemValidity();
//initCoupon.setRedeemStart();
//initCoupon.setRedeemStop();
//initCoupon.setEffectAt();
initCoupon.setEffectAt(nowTime);
// 会员权益券失效时间duedAt需要同步会员到期时间expiryAt
//initCoupon.setExpireAt();
initCoupon.setOperator(operator);
initCoupon.setCreatedAt(nowTime);
......@@ -151,6 +152,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
updateCoupon.setValMinus(parameter.getValMinus());
updateCoupon.setOverlay(parameter.getOverlay());
updateCoupon.setOperator(operator);
updateCoupon.setEffectAt(nowTime);// 会员权益券失效时间duedAt需要同步会员到期时间expiryAt
updateCoupon.setUpdatedAt(nowTime);
......
......@@ -13,6 +13,7 @@ import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dao.*;
import com.liquidnet.service.kylin.dto.param.*;
import com.liquidnet.service.kylin.dto.vo.admin.*;
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.partner.KylinPerformanceMisVo;
import com.liquidnet.service.kylin.dto.vo.partner.KylinTicketPartnerVo;
......@@ -743,6 +744,11 @@ public class KylinPerformancesAdminServiceImpl extends ServiceImpl<KylinPerforma
Query.query(Criteria.where("orderTicketsId").in(orderTicketIdList)).getQueryObject(),
new BasicDBObject("$set", mongoConverter.convertToMongoType(mapMongo))
);
mapMongo.put("useEnd", ticketVo.getUseEnd());
mongoTemplate.getCollection(KylinOrderTicketEntitiesVo.class.getSimpleName()).updateMany(
Query.query(Criteria.where("orderId").in(orderTicketIdList)).getQueryObject(),
new BasicDBObject("$set", mongoConverter.convertToMongoType(mapMongo))
);
log.debug("修改场次相关 mongo time -> " + (System.currentTimeMillis() - time1) + " ms ");
time1 = System.currentTimeMillis();
......
......@@ -422,7 +422,7 @@ public class KylinRefundsStatusServiceImpl {
params.add("paymentId", oderInfo.getPaymentId());
params.add("paymentType", oderInfo.getPaymentType());
params.add("price", String.valueOf(refundPrice));
params.add("priceTotal", String.valueOf(oderInfo.getPriceTotal()));
params.add("priceTotal", String.valueOf(oderInfo.getPriceActual()));
params.add("reason", "按需退款");
MultiValueMap<String, String> headers = new LinkedMultiValueMap();
......
......@@ -15,10 +15,10 @@ liquidnet:
rabbitmq:
connection-timeout: 5000
mysql:
database-name: dev_ln_scene
database-name: test_ln_scene
mongodb:
sslEnabled: false
database: dev_ln_scene
database: test_ln_scene
al-oss:
imgUrl: "https://img.zhengzai.tv/"
appUrl: "https://app.zhengzai.tv/"
......
......@@ -131,7 +131,7 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
this.setCcode(cCode);
this.setState(1);
this.setBindAt(LocalDateTime.now());
this.setBindAt(couponInfoDto.getEffectAt());
this.setDuedAt(duedAt);
this.setUseRules(couponInfoDto.getUseRules());
......@@ -163,8 +163,6 @@ public class CandyUserCouponBasicDto implements Serializable, Cloneable {
this.setUid(uid);
this.setState(1);
this.setBindAt(LocalDateTime.now());
// TODO: 2021/9/1
this.setBindAt(commonCouponBasicDto.getEffectAt());
this.setDuedAt(commonCouponBasicDto.getExpireAt());
......
......@@ -20,4 +20,5 @@ public class OrderScriptDto {
String userId;
Integer number;
String couponCode;
Integer couponType;
}
......@@ -54,6 +54,7 @@
<result column="number" property="number"/>
<result column="user_id" property="userId"/>
<result column="coupon_code" property="couponCode"/>
<result column="coupon_type" property="couponType"/>
</resultMap>
<select id="getPerformanceRefundOrderStatis" resultType="java.util.HashMap">
......@@ -267,7 +268,8 @@
ticket_id,
number,
user_id,
oc.coupon_code
oc.coupon_code,
oc.coupon_type
from (SELECT ot.mid,
order_tickets_id,
order_code,
......@@ -278,9 +280,8 @@
FROM kylin_order_tickets AS ot
inner JOIN kylin_order_ticket_status AS ots ON ots.order_id = ot.order_tickets_id
inner JOIN kylin_order_ticket_relations AS otr ON otr.order_id = ot.order_tickets_id
WHERE status = 0 AND NOW() > DATE_SUB(ot.created_at,INTERVAL -(pay_countdown_minute+1) MINUTE)) as s
left JOIN kylin_order_coupons AS oc ON oc.order_id = s.order_tickets_id where oc.coupon_type != 101 or
oc.coupon_code is null
WHERE status = 0 AND NOW() > DATE_SUB(ot.created_at, INTERVAL -(pay_countdown_minute + 1) MINUTE)) as s
left JOIN kylin_order_coupons AS oc ON oc.order_id = s.order_tickets_id
<if test="userId!=''">
AND user_id = #{userId}
</if>
......
......@@ -29,10 +29,7 @@ import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
......@@ -262,6 +259,7 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
updateExistUserMemberVo.setState(1);
updateExistUserMemberVo.setExpiryAt(expiryAt);
updateExistUserMemberVo.setUpdatedAt(now);
long s = System.currentTimeMillis();
adamRdmService.setUserMemberVoByUid(handleMemberOrderVo.getUid(), updateExistUserMemberVo);
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
......@@ -471,6 +469,7 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
(expiryAt.isBefore(now) ? now : expiryAt).plusDays(initMemberOrderVo.getDays())
.withHour(23).withMinute(59).withSecond(59)
);
updateExistUserMemberVo.setUpdatedAt(now);
toMqSqls.add(SqlMapping.get("adam_user_member.update"));
upsertUserMemberObjs.add(new Object[]{
updateExistUserMemberVo.getState(), updateExistUserMemberVo.getExpiryAt(), now, updateExistUserMemberVo.getUid()
......@@ -567,7 +566,9 @@ public class AdamMemberOrderServiceImpl implements IAdamMemberOrderService {
orderVos.forEach(r -> vos.add(AdamMemberOrderSimpleVo.getNew().copy(r)));
pagedResult.setTotal(orderVos.size(), 20);
vos.sort(Comparator.comparing(AdamMemberOrderSimpleVo::getCreatedAt).reversed());
pagedResult.setTotal(orderVos.size(), 40);
pagedResult.setList(vos);
}
......
......@@ -215,7 +215,6 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
for (CandyUserCouponBasicDto dtoItem : dtoList) {
CandyCouponVo baseVo = CouponBaseUtil.getGoodCouponUserVo(dtoItem, priceTotal, goodId, dtoList.size());
if (type == 1) {
if (baseVo.getState().equals(3) || dtoItem.getState().equals(5)) {
continue;
......@@ -477,13 +476,13 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
//删除code redis
redisDataUtils.delCouponByCode(ccode);
//添加baseDto -> baseDtoList
redisDataUtils.addCouponByUid(uid, baseDto,userCreateTime);
redisDataUtils.addCouponByUid(uid, baseDto, userCreateTime);
//入库
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
LinkedList<Object[]> objsUserCoupon = CollectionUtil.linkedListObjectArr(),
objsCouponCode = CollectionUtil.linkedListObjectArr();
toMqSqls.add(SqlMapping.get("candy_coupon.receive"));
objsUserCoupon.add(new Object[]{uCouponId, uid, 1, infoDto.getCouponId(), ccode, now, now, infoDto.getExpireAt()});
objsUserCoupon.add(new Object[]{uCouponId, uid, 1, infoDto.getCouponId(), ccode, infoDto.getEffectAt(), now, infoDto.getExpireAt()});
toMqSqls.add(SqlMapping.get("candy_coupon_code.receive"));// state:状态[0-可用|1-已用]
objsCouponCode.add(new Object[]{1, uCouponId, uid, mobile, now, now, dto.getCouponId(), ccode});
queueUtils.sendMsgByRedis(
......@@ -523,7 +522,7 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
String uid = CurrentUtil.getCurrentUid();
LocalDateTime userCreateTime;
try {
userCreateTime =DateUtil.Formatter.yyyyMMddHHmmssTrim.parse(CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_UCREATED).toString());
userCreateTime = DateUtil.Formatter.yyyyMMddHHmmssTrim.parse(CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_UCREATED).toString());
} catch (Exception e) {
userCreateTime = null;
}
......
# -- 使用券 --
candy_coupon.use=UPDATE candy_user_coupon SET state = 3 ,used_at = ? , used_for = ? WHERE uid = ? AND ucoupon_id = ?
candy_coupon.use_insert=INSERT INTO candy_user_coupon (ucoupon_id , uid , state , coupon_id , used_at , used_for ) VALUE ( ? , ? , 3 , ? , ? )
candy_coupon.use_insert=INSERT INTO candy_user_coupon (ucoupon_id , uid , state , coupon_id , used_at , used_for ) VALUE ( ? , ? , 3 , ? , ? ,? )
# -- 回退券 --
candy_coupon.back=UPDATE candy_user_coupon SET state = 1 WHERE uid = ? AND ucoupon_id = ?
# -- 领取券 --
......
......@@ -81,8 +81,11 @@ public class KylinPerformancesController {
@GetMapping("noticeList")
@ApiOperation("演出预告列表")
public ResponseDto<HashMap<String, Object>> noticeList() {
HashMap<String, Object> result = kylinPerformancesService.noticeList();
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "type为1的时候合并巡演")
})
public ResponseDto<HashMap<String, Object>> noticeList(@RequestParam Integer type) {
HashMap<String, Object> result = kylinPerformancesService.noticeList(type);
return ResponseDto.success(result);
}
......
......@@ -100,7 +100,7 @@ public class KylinOrderTicketsRefundServiceImpl {
item.setPriceActual(orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).divide(BigDecimal.valueOf(orderTicketVo.getNumber()), 2, BigDecimal.ROUND_HALF_UP));
item.setPriceCanRefund(dataUtils.getCanRefundOrderEntitiesPrice(orderTicketVo, kylinOrderRefundsVoBaseList, item.getOrderTicketEntitiesId()));
// 手续费处理
BigDecimal chargesRatio = getChargesRatio(item.getUseStart(), performanceVo.getIsRefundPoundage());
BigDecimal chargesRatio = getChargesRatio(orderTicketVo.getUseStart(), performanceVo.getIsRefundPoundage());
BigDecimal chargesPrice = item.getPriceCanRefund().multiply(chargesRatio).setScale(2, BigDecimal.ROUND_HALF_UP);
item.setPriceCanRefund(item.getPriceCanRefund().subtract(chargesPrice));
item.setChargesRatio(chargesRatio);
......
......@@ -135,7 +135,7 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
return info;
}
public HashMap<String, Object> noticeList() {
public HashMap<String, Object> noticeList(Integer type) {
/*if (-1 != DateUtil.compareStrDay(timeStart, toDayEndTimeStr) && -1 == DateUtil.compareStrDay(timeStart, threeDaysLaterStr)) {
threeDaysList.add(info);
}*/
......@@ -527,13 +527,17 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
// 3审核通过;4审核未通过;6在售;7停售;8售罄;9未开始;10已结束
int getStatus = ticketItem.getStatus();
int status = getStatus;
if (getStatus == 8) {
getStatus = 6;
}
boolean isSellOut = dataUtils.ticketIsSoldOut(ticketItem.getTicketsId());
if (isSellOut) {
status = 8;
getStatus = 8;
}
if (null != ticketItem) {
// 判断售罄
boolean isSellOut = dataUtils.ticketIsSoldOut(ticketItem.getTicketsId());
if (isSellOut) {
getStatus = 8;
status = 8;
}
if (6 == getStatus || 9 == getStatus || 10 == getStatus) {
String timeStart = ticketItem.getTimeStart();
String timeEnd = ticketItem.getTimeEnd();
......@@ -623,22 +627,22 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
if (useScope.equals(91)) {//场次
List<KylinTicketTimesPartnerVo> voTimes = mongoTemplate.find(Query.query(Criteria.where("ticketTimesId").is(busiId)),
KylinTicketTimesPartnerVo.class, KylinTicketTimesPartnerVo.class.getSimpleName());
if(voTimes.size()<=0){
if (voTimes.size() <= 0) {
return ResponseDto.failure();
}else{
} else {
return ResponseDto.success(voTimes.get(0).getPerformancesId());
}
} else if (useScope.equals(92)) {//票
List<KylinTicketPartnerVo> voTickets = mongoTemplate.find(Query.query(Criteria.where("ticketsId").is(busiId)),
KylinTicketPartnerVo.class, KylinTicketPartnerVo.class.getSimpleName());
if(voTickets.size()<=0) {
if (voTickets.size() <= 0) {
return ResponseDto.failure();
}else{
} else {
List<KylinTicketTimesPartnerVo> voTimes = mongoTemplate.find(Query.query(Criteria.where("ticketTimesId").is(voTickets.get(0).getTimesId())),
KylinTicketTimesPartnerVo.class, KylinTicketTimesPartnerVo.class.getSimpleName());
if(voTimes.size()<=0){
if (voTimes.size() <= 0) {
return ResponseDto.failure();
}else{
} else {
return ResponseDto.success(voTimes.get(0).getPerformancesId());
}
}
......
......@@ -380,9 +380,8 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
couponsAdvance.setCouponPrice(BigDecimal.ZERO);
couponsAdvance.setCreatedAt(now);
couponsList.add(couponsAdvance);
sqlsDataE.add(new Object[]{
orderTicketId, payOrderParam.getVoucherCode(), typeVoucher, priceVoucher, now, now
orderTicketId, payOrderParam.getAdvanceCode(), typeVoucher, priceVoucher, now, now
});
}
......
......@@ -78,7 +78,7 @@ public class OrderRefundOvertimeServiceImpl implements IKylinOrderRefundsService
// dataUtils.changeBuyInfo(orderInfo.getUserId(), entitiesInfo.getEnterIdCode(), orderInfo.getPerformanceId(), entitiesInfo.getTicketId(), -1);
// }
// 退所有优惠券
ArrayList<KylinOrderCoupons> orderCoupon = dataUtils.getOrderCoupon(orderTicketsId);
/*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);
......@@ -93,7 +93,7 @@ public class OrderRefundOvertimeServiceImpl implements IKylinOrderRefundsService
orderTicketsId, params, candyUrl);
String returnData = HttpUtil.post(candyUrl + "/candy-coupon/useBack", params, headers);
log.info("订单超时支付refundApply-退券结果:[returnData={}]", returnData);
}
}*/
return true;
} else {
return false;
......
......@@ -252,10 +252,7 @@ public class OrderUtils {
ArrayList<BackCouponParam> params = new ArrayList();
params.add(param);
String jsonString = JSON.toJSONString(params);
System.out.println("jsonString = " + jsonString);
String returnData = HttpUtil.postRaw(candyUrl + "/candy-coupon/useBack", jsonString, header);
System.out.println("returnData = " + returnData);
}
/**
......
......@@ -13,6 +13,10 @@ import com.liquidnet.service.adam.entity.AdamUserMember;
import com.liquidnet.service.adam.mapper.AdamMemberOrderMapper;
import com.liquidnet.service.adam.mapper.AdamMemberRefundMapper;
import com.liquidnet.service.adam.mapper.AdamUserMemberMapper;
import com.liquidnet.service.candy.constant.CandyRedisConst;
import com.liquidnet.service.candy.dto.CandyUserCouponBasicDto;
import com.liquidnet.service.candy.entity.CandyUserCoupon;
import com.liquidnet.service.candy.mapper.CandyUserCouponMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -21,6 +25,8 @@ import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Slf4j
......@@ -30,6 +36,8 @@ public class PlatformMemberRefundService extends ServiceImpl<AdamMemberRefundMap
private AdamMemberOrderMapper adamMemberOrderMapper;
@Autowired
private AdamUserMemberMapper adamUserMemberMapper;
@Autowired
private CandyUserCouponMapper candyUserCouponMapper;
@Autowired
private RedisUtil redisUtil;
......@@ -87,8 +95,10 @@ public class PlatformMemberRefundService extends ServiceImpl<AdamMemberRefundMap
private void refundSuccProcessing(String orderNo, LocalDateTime now) {
AdamMemberOrder memberOrder = adamMemberOrderMapper.selectOne(Wrappers.lambdaUpdate(AdamMemberOrder.class).eq(AdamMemberOrder::getOrderNo, orderNo));
LocalDateTime newExpiryAt = null;
List<String> removeUcouponIdList = null;
{// 同步用户端信息
// 同步更新REDIS会员订单信息
String moKey = AdamRedisConst.INFO_MEMBER_ORDER + memberOrder.getUid();
ArrayList<AdamMemberOrderVo> vos = (ArrayList<AdamMemberOrderVo>) redisUtil.get(moKey);
int idx = IntStream.range(0, vos.size()).filter(i -> vos.get(i).getOrderNo().equals(memberOrder.getOrderNo())).findFirst().orElse(-1);
......@@ -102,8 +112,14 @@ public class PlatformMemberRefundService extends ServiceImpl<AdamMemberRefundMap
String umKey = AdamRedisConst.INFO_USER_MEMBER.concat(memberOrder.getUid());
AdamUserMemberVo userMemberVo = (AdamUserMemberVo) redisUtil.get(umKey);
// 用户会员权益券信息
String uckey = CandyRedisConst.BASIC_USER_COUPON.concat(memberOrder.getUid());
List<CandyUserCouponBasicDto> userCouponBasicDtoList = (List<CandyUserCouponBasicDto>) redisUtil.get(uckey);
// 同步更新REDIS会员信息
if (userMemberVo.getState() == 1) {// 非拉黑用户,则更新到期时间为减去订单标记的会员有效期的日期
newExpiryAt = userMemberVo.getExpiryAt().minusDays(memberOrder.getDays());
LocalDateTime expiryAt = userMemberVo.getExpiryAt();
newExpiryAt = expiryAt.minusDays(memberOrder.getDays());
LocalDate nowDate = now.toLocalDate();
LocalDate newExpiryDate = newExpiryAt.toLocalDate();
......@@ -117,20 +133,45 @@ public class PlatformMemberRefundService extends ServiceImpl<AdamMemberRefundMap
syncVo = redisUtil.set(umKey, userMemberVo);
log.info("###会员退款回调处理成功:更新REDIS会员信息{}[orderNo:{},uid:{}]", syncVo ? "成功" : "失败", orderNo, memberOrder.getUid());
AdamUserMember updateInfoUserMember = new AdamUserMember();
updateInfoUserMember.setExpiryAt(newExpiryAt);
updateInfoUserMember.setUpdatedAt(now);
updateInfoUserMember.setComment("R");
int updateRst = adamUserMemberMapper.update(updateInfoUserMember, Wrappers.lambdaUpdate(AdamUserMember.class).eq(AdamUserMember::getUid, memberOrder.getUid()));
log.info("###会员退款回调处理成功:更新DB会员信息{}[orderNo:{},uid:{}]", updateRst <= 0 ? "失败" : "成功", orderNo, memberOrder.getUid());
removeUcouponIdList = userCouponBasicDtoList.stream()
.filter(r -> (r.getExclusive() == 1 && r.getDuedAt().compareTo(expiryAt) == 0))
.map(CandyUserCouponBasicDto::getUcouponId)
.collect(Collectors.toList());
} else if (userMemberVo.getState() == 2) {// 拉黑用户
removeUcouponIdList = userCouponBasicDtoList.stream()
.filter(r -> (r.getExclusive() == 1))
.map(CandyUserCouponBasicDto::getUcouponId)
.collect(Collectors.toList());
}
// 同步删除REDIS用户会员权益券信息
List<String> finalRemoveUcouponIdList = removeUcouponIdList;
userCouponBasicDtoList.removeIf(r -> finalRemoveUcouponIdList.contains(r.getUcouponId()));
redisUtil.set(uckey, userCouponBasicDtoList);
}
// 同步更新MYSQL用户会员权益券信息
LambdaUpdateWrapper<CandyUserCoupon> candyUserCouponLambdaUpdateWrapper = Wrappers.lambdaUpdate(CandyUserCoupon.class);
candyUserCouponLambdaUpdateWrapper.in(CandyUserCoupon::getUcouponId, removeUcouponIdList.toArray()).eq(CandyUserCoupon::getState, 1);
CandyUserCoupon updateInfoUserCoupon = new CandyUserCoupon();
updateInfoUserCoupon.setState(2);
updateInfoUserCoupon.setUpdatedAt(now);
updateInfoUserCoupon.setOperator("system.vip.refund");
int updateRst = candyUserCouponMapper.update(updateInfoUserCoupon, candyUserCouponLambdaUpdateWrapper);
log.info("###会员退款回调处理成功:更新DB会员权益券信息{}[orderNo:{},uid:{}]", updateRst <= 0 ? "失败" : "成功", orderNo, memberOrder.getUid());
// 同步更新MYSQL会员信息
AdamUserMember updateInfoUserMember = new AdamUserMember();
updateInfoUserMember.setExpiryAt(newExpiryAt);
updateInfoUserMember.setUpdatedAt(now);
updateInfoUserMember.setComment("R");
updateRst = adamUserMemberMapper.update(updateInfoUserMember, Wrappers.lambdaUpdate(AdamUserMember.class).eq(AdamUserMember::getUid, memberOrder.getUid()));
log.info("###会员退款回调处理成功:更新DB会员信息{}[orderNo:{},uid:{}]", updateRst <= 0 ? "失败" : "成功", orderNo, memberOrder.getUid());
// 同步更新MYSQL会员订单信息
AdamMemberOrder updateInfoMemberOrder = new AdamMemberOrder();
updateInfoMemberOrder.setMid(memberOrder.getMid());
updateInfoMemberOrder.setState(5);
updateInfoMemberOrder.setUpdatedAt(now);
int updateRst = adamMemberOrderMapper.updateById(updateInfoMemberOrder);
updateRst = adamMemberOrderMapper.updateById(updateInfoMemberOrder);
log.info("###会员退款回调处理成功:更新DB订单信息{}[orderNo:{}]", updateRst <= 0 ? "失败" : "成功", orderNo);
}
}
......@@ -7,6 +7,7 @@ import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.entity.AdamUserMember;
import com.liquidnet.service.candy.constant.CandyRedisConst;
import com.liquidnet.service.candy.dto.*;
......@@ -254,6 +255,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
int eventAmt = mgtCoupon.getEventAmt(), pl = 0, limitSize = eventLimitArr.length;
log.info("发放券处理中:目标指定手机号[总数:{},发放量:{}]", limitSize, eventAmt);
// 指定手机号发放券中,会员权益券失效时间duedAt需要同步会员到期时间expiryAt
boolean isMemberRightsCoupon = coupon.getExclusive() == 1;
for (int i = 0; i < eventAmt; i++) {
for (String r : eventLimitArr) {
String uid = (String) redisUtil.get(AdamRedisConst.IDENTITY_MOBILE.concat(r));
......@@ -265,8 +268,14 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
userCoupon.setUid(uid);
userCoupon.setCouponId(coupon.getCouponId());
userCoupon.setState(1);
userCoupon.setBindAt(coupon.getEffectAt());
userCoupon.setDuedAt(coupon.getExpireAt());
if (isMemberRightsCoupon) {
AdamUserMemberVo vo = (AdamUserMemberVo) redisUtil.get(AdamRedisConst.INFO_USER_MEMBER.concat(uid));
userCoupon.setDuedAt(vo.getExpiryAt());
} else {
userCoupon.setDuedAt(coupon.getExpireAt());
}
userCoupon.setCreatedAt(now);
initUserCouponList.add(userCoupon);
......
......@@ -15,13 +15,11 @@ import com.liquidnet.service.kylin.mapper.KylinOrderTaskMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketRelationsMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketStatusMapper;
import com.liquidnet.service.kylin.mapper.KylinOrderTicketsMapper;
import com.liquidnet.service.platform.service.impl.candy.PlatformCandyCouponService;
import com.liquidnet.service.platform.service.impl.candy.PlatformCandyUserCouponService;
import com.liquidnet.service.platform.utils.DataUtils;
import com.liquidnet.service.platform.utils.QueueUtils;
import com.mongodb.BasicDBObject;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter;
......@@ -71,7 +69,8 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K
HashMap<String, Integer> mapSurplusGeneral = new HashMap<>();
ArrayList<String> orderDataList = CollectionUtil.arrayListString();
ArrayList<String> orderIdList = CollectionUtil.arrayListString();
HashMap<String, Object> mapMongo = new HashMap<>();
HashMap<String, Object> mapMongo = CollectionUtil.mapStringObject();
HashMap<String, String> orderTicketId = CollectionUtil.mapStringString();
ArrayList<String> couponDataList = CollectionUtil.arrayListString();
ArrayList<String> couponIdList = CollectionUtil.arrayListString();
......@@ -82,13 +81,19 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K
mapMongo.put("status", KylinTableStatusConst.ORDER_STATUS2);
mapMongo.put("updatedAt", DateUtil.Formatter.yyyyMMddHHmmssSSS.format(now));
mapMongo.put("changeDate", now);
orderDataList.add(item.getOrderTicketsId() + "," + item.getUserId());
orderIdList.add(item.getOrderTicketsId());
couponDataList.add(item.getCouponCode() + "," + item.getUserId());
couponIdList.add(item.getCouponCode());
mapSurplusGeneral.put(item.getTicketId(), mapSurplusGeneral.get(item.getTicketId()) == null ? item.getNumber() : mapSurplusGeneral.get(item.getTicketId()) + item.getNumber());
if (!orderTicketId.containsKey(item.getOrderTicketsId())) {
orderTicketId.put(item.getOrderTicketsId(), item.getOrderTicketsId());
orderDataList.add(item.getOrderTicketsId() + "," + item.getUserId());
orderIdList.add(item.getOrderTicketsId());
mapSurplusGeneral.put(item.getTicketId(), mapSurplusGeneral.get(item.getTicketId()) == null ? item.getNumber() : mapSurplusGeneral.get(item.getTicketId()) + item.getNumber());
}
if (item.getCouponType() != null) {
if (item.getCouponType() != 101) {
couponDataList.add(item.getCouponCode() + "," + item.getUserId());
couponIdList.add(item.getCouponCode());
}
}
} catch (Exception e) {
log.debug("CHECK TIME SYNC = " + e.getMessage());
e.printStackTrace();
return false;
}
......@@ -96,7 +101,6 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K
}
}
currentTime = System.currentTimeMillis() - currentTime;
log.debug("FOR 循环 -> time:" + (currentTime) + "毫秒");
if (orderDataList.size() > 0) {
//mysql
......@@ -147,11 +151,11 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K
break;
}
}
log.debug("MQLIST SIZE = " + mqList.size());
queueUtils.sendMsgByRedis(MQConst.KylinQueue.SQL_ORDER_CLOSE.getKey(), OrderCloseMapping.get(mqList));
}
platformCandyUserCouponService.useBackCoupon(couponDataList, couponIdList);
if (couponIdList.size() > 0) {
platformCandyUserCouponService.useBackCoupon(couponDataList, couponIdList);
}
}
return true;
}
......@@ -159,7 +163,7 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K
public boolean checkTransferOrder(Integer minute) {
LocalDateTime now = LocalDateTime.now();
List<KylinOrderTask> task = orderTaskMapper.selectList(
Wrappers.lambdaQuery(KylinOrderTask.class).eq(KylinOrderTask::getStatus, 10).last("and NOW() > DATE_SUB(created_at,INTERVAL -("+minute+") MINUTE)")
Wrappers.lambdaQuery(KylinOrderTask.class).eq(KylinOrderTask::getStatus, 10).last("and NOW() > DATE_SUB(created_at,INTERVAL -(" + minute + ") MINUTE)")
);
ArrayList<String> orderIdList = CollectionUtil.arrayListString();
for (KylinOrderTask item : task) {
......@@ -190,7 +194,7 @@ public class DMCheckOrderTimeImpl extends ServiceImpl<KylinOrderTicketsMapper, K
orderTicketRelations.setUpdatedAt(now);
orderTicketRelationsMapper.update(orderTicketRelations, new UpdateWrapper<KylinOrderTicketRelations>().in("order_id", orderIdList));
// mysql 删除持久化数据
orderTaskMapper.delete(Wrappers.lambdaQuery(KylinOrderTask.class).eq(KylinOrderTask::getStatus, 10).last("and NOW() > DATE_SUB(created_at,INTERVAL -("+minute+") MINUTE)"));
orderTaskMapper.delete(Wrappers.lambdaQuery(KylinOrderTask.class).eq(KylinOrderTask::getStatus, 10).last("and NOW() > DATE_SUB(created_at,INTERVAL -(" + minute + ") MINUTE)"));
//处理原订单redis
int forSize = 500;
int forCount = orderIdList.size() % forSize == 0 ? orderIdList.size() / forSize : (orderIdList.size() / forSize) + 1;
......
......@@ -4,11 +4,9 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.google.common.base.Joiner;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.candy.param.BackCouponParam;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
import com.liquidnet.service.kylin.dto.param.RefundCallbackParam;
import com.liquidnet.service.kylin.dto.vo.mongo.*;
......@@ -100,7 +98,7 @@ public class KylinRefundsStatusServiceImpl {
);
KylinOrderTicketStatus orderStatusTable = new KylinOrderTicketStatus();
int newStatus = 0;
if (refundCallbackParam.getRefundPrice().add(refundInfo.getPriceCharges()).add(orderInfo.getPriceRefund()).add(orderInfo.getRefundPriceCharges()).compareTo(orderInfo.getPriceActual()) == 0) {
if (refundCallbackParam.getRefundPrice().add(refundInfo.getPriceCharges()).add(orderInfo.getPriceRefund()).add(orderInfo.getRefundPriceCharges()).compareTo(orderInfo.getPriceActual()) >= 0) {
newStatus = KylinTableStatusConst.ORDER_STATUS4;
} else {
newStatus = KylinTableStatusConst.ORDER_STATUS6;
......@@ -168,6 +166,9 @@ public class KylinRefundsStatusServiceImpl {
// 订单表
BigDecimal price = orderInfo.getPriceRefund().add(refundCallbackParam.getRefundPrice());
if (price.compareTo(orderInfo.getPriceActual()) == 1) {
price = orderInfo.getPriceActual();
}
Integer num = orderInfo.getRefundNumber() + refundNumber;
KylinOrderTickets update = new KylinOrderTickets();
update.setRefundNumber(num);
......@@ -233,19 +234,23 @@ public class KylinRefundsStatusServiceImpl {
if (performanceVo.getIsRefundVoucher() > 0) {
ArrayList<KylinOrderCoupons> orderCoupon = dataUtils.getOrderCoupon(orderTicketsId);
if (!CollectionUtil.isEmpty(orderCoupon)) {
BackCouponParam param = BackCouponParam.getNew();
List<String> uCouponIds = orderCoupon.stream().filter(r -> r.getCouponType() != 101).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");
param.setuCouponIds(uCouponIdsStr);
param.setUid(orderInfo.getUserId());
ArrayList<BackCouponParam> params = new ArrayList();
params.add(param);
String jsonString = JSON.toJSONString(params);
log.info("订单退款回调orderTicketRefunded-退所有优惠券:[orderTicketsId={}, [params={}, candyUrl={}]",
orderTicketsId, params, candyUrl);
String returnData = HttpUtil.post(candyUrl + "/candy-coupon/useBack", params, headers);
log.info("超时支付退款退券结果:{}", returnData);
try {
String returnData = HttpUtil.postRaw(candyUrl + "/candy-coupon/useBack", jsonString, null);
log.info("订单退款回调退券结果:[returnData={}]", returnData);
} catch (Exception e) {
log.info("订单退款回调退券异常:[errorMsg={}, e={}]", e.getMessage(), e);
}
}
}
}
......
......@@ -61,6 +61,7 @@ public class OrderRefundsCallbackServiceImpl extends ServiceImpl<KylinOrderRefun
private DataUtils dataUtils;
public String refundCallback(RefundCallbackParam refundCallbackParam) {
log.info("订单退款回调参数:[RefundCallbackParam={}]", refundCallbackParam);
KylinOrderRefunds refundInfo = kylinOrderRefundsMapper.selectOne(
new UpdateWrapper<KylinOrderRefunds>()
.eq("order_refund_code", refundCallbackParam.getOrderRefundCode())
......
package com.liquidnet.service.platform.utils;
import com.liquidnet.commons.lang.constant.LnsEnum;
import com.liquidnet.commons.lang.util.CurrentUtil;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
/**
* <p>
......@@ -30,6 +35,9 @@ public class ShunfengSignUtils {
*/
private final static Long CHECK_TIME = 600000L;
@Autowired
Environment environment;
/**
* 生成签名
* @param timestamp 时间戳
......@@ -59,6 +67,9 @@ public class ShunfengSignUtils {
* @return
*/
public boolean receiveRequestAndCheckSign(String params, HttpServletRequest request) {
if (Arrays.asList(LnsEnum.ENV.dev.name(), LnsEnum.ENV.test.name()).contains(environment.getProperty(CurrentUtil.CK_ENV_ACTIVE))) {
return true;
}
log.debug("params {}", params);
// 请求方APPID
String sendAppId = request.getHeader("sendAppId");
......
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