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

Commit 6c2accda authored by jiangxiulong's avatar jiangxiulong

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

parents 1b6d0bdf 1eb145ca
......@@ -14,7 +14,8 @@ public class AdamEntersParam implements java.io.Serializable {
@ApiModelProperty(position = 10, required = false, value = "入场人ID,编辑时必传[50]")
private String entersId;
@ApiModelProperty(position = 11, required = true, value = "入场人姓名[50]", example = "测试")
@Pattern(regexp = LnsRegex.Valid.CHINESE_HANZI, message = "姓名必须为2~20位汉字")
// @Pattern(regexp = LnsRegex.Valid.CHINESE_HANZI, message = "姓名必须为2~20位汉字")
@Size(min = 1, max = 30)
private String name;
@ApiModelProperty(position = 12, required = true, value = "入场人手机号[11]", example = "13100000000")
@Pattern(regexp = "\\d{11}", message = "手机号格式有误")
......@@ -22,7 +23,8 @@ public class AdamEntersParam implements java.io.Serializable {
@ApiModelProperty(position = 13, required = true, value = "证件类型:1-大陆身份证,2-港澳通行证,3-台胞证,4-护照,5-军官证", allowableValues = "1,2,3,4,5")
@NotNull @Min(1) @Max(5)
private Integer type;
@ApiModelProperty(position = 14, required = true, value = "入场人证件号[11]", example = "110101110001010111")
// @Pattern(regexp = LnsRegex.Valid.CHINESE_ID_CARD, message = "身份证号格式有误")
@ApiModelProperty(position = 14, required = true, value = "入场人证件号[30]", example = "110101110001010111")
@Pattern(regexp = LnsRegex.Valid.LETTER_NUMBER, message = "证件号格式有误")
@Size(min = 1, max = 30)
private String idCard;
}
......@@ -21,4 +21,5 @@ public class KylinOrderTicketEntitiesPreRefundVo implements Serializable, Clonea
private BigDecimal priceActual;
private BigDecimal priceCanRefund;
private String ticketTitle;
private Integer isPayment;
}
......@@ -59,7 +59,7 @@ public interface IKylinOrderTicketsService {
* @param picList 证据截图
* @return 是否成功
*/
ResponseDto<String> sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList);
String sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList);
//退款撤回
ResponseDto<Boolean> orderRefundWithdraw(String orderRefundsId);
......
......@@ -8,7 +8,7 @@
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-refund-edit" th:object="${performanceRefundConfigVo}">
<div class="form-group">
<label class="col-sm-3 control-label is-required">performances_id:</label>
<label class="col-sm-3 control-label is-required">演出id:</label>
<div class="col-sm-8">
<input name="performancesId" th:field="*{performancesId}" class="form-control" type="text" readonly>
</div>
......@@ -80,11 +80,16 @@
refundOpenTime: $("input[name^='refundOpenTime']").val(),
refundCloseTime: $("input[name^='refundCloseTime']").val()
}
$.operate.post(prefix + "/refundConfig/change",
param,
function (res) {
location.reload();
});
if ($("input[name^='refundCloseTime']").val() == "" || $("input[name^='refundOpenTime']").val() == "") {
alert("定时时间不能为空");
} else {
$.operate.post(prefix + "/refundConfig/change",
param,
function (res) {
location.reload();
});
}
}
</script>
</body>
......
......@@ -22,5 +22,9 @@ public class LnsRegex {
* 身份证号(15位||18位)
*/
public static final String CHINESE_ID_CARD = "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)";
/**
* 字母、数字组合
*/
public static final String LETTER_NUMBER = "^[A-Z0-9]+$";
}
}
......@@ -2,6 +2,8 @@ package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.common.exception.constant.ErrorCode;
import com.liquidnet.commons.lang.constant.LnsRegex;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.SensitizeUtil;
import com.liquidnet.service.adam.dto.AdamEntersParam;
......@@ -23,6 +25,7 @@ import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Optional;
import java.util.regex.Pattern;
/**
* <p>
......@@ -48,6 +51,12 @@ public class AdamEntersController {
@ApiOperation(value = "添加入场人")
@PostMapping("add")
public ResponseDto<String> add(@RequestBody @Valid AdamEntersParam parameter) {
if (1 == parameter.getType()) {
if (!Pattern.matches(LnsRegex.Valid.CHINESE_HANZI, parameter.getName())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "姓名必须为2~20位汉字");
}
}
List<AdamEntersVo> vos = adamRdmService.getEntersVoByUid(CurrentUtil.getCurrentUid());
Optional<AdamEntersVo> any = vos.stream().filter(r -> (r.getIdCard().equals(parameter.getIdCard())) && r.getType().equals(parameter.getType())).findAny();
......@@ -93,6 +102,11 @@ public class AdamEntersController {
@ApiOperation(value = "编辑入场人")
@PostMapping("edit")
public ResponseDto<Object> edit(@RequestBody @Valid AdamEntersParam parameter) {
if (1 == parameter.getType()) {
if (!Pattern.matches(LnsRegex.Valid.CHINESE_HANZI, parameter.getName())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "姓名必须为2~20位汉字");
}
}
if (StringUtils.isBlank(parameter.getEntersId())) {
return ResponseDto.failure(ErrorMapping.get("10015"));
}
......
......@@ -100,14 +100,18 @@ public class KylinOrderTicketsController {
@PostMapping("sendOrderRefunds")
@ApiOperation("发起退款申请")
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<HashMap<String,String>> sendOrderRefund(@RequestParam(value = "orderId", required = true) @NotNull(message = "订单id不能为空") String orderId,
@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) {
String orderRefundId = orderTicketsService.sendOrderRefund(orderId, orderTicketEntitiesId, reason, picList).getData();
HashMap<String,String> map = new HashMap<String,String>();
map.put("orderRefundsId",orderRefundId);
return ResponseDto.success(map);
public ResponseDto<HashMap<String, String>> sendOrderRefund(@RequestParam(value = "orderId", required = true) @NotNull(message = "订单id不能为空") String orderId,
@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) {
String orderRefundId = orderTicketsService.sendOrderRefund(orderId, orderTicketEntitiesId, reason, picList);
if (orderRefundId.length() > 10) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("orderRefundsId", orderRefundId);
return ResponseDto.success(map);
} else {
return ResponseDto.failure(orderRefundId);
}
}
@GetMapping("orderRefundDetails")
......@@ -115,7 +119,7 @@ public class KylinOrderTicketsController {
@ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<OrderRefundVo> orderRefundDetails(@RequestParam(value = "orderId", required = true) @NotNull(message = "订单id不能为空") String orderId,
@RequestParam(value = "orderRefundId", required = true) @NotNull(message = "退款订单id不能为空") String orderRefundId) {
return ResponseDto.success(orderTicketsService.orderRefundDetails(orderId, orderRefundId));
return orderTicketsService.orderRefundDetails(orderId, orderRefundId) == null ? ResponseDto.failure("获取失败") : ResponseDto.success(orderTicketsService.orderRefundDetails(orderId, orderRefundId));
}
@PostMapping("orderRefundWithdraw")
......
......@@ -36,6 +36,7 @@ import com.taobao.api.response.AlibabaDamaiMevOpenBatchpushticketResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.bson.Document;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -849,7 +850,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
log.info(UserPathDto.setData("订单支付成功回调", syncOrderParam, ""));
return "success";
} catch (Exception e) {
log.error("SYNCE ORDER E = "+e.getMessage());
log.error("SYNCE ORDER E = " + e.getMessage());
e.printStackTrace();
return "fail";
}
......@@ -990,7 +991,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
if (null != performanceVo.getIsCanRefund() && performanceVo.getIsCanRefund() == 1) {
LocalDateTime refundOpenDate = DateUtil.Formatter.yyyyMMddHHmmss.parse(performanceVo.getRefundOpenTime());
LocalDateTime refundCloseDate = DateUtil.Formatter.yyyyMMddHHmmss.parse(performanceVo.getRefundCloseTime());
if (LocalDateTime.now().isAfter(refundOpenDate) && LocalDateTime.now().isBefore(refundCloseDate) && !orderTicketVo.getExpressAddress().trim().equals("")) {
if (LocalDateTime.now().isAfter(refundOpenDate) && LocalDateTime.now().isBefore(refundCloseDate) && orderTicketVo.getExpressAddress().trim().equals("") && ticketVo.getCounts()==1) {
vo.setIsCanRefund(1);
} else {
vo.setIsCanRefund(0);
......@@ -1121,31 +1122,61 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
@Override
public OrderRefundVo orderRefundDetails(String orderId, String orderRefundId) {
OrderRefundVo vo = new OrderRefundVo();
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
try {
OrderRefundVo vo = new OrderRefundVo();
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
if (!orderTicketVo.getUserId().equals(uid)) {
if (!orderTicketVo.getUserId().equals(uid)) {
return null;
}
orderTicketVo.setFieldName(performanceVo.getFieldName());
KylinOrderRefundsVo kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId);
vo.setKylinOrderRefundsVoBaseList(kylinOrderRefundsVoBase);
vo.setOrderTicketVo(orderTicketVo);
return vo;
} catch (Exception e) {
return null;
}
orderTicketVo.setFieldName(performanceVo.getFieldName());
KylinOrderRefundsVo kylinOrderRefundsVoBase = dataUtils.getOrderRefundVo(orderRefundId);
vo.setKylinOrderRefundsVoBaseList(kylinOrderRefundsVoBase);
vo.setOrderTicketVo(orderTicketVo);
return vo;
}
@Override
public ResponseDto<String> sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList) {
public String sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList) {
KylinOrderTicketEntitiesVo orderTicketEntitiesVo = null;
try {
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList = dataUtils.getOrderRefundVoByOrderId(orderTicketVo.getOrderTicketsId());
String ticketId = orderTicketVo.getTicketId();
if (!orderTicketVo.getUserId().equals(uid)) {
return ResponseDto.failure(ErrorMapping.get("20003"));
return "无权查看";
}
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
KylinTicketVo ticketVo = null;
//获取购票数据
for (int x = 0; x < performanceVo.getTicketTimeList().size(); x++) {
KylinTicketTimesVo timeItem = performanceVo.getTicketTimeList().get(x);
for (int y = 0; y < timeItem.getTicketList().size(); y++) {
KylinTicketVo ticketItem = timeItem.getTicketList().get(y);
if (ticketItem.getTicketsId().equals(orderTicketVo.getTicketId())) {
ticketVo = ticketItem;
break;
}
}
}
if (null != performanceVo.getIsCanRefund() && performanceVo.getIsCanRefund() == 1) {
LocalDateTime refundOpenDate = DateUtil.Formatter.yyyyMMddHHmmss.parse(performanceVo.getRefundOpenTime());
LocalDateTime refundCloseDate = DateUtil.Formatter.yyyyMMddHHmmss.parse(performanceVo.getRefundCloseTime());
if (LocalDateTime.now().isAfter(refundOpenDate) && LocalDateTime.now().isBefore(refundCloseDate) && orderTicketVo.getExpressAddress().trim().equals("") && ticketVo.getCounts()==1) {
} else {
return "暂不支持退款";
}
} else {
return "暂不支持退款";
}
List<KylinOrderTicketEntitiesVo> entitiesVos = orderTicketVo.getEntitiesVoList();
......@@ -1155,24 +1186,24 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
}
}
if (null == orderTicketEntitiesVo) {
return ResponseDto.failure(ErrorMapping.get("20004"));
return "订单不存在";
}
BigDecimal refundSinglePrice = dataUtils.getCanRefundOrderEntitiesPrice(orderTicketVo, kylinOrderRefundsVoBaseList, orderTicketEntitiesId);
if (refundSinglePrice.doubleValue() <= 0) {
return ResponseDto.failure(ErrorMapping.get("20022"));
if (refundSinglePrice.compareTo(BigDecimal.ZERO)<=0) {
return "申请金额不得小于0";
}
Map token = CurrentUtil.getTokenClaims();
String username = StringUtils.defaultString(((String) token.get("nickname")), "");
String result = refundsStatusService.userOrderTicketRefunding(orderTicketVo, refundSinglePrice.doubleValue(), orderTicketEntitiesId, reason, picList, uid, username, kylinOrderRefundsVoBaseList.size());
if (result != "") {
return ResponseDto.success(result);
return result;
} else {
return ResponseDto.failure(ErrorMapping.get("20019"));
return "申请失败";
}
} catch (Exception e) {
e.printStackTrace();
return ResponseDto.failure(ErrorMapping.get("20019"));
return "申请失败";
}
}
......@@ -1295,17 +1326,13 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
kylinOrderRefunds.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL);
kylinOrderRefunds.setUpdatedAt(LocalDateTime.now());
KylinOrderRefundsVo orderRefundsVoBase = new KylinOrderRefundsVo();
orderRefundsVoBase.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL);
orderRefundsVoBase.setUpdatedAt(time);
BasicDBObject refundObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(orderRefundsVoBase)));
mongoTemplate.getCollection(KylinOrderRefundsVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderRefundsId").is(orderRefundsId)).getQueryObject(),
refundObject
new Document("$set", new Document("status", KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL).append("updatedAt", time))
);
sqlsDataC.add(new Object[]{
orderRefundsVoBase.getStatus(), orderRefundsVoBase.getUpdatedAt(), orderRefundsId
KylinTableStatusConst.ORDER_REFUND_STATUS_CANCEL, time, orderRefundsId
});
dataUtils.delOrderRefundVo(orderRefundsId);
......@@ -1367,14 +1394,11 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
);
dataUtils.delOrderTicketEntitiesRedis(orderRefundVo.getOrderRefundEntitiesVoList().get(0).getOrderTicketEntitiesId());
// 订单退款表 MONGO
KylinOrderRefundsVo orderRefundsVo = new KylinOrderRefundsVo();
orderRefundsVo.setStatus(KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY);
orderRefundsVo.setUpdatedAt(time);
orderRefundsVo.setApplicantAt(time);
BasicDBObject refundObject = new BasicDBObject("$set", JSON.parse(JsonUtils.toJson(orderRefundsVo)));
mongoTemplate.getCollection(KylinOrderRefundsVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("orderRefundsId").is(orderRefundVo.getOrderRefundsId())).getQueryObject(),
refundObject
new Document("$set", new Document("status", KylinTableStatusConst.ORDER_REFUND_STATUS_APPLY)
.append("updatedAt", time)
.append("applicantAt",time))
);
return null;
......
......@@ -624,6 +624,7 @@ public class DataUtils {
canRefundSinglePrice = singlePrice.subtract(item.getRefundPrice()==null?BigDecimal.valueOf(0.00):item.getRefundPrice());
}
}
System.out.println("单票剩余未退款金额 : "+canRefundSinglePrice);
//订单锁定金额
BigDecimal orderLockPrice = new BigDecimal("0.00");
for (KylinOrderRefundsVo refundVo : kylinOrderRefundsVoBaseList) {
......@@ -637,8 +638,10 @@ public class DataUtils {
}
}
}
System.out.println("订单锁定金额 : "+orderLockPrice);
//订单可退金额
BigDecimal refundSinglePrice = canRefundSinglePrice.subtract(orderLockPrice);
System.out.println("订单可退金额 : "+refundSinglePrice);
//是否包含快递费
if (orderTicketVo.getPriceActual().subtract(orderTicketVo.getPriceExpress()).subtract(orderTicketVo.getPriceRefund()).compareTo(canRefundSinglePrice) == 0) {
refundSinglePrice = refundSinglePrice.add(orderTicketVo.getPriceExpress());
......
......@@ -247,12 +247,14 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
int surplusGeneral = dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), -payOrderParam.getNumber());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 获取库存 -> time:" + (currentTime) + "毫秒");
log.debug("TAG_REDIS 正常 剩余库存 -> count:" + surplusGeneral);
if (surplusGeneral < 0) {//库存回滚
currentTime = System.currentTimeMillis();
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 修改库存 售罄 -> time:" + (currentTime) + "毫秒");
log.debug("TAG_REDIS 售罄 回滚库存1 -> count:" + payOrderParam.getNumber());
// redisLockUtil.unlock(lock);
return ResponseDto.failure(ErrorMapping.get("20016"));//没抢到
} else {
......@@ -270,6 +272,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
if (age > 25) {
// redisLockUtil.unlock(lock);
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
log.debug("TAG_REDIS 学生票 回滚库存2 -> count:" + payOrderParam.getNumber());
return ResponseDto.failure(ErrorMapping.get("20017"));//年龄超了
}
}
......@@ -287,6 +290,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
if (!res1.equals("")) {
// redisLockUtil.unlock(lock);
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
log.debug("TAG_REDIS 限购 回滚库存3 -> count:" + payOrderParam.getNumber());
return ResponseDto.failure(res1);//乱七八糟异常
}
}
......@@ -300,6 +304,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
if (!res1.equals("")) {
// redisLockUtil.unlock(lock);
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
log.debug("TAG_REDIS 限购 回滚库存3 -> count:" + payOrderParam.getNumber());
return ResponseDto.failure(res1);//乱七八糟异常
}
currentTime = System.currentTimeMillis() - currentTime;
......@@ -316,6 +321,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
if (isDownGeneral) {
currentTime = System.currentTimeMillis();
dataUtils.changeSurplusGeneral(payOrderParam.getTicketId(), payOrderParam.getNumber());
log.debug("TAG_REDIS 异常 回滚库存4 -> count:" + payOrderParam.getNumber());
currentTime = System.currentTimeMillis() - currentTime;
log.debug("redis 修改库存 异常 -> time:" + (currentTime) + "毫秒");
for (AdamEntersVo enters : entersVoList) {
......@@ -973,7 +979,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
}
@Override
public ResponseDto<String> sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList) {
public String sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList) {
return null;
}
......
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